打印
[MCU]

一种新型外设接口的构想

[复制链接]
828|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
科技猎人|  楼主 | 2018-1-12 13:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现有的外设接口的优缺点:
电路连接都是有VCC,GND两根电源线的,后面不再赘述了。应用的外设都局限在板载的一些低速低通信量芯片或模块,高性能或特殊需求的外设接口和此文无关。
单线总线(1-wire)
如18B20,硬件链接只需一根数据线,非常简单,但在编程和CPU效率上却很不理想,没有中断通知,通讯速率很低,而且在一个完整访问周期内不允许被中断。
I2C总线
I2C 接口的EEprom,只需要I2C两根接线,cpu主动读写数据。
I2C 接口的 温湿度传感器芯片,只需要I2C两根接线,需要cpu主动查询。
I2C 接口的多轴重力加速度传感器,除了I2C两根接线外还需要一根中断线通知CPU状态有变化。
I2C 接口的触摸屏,除了I2C两根接线外还需要一根中断线,一根复位/唤醒线。
通信速率较低,可以挂接多个从设备。总的来讲I2C接口还是比较简洁的,编程也不太复杂。
SPI总线
SPI接口的无线模块,SPI 4根线,一根中断线,一根复位/唤醒线,共计6根线。
SPI接口通信速率较高,但链接线数较多,尤其在挂接多个从设备时,每多一个设备都要多一条片选线和中断线。另外SPI接口虽然是全双工接口,可到目前为止我还从来没见过使用全双工的情况。
串口
Uart接口的从器件,自带收发中断,一般就收发两根线,为异步通信,通信速率低距离较短,为两主机对话模式,作为从机接口的话,编程相对复杂。
USB总线
差分两线链接,硬件链接很简单,速率高,距离远,但芯片实现复杂,软件协议也很复杂,不适用于板载的低成本低功耗低复杂度从属器件。
虽然I2C,SPI总线都是可挂接多个从设备,但实际开发中大多数都是只挂一个从设备;即使真得要挂接多个从设备,在软硬件设计上也要多加小心,系统鲁棒性不是很好。另外实现中断通知,复位唤醒还需要借助额外的gpio引脚连接和中断响应处理,不够简洁。
而且有SPI,Uart还有多种硬件链接上的扩展或变体,使得软硬件设计不好统一处理。
基于以上情况,个人构想(不着边际,胡思乱想)这样一种从设备总线,适用于通信量不是很大(几字节到几K字节),速率要求不高(100K~100Mbps),距离不是很远(1~100cm),有中断通知,休眠唤醒,硬件复位等操作需求的情况。主要是在I2C总线基础上实现,命名为
TWI(tow wire interface)
特性如下:
1. 只需两根线,3.3V TTL电平,不需要额外扩展硬件线路,链接简单易实现。简洁统一的电路接口,标准易扩展的报文协议。
2. 只接一个从设备,免去了片选信号或地址字段,消除了总线竞争会引发的各种异常,因而大幅简化了芯片和软件复杂度。
3. 为同步传输方式,类似I2C总线,一根时钟线,一根数据线。相比于异步传输抗干扰强,通信速率高。即便用gpio模拟该总线,在通信中因CPU中断响应而拉长比特位也不影响传输准确性。
4. 时钟线由主机推挽输出,从机为输入端,空闲时为高电平,如果芯片处于休眠状态,时钟线置低能唤醒从机。
数据线为半双工方式,主从都可为输入模式,或开漏输出模式,需要外部电阻上拉,所以空闲时也为高电平。在空闲状态下,如果从器件有消息通知主机,可以发送一个低电平脉冲,这时主机中断响应,待数据线被从机释放恢复高电平后,主机方可发送数据。
在通信过程中如果从机出现忙碌,故障等问题也可一直保持数据线拉低,主机则一直等到从机释放数据线后,才可继续通信,查询从机状态。
5. 通信以字节为单位,每字节8位,高位先出。每次通信必须为一个完整报文,报文格式固定但长度不定。
通信中每发一字节不需要有应答过程,I2C每收发一字节都有一个应答过程,这会使得芯片电路和软件实现变得复杂,同时也影响通信速率。SPI就没有校验位,校验可以在报文收发完成后整体校验。
6.每个从机都有一个最多128字节的寄存器组,报文通信就是读取或改写这一组寄存器值。电路上通过移位寄存器便可以实现。
对于一般的传感器或控制器,这最大的128个字节足够一个报文就传输足够多的信息。对于加大数据访问量的芯片则需要通过寄存器间接访问了。如对于存储类芯片则不够,可以先一个短报文设定内存访问地址,后一个起始地址设为127,让首字节自后的数据访问内存。SPI接口的无线模块很多就是类似这样的方式。
7.报文的首字节高7位为寄存器地址(0~127),最低位为读写控制位(0为写1为读),表明第二字节从哪一个寄存器开始读写。
如果报文首字节为0,即表示要从0寄存器开始写,从机要忽略后面的数据,当数据长度大于等于4字节时,从机要进行硬件复位,复位后处于接收模式,等待主机命令。所以从机的0号寄存器应当不分配其他功能位。


与I2C相比是
去掉了起始位,停止位处理
去掉应答
去掉多主机多从机情况
去掉报文10位设备地址的情况
增加寄存器地址段
增加硬件唤醒复位功能
增加中断触发功能
与SPI相比是
去掉了片选信号
将收发两线合并成一线
SPI的4种电平相位模式统一为一种
增加硬件唤醒复位功能
增加中断触发功能
可以看做是I2C与SPI总线的结合体变种,电路连接类似于I2C,而字节传输协议和芯片实现方式类似于SPI,但软硬件实现起来都更简洁。



未完待续。。。

相关帖子

沙发
redleaves| | 2018-1-12 14:09 | 只看该作者
SWD

使用特权

评论回复
板凳
ayb_ice| | 2018-1-12 14:32 | 只看该作者
对1wire总线的描述
“如18B20,硬件链接只需一根数据线,非常简单,但在编程和CPU效率上却很不理想,没有中断通知,通讯速率很低,而且在一个完整访问周期内不允许被中断。”
是有错误的
并非在一个完整的周期内不允许被中断,很多时候是可以中断的,

使用特权

评论回复
地板
ohy3686| | 2018-1-12 23:59 | 只看该作者
ayb_ice 发表于 2018-1-12 14:32
对1wire总线的描述
“如18B20,硬件链接只需一根数据线,非常简单,但在编程和CPU效率上却很不理想,没有中 ...

单总线节省了I/O端口,但却白白牺牲了时间,
而且时序要求严格,稍有不慎,数据就容易出错。

使用特权

评论回复
5
airwill| | 2018-1-14 14:02 | 只看该作者
ohy3686 发表于 2018-1-12 23:59
单总线节省了I/O端口,但却白白牺牲了时间,
而且时序要求严格,稍有不慎,数据就容易出错。 ...

这个浪费倒要另说, 如果由强大的外设实现, 也就没有了浪费.
如果厂商厉害, 还能设计出多主机的总线仲裁来

使用特权

评论回复
6
renwanbin| | 2018-1-15 14:56 | 只看该作者
我是菜鸟,学习了。

使用特权

评论回复
7
科技猎人|  楼主 | 2018-1-16 15:45 | 只看该作者

你说的是arm的两线调试接口吧。这里讨论的是简单低成本的处理器板上外设接口。

使用特权

评论回复
8
xingnaipeng| | 2018-1-23 15:03 | 只看该作者
学习了。

使用特权

评论回复
9
zqx1000| | 2018-4-10 19:17 | 只看该作者
kankan

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

192

帖子

8

粉丝