分类: LINUX
2011-06-28 15:14:28
1.实现过程说明
利用两个GPIO来模拟IIC总线,一跟用来模拟时钟SCL输出,而另一根用来模拟数据线SDA,通过时钟线产生的时序来传输(读or写)数据。
IIC总线的写数据过程:
1. 传输开始信号启动从机
2. 传输8位的从机地址(slave ID)
3. 从机应答信号(0:应答(ACK);1:无应答)
4. 写从机寄存器地址
5. 从机应答信号
6. 写一个字节数据
7. 从机应答信号
8. 传输停止信号(设备停止)
9. 延时1ms左右(是必要的,因为设备关闭需要一定的时间,否则下一次启动会发生错误)
IIC总线的读数据过程:
1. 传输开始信号启动从机
2. 传输8位的从机地址(slave ID)
3. 写从机寄存器地址
4. 从机停止
5. 重新启动从机
6. 传输8位的从机地址与读信号(slave ID|0x01)
7. 读数据(8位数据无应答,16位数据传输前8位后主机要应答一次)
8. 从机停止
9. 延时1ms左右(是必要的,因为设备关闭需要一定的时间,否则下一次启动会发生错误)
(从及地址最低位为本次数据传输的方向:0为写,1为读)
在每次数据传输的时候都需要发送启动信号和停止信号!
2.开始结束条件实现
开始条件和结束条件
开始条件代码:结束条件代码:
由于初始化的时候我们将模拟SCL的GPIO初始化为输出,而对SDA的GPIO不进行初始化,根据操作来设置SDA的方向。
其中IIC的延时根据你的当前系统时钟等需要重新的调试。
3.IIC读写显示
写字节的代码如下,真正的实现可以在对本文档中的函数进行再封装!
读字节的代码:附上8位数据传输序列图:
8-Bit Write Sequence:
8-Bit Read Sequence:
做了已经半年多了,因此有很多东西都记不清了,希望这次能够简单的总结一下!