1 IIC概念相关
IIC,一种串行数据总线,只有两根信号线,一根双向数据线SDA,一根时钟线SCL。数据线位宽为1bit,因而IIC传输数据时是一个bit一个bit来传输的。IIC的两根线上可以挂靠多个设备,我们把其中控制时钟线的设备叫做主设备,其他的是从设备。每个IIC设备都有个固话的地址,主设备根据此地址值来确定要通信的从设备。
一般而言,初始化后DSA和SCL均为高。
IIC中几个重要的概念包括:
开始信号:SCL保持高电平,SDA由高到低,表明一个开始信号;
停止信号:SCL保持高电平,SDA由低到高,表明一个停止信号;
数据传输:SCL为低时才允许SDA上的传输数据发生变化,SCL为高时SDA的传输数据必须保持稳定,设备在SCL为高期间进行数据采样。
ACK信号:单片机发完8bit数据后不再驱动总线,SDA和SCL的硬件设计都有上拉电阻,会把SDA变成高电平。在第8个bit,外接IIC设备接收到信号,就会在第9个bit把SDA拉低,处理器监测到SDA拉低就知道外接IIC设备数据已经收到。这个被拉低的bit被认为是一个ACK信号。如下图所示:
读写控制:设备地址为7bit,在数据发送中一共8bit,前七个bit是设备地址,最后一个bit是读写控制位,0表示写,1表示读。
2 传输过程(读/写)
写数据:
- 发送开始信号;
- 发送设备地址(写命令),等待该设备的应答信号;若未收到ACK应答,发送停止信号释放总线;
- 发送要写入寄存器的地址,等待应答信号;
- 发送要写入的数据,字节数目任意,不行发送的时候发送停止信号释放总线,通信结束;
读数据:读数据和写数据有一个关键的不同之处在于,读的时候要先写设备地址和寄存器地址,然后再读,所以有一个读写控制的过程,流程如下:
- 发送开始信号;
- 发送设备地址(写命令),等待应答信号;
- 发送寄存器地址(写命令),等待应答信号;
- 发送停止信号,停止本次通信(前面为写);
- 重新发送开始信号;
- 发送设备地址(读命令),等待应答信号;
- 读取数据,读到数据后响应ACK信号;若不想继续读取数据,响应NACK信号或发送停止信号即可。
3 相关配置
配置如上:
Data Pin/Clock pin:
pin for I/O:对应电路图中的具体引脚;
Pull resister:SDA线硬件的电阻是什么类型(上拉电阻?);
Open drain:不懂;
Direction:不可 修改,不懂,应该是配置这个引脚既可输入又可输出;
init.direction:初始化时配置成输入;修改此值会影响寄存器DDRS的值;
init.value:初始化时配置成高电平还是低电平;修改此值会修改寄存器PTS的值;
Mode Selcetion:此设备是主设备还是从设备(控制SCL线);
slave Address:不懂;
I2C Bus Mode:不懂;