硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4876|回复: 15
收起左侧

IO专用扩展芯片,FMC接口

[复制链接]

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2019-10-2 23:24:37 | 显示全部楼层 |阅读模式
最近新板子上用一款芯片扩展了多个双向IO口,相对于常见的245和574,这个感觉还挺好用的,分享给大家!
型号是CH351DS3,几块钱的国产芯片,可以用8位并口扩展32个双向IO口。
项目上用8位FMC总线驱动的液晶屏,所以这个芯片顺带也挂在了8位FMC总线上,主要是用来扫描按键以及一些片选引脚用的。
软件操作很方便,借鉴了硬汉哥的FMC对bit位的操作,但是我的习惯是底层定义保持原生态,然后采用统一宏定义的方式去操作底层,这样的好处是程序容易移植,上层应用也不必考虑底层是扩展的IO口还是自带的IO口。
比如程序中如果想拉低WIFI的使能引脚,只需要WIFI_EN=0就可以,确实很方便,示例代码如下,仅供参考。
struct Ch351Drt{
        uint8_t bit0 :1;   
        uint8_t bit1 :1;   
        uint8_t bit2 :1;   
        uint8_t bit3 :1;  
        uint8_t bit4 :1;
        uint8_t bit5 :1;   
        uint8_t bit6 :1;  
        uint8_t bit7 :1;   
};

(NE2上就挂了个IO口扩展芯片,所以没有再用译码器之类的芯片)
struct Ch351Drt *Ch351P0 = (struct Ch351Drt *)((0x64000000));
struct Ch351Drt *Ch351P1 = (struct Ch351Drt *)((0x64000000 + (1 << 6)));
struct Ch351Drt *Ch351P2 = (struct Ch351Drt *)((0x64000000 + (1 << 7)));
struct Ch351Drt *Ch351P3 = (struct Ch351Drt *)((0x64000000 + (1 << 7) + (1 << 6)));


#define                MRF_GPIO0                Ch351P0->bit0
#define                 MRF_CS                         Ch351P0->bit1   
#define                 MRF_SDN                         Ch351P0->bit2   
#define                 WIFI_RST                         Ch351P0->bit3
#define                 WIFI_EN                         Ch351P0->bit4
#define                 SD_CS                         Ch351P0->bit5  
#define                 POWER_EN                 Ch351P0->bit6
#define                 GT_CS                         Ch351P0->bit7   

#define                KEY_UP                        Ch351P1->bit0
#define                 KEY_DOWN                 Ch351P1->bit1   
#define                 KEY_LEFT                         Ch351P1->bit2   
#define                 KEY_RIGHT                 Ch351P1->bit3
#define                 KEY_ENTER                Ch351P1->bit4
#define                 KEY_BACK                 Ch351P1->bit5  
#define                 KEY_1                         Ch351P1->bit6
#define                 KEY_2                         Ch351P1->bit7   




评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2019-10-3 00:57:41 | 显示全部楼层
非常感谢楼主分享
回复

使用道具 举报

7

主题

190

回帖

216

积分

高级会员

积分
216
发表于 2019-10-3 09:01:17 | 显示全部楼层
感谢分享  挺好的
回复

使用道具 举报

609

主题

3047

回帖

4894

积分

至尊会员

积分
4894
发表于 2021-1-16 09:58:53 | 显示全部楼层
这个芯片貌似不好买啊 在 淘宝上没有搜索到

CH351DS3
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2021-1-19 07:45:41 | 显示全部楼层
hpdell 发表于 2021-1-16 09:58
这个芯片貌似不好买啊 在 淘宝上没有搜索到

CH351DS3

35X系列,在沁恒官网貌似只有这个

http://www.wch.cn/application/345.html
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2021-1-19 07:46:30 | 显示全部楼层
hpdell 发表于 2021-1-16 09:58
这个芯片貌似不好买啊 在 淘宝上没有搜索到

CH351DS3

找到了,应该是这个

