回顾这段时间做的小物品,发现有这么几种常用的总线,如:I2C、UART、SPI等,接下来看一下这几种总线的工作方式和配置方法。
首先是i2c总线。
1.线路比较简单,只有一条数据线SDA,一条时钟线SCL。
2.串行的8位双向数据传输模式一般有三种,分别是标准模式:100KHZ;快速模式下可以达到:400KHZ;高速模式下可以达到3.4MHZ
接下来看一下传输协议
1.开始和结束
当SCL为高电平时,SDA由高电平跳变到低电平表示开始传输数据
当SCL为高电平时,SDA由低电平跳变到高电平表示结束数据传输
2.数据传输规则
i2c是大端模式传输,即高位在前低位在后,每次传输一个字节。当SCL为高电平时,SDA上的数据要保持不变;当SCL为低电平时,SDA上的数据可以进行改变。
3.数据的读写
首先是写数据:
(1)主设备发送起始位
(2)主设备发送从设备地址和读/写位,高电平是读,低电平是写。设备地址一般都是8位,这里为什么是7位呢,后面解释,我可是在这里吃过亏的。
(3)从设备应答
(4)主设备发送要写入的内部寄存器地址
(5)从设备应答
(6)主设备发送数据
(7)从设备应答
(8)主设备发送停止位
读取数据:
(1)主设备发送开始位
(2)主设备发送从设备地址和读/写位
(3)从设备应答
(4)主设备发送从设备内部寄存器地址
(5)从设备应答
(6)主设备重新发送开始位和从设备地址及读位
(7)从设备应答
(8)从设备发送数据
(9)主设备停止应答
(10)主设备发送停止位
基本上传输协议就是这样了,接下来说一下容易出问题的地方。
1.上面提到的从设备地址问题,一般是8位,但是为什么时序图上只有7位呢?
下面援引其他人的解释:
i2c设备的7位地址是就当前i2c总线而言的,是“相对地址”。不同的i2c总线上的设备可以使用相同的7位地址。所以系统中一个i2c设备的“绝对地址”由二元组(i2c适配器的ID和设备在该总线上的7位地址)表示。这也排除了一个i2c总线上出现多个地址相同的设备。
注意点:
(1)同一个i2c上的设备,设备地址不能相同
(2)抓到i2c的波形后,7位地址右移一位才是你手册上给的地址。所以一旦报的错误是从设备没有应答时,就要看一下从设备地址是否正确,注意读/写函数里面是否有左移一位的操作,一般都是左移一位或上一个1或0,没有的话自己加上试试。