这段时间肤浅地学习了各种传输协议,包括IIC,UART,SPI等等。刚开始学习并没有太过深入了解,代码也是糊里糊涂不求甚解。
今天看到了ninghechuan童鞋在微信号里发布的IIC学习笔记,觉得写博客确实不错,不久前我才刚注册的博客,这次算是第一次开始记录自己的fpga学习过程。今天我就简单聊聊IIC协议的学习,基于苏州思得普科技公司得小脚丫开发板,使用IIC驱动PCF8591这款芯片。
PCF8591是集成了4路ADC和1路DAC的芯片,使用I2C总线通信。
对于IIC是什么还不明白的童鞋可以选择出门左转,进入http://blog.sina.com.cn/s/blog_71c0df0d0101qci6.html查看IIC详细解释;
不过没看懂也不要紧,我帮大家把这篇博文的主要信息总结为以下几个关键点:
- IIC由数据线SDA和时钟线SCL这两根线构成,其中SCL只能由主机发出;
- 只有在时钟线SCL为低电平时,才允许数据线SDA上的电平状态发生变化;
- 数据线上规则是:高位先传,低位后传;
- 规定:开始信号后的第一个字节为寻址字节,用来寻址被控器件(从机);
- IIC总线在传送数据过程中共有四种类型信号,它们分别是:开始信号、停止信号、重新开始信号和应答信号;
- 应答信号:接收数据的IC在接收到8位数据后,向发送数据的IC发出的特定的低电平脉冲。
- 传输过程如下:首先,主机发送一个开始信号,启动一次IIC通信;在主机对从机寻址后,再在总线上传输数据。IIC总线上传送的每一个字节均为8位,首先发送的数据位为最高 位,每传送一个字节后都必须跟随一个应答位(低电平为确认,高电平为不确认),每次通信的数据字节数是没有限制的;在全部数据传送结束后,由主机发送停止信号,结束通信。
- 每当一个字节的数据或命令传输完成时,都会有一位的应答位,需要应答时,数据发出方将SDA总线设置为3态输入,由于IIC总线上有上拉电阻,因此此时总线默认高电平,若数据接收方正确接收到数据,则数据接收方将SDA总线拉低,以示正确应答。
- 应答位是数据接收方给数据发送方
- 0表示主机发送数据(写),1表示主机接收数据(读)
- 0(写入状态):当scl为高电平的时,sda的数据被写入从机,当scl为低电平的时候sda的数据被写入主机
1(读取状态):当scl位高电平时,sda上的数据保持数据稳定,当scl位低电平时,器件上的数据被读取到sda总线上; - 时钟总线为高电平的中心时采集数据,在时钟总线为低电平的中心改变数据,每发送8位数据会有一个应答。
既然基础知识准备的差不多了,那就系好安全带赶紧上车吧。
---鉴于控制篇幅,请见下节博客
浙公网安备 33010602011771号