http://www.wch.cn/downloads/CH351DS3_PDF.html
回复

使用道具 举报

609

主题

3047

回帖

4894

积分

至尊会员

积分
4894
发表于 2021-1-19 08:47:00 | 显示全部楼层
eric2013 发表于 2021-1-19 07:46
找到了,应该是这个

http://www.wch.cn/downloads/CH351DS3_PDF.html

多谢多谢啊,看看捣鼓能否成功哟
回复

使用道具 举报

609

主题

3047

回帖

4894

积分

至尊会员

积分
4894
发表于 2021-1-19 08:59:16 | 显示全部楼层
eric2013 发表于 2021-1-19 07:46
找到了,应该是这个

http://www.wch.cn/downloads/CH351DS3_PDF.html

请教下,这个 ch351 芯片,地址 端 A2-A0 是不是不用接,直接悬空即可啊 ?

在实际应用中,按照楼主提供的方法重新定义即可啊  ??
吧楼主位 的 地址改成如下即可  ?

struct Ch351Drt *Ch351P0 = (struct Ch351Drt *)((0x64000000));
struct Ch351Drt *Ch351P1 = (struct Ch351Drt *)((0x64000000 + (1 << 20)));
struct Ch351Drt *Ch351P2 = (struct Ch351Drt *)((0x64000000 + (1 << 21)));
struct Ch351Drt *Ch351P3 = (struct Ch351Drt *)((0x64000000 + (1 << 21) + (1 << 20)));


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2021-1-19 12:37:53 | 显示全部楼层
hpdell 发表于 2021-1-19 08:59
请教下,这个 ch351 芯片,地址 端 A2-A0 是不是不用接,直接悬空即可啊 ?

在实际应用中,按照楼主提 ...

要接
QQ截图20210119123621.png
回复

使用道具 举报

609

主题

3047

回帖

4894

积分

至尊会员

积分
4894
发表于 2021-1-19 13:01:30 | 显示全部楼层

应该可以使用普通的 io 口输出高低电平进行控制吧,因为 FMC_Ax 的端口被其他的功能使用完了,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2021-1-19 19:19:23 | 显示全部楼层
hpdell 发表于 2021-1-19 13:01
应该可以使用普通的 io 口输出高低电平进行控制吧,因为 FMC_Ax 的端口被其他的功能使用完了,

可以使用普通IO控制。
回复

使用道具 举报

609

主题

3047

回帖

4894

积分

至尊会员

积分
4894
发表于 2021-1-19 20:54:04 | 显示全部楼层
eric2013 发表于 2021-1-19 19:19
可以使用普通IO控制。

那就好办了,多谢多谢喔
回复

使用道具 举报

0

主题

101

回帖

101

积分

初级会员

积分
101
发表于 2021-1-21 13:27:58 | 显示全部楼层
并口外扩,需要IO还是太多
串口外扩,IIC接口,单片扩16路,最大可挂接8片
http://www.novosns.com/web/index ... p;cid=4&id=1230
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-4-3 16:15:19 | 显示全部楼层
您好,博主,想请问一下这个I/O芯片与单片机如何连接的,可以分享一下电路原理图吗?
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
 楼主| 发表于 2023-5-19 16:03:30 | 显示全部楼层
wqqq 发表于 2023-4-3 16:15
您好,博主,想请问一下这个I/O芯片与单片机如何连接的,可以分享一下电路原理图吗?


原理比较简单,挂FMC总线上即可。
QQ截图20230519160046.png
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
 楼主| 发表于 2023-5-19 16:05:20 | 显示全部楼层
tigerdill 发表于 2021-1-21 13:27
并口外扩,需要IO还是太多
串口外扩,IIC接口,单片扩16路,最大可挂接8片
http://www.novosns.com/web/i ...

最大的优势是速度快,如果对IO口速度没太高的要求,还是建议用I2C去外扩。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 10:33 , Processed in 0.371251 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表