打印
[Kinetis]

【读书笔记14 与外设通讯之I2C】

[复制链接]
1394|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
springvirus|  楼主 | 2013-11-11 13:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 springvirus 于 2013-11-14 10:17 编辑

I2C物理连接很简单,2条线,一条是SDA,串行数据线,另一条是SCL,串行时钟线。 通常一次标准传输包含4个部分:
1.开始信号
2.从地址传输
3.数据传输
4.停止信号

开始信号:
当没有主机占据总线(SDA和SCL都是高电平)时,总线处于空闲态。主机发起开始信号,来初始化一次 通讯。开始信号为,当SCL为高电平时,SDA的电平为一次从高到低的跳变。开始信号标志着一次新的 数据传输的开始。

从机地址传输:
开始信号之后,主机发送的第1个字节就是从机地址,在读写位之后的7位就是从机地址,读写位表明 数据传输方向。 0 - 读传输,从机发送数据到主机 1 - 写传输,主机发送数据到从机 【注意: 读或写,都是从主机角度看的】
只有地址与所发送的从机地址相匹配的从机才会以发送应答位的方式来响应主机。应答位为从机在第9个 时钟时把SDA拉低。各个从机需有唯一地址,且各不相同。

数据传输:
在地址字节正确传输后,数据字节便以读写位所要求的方向每字节依次传输了。每个数据字节为8位, 当SCL = 0时,数据可以改变,当SCL = 1时,数据需保持稳定。每个数据字节后,都有一个第9位,应答位。 【注意,应答位都是数据接收方发送到数据发送方的】 最先传输字节里的最高位,总之,一个数据字节的传输需要9个时钟脉冲。
若从机在第9位时,没有给主机发应答位,从机需拉高SDA,此时主机认为传输失败了。 若主机在第9位时,没有给从机发应答位,从机则认为
传输结束,便释放SDA。

停止信号:
停止信号为,当SCL为高电平时,SDA的电平为一次从低到高的跳变。由主机发起停止信号,此时,从机 需释放SDA。
重新开始信号: 主机在产生首次停止信号之前,再次产生开始信号,称为重新开始信号,主机在没释放总线时,与另一从机 进行通信或者与同一从机通信时转变模式时(即改变身份,发送变接收,或接收变发送),会使用到重新开始信号。

数据传输方向不变: 首个地址字节的前5位,固定为0x11110。 当一个10位地址跟在开始信号之后,总线上的每个从机都把自己的地址与从机地址首个字节的前7位(1111 0xx) 进行比较,并判断第8位的读写位是否为0,有可能不止一个从机发现匹配并发送应答位(A1),发现匹配的从机 再次把自己的地址与从机地址的第2字节的8位进行比较,此时便只有一个从机发现匹配,并发送应答位(A2)。
【这里首个地址字节中的第6位和第7位,与第2个字节的8位,合称为10位地址。叙述应结合table50-42来看, 更直观。】

数据传输方向改变: 关键点是:主机在接收到A2后,要发送重新开始信号,紧接着发送0x111 0xx+读写位(R/W = 1), 地址匹配的从机会发送应答位(A3),之后就是数据传输了。
涉及到的中断: IICIE为中断标志位,ICCIF为中断标志位,在中断服务子程序中要对中断标志位写1来清零。可以通过读 状态寄存器来判断类型。
1. 字节传输中断:
2. 地址检测中断:
3. 退出低功耗模式或停止模式中断:
4. 仲裁丢失中断
5. SMBus的超时中断,分为SCL低电平超时中断,SCL高电平且SDA低电平超时中断
传输初始化过程: 从机:
1.写控制寄存器2
2.写地址寄存器1来设置从机地址
3.写控制寄存器1来使能I2C模块和中断
4.初始化RAM中变量
5.初始化Figure50-42和50-43中的涉及到的变量 主机:
1.写分频寄存器来设置波特率
2.写控制寄存器1来使能I2C模块和中断
3.初始化RAM中变量
4.初始化Figure50-42和50-43中的涉及到的变量
5.写控制寄存器1来使能TX和使能主机模式
6.把从机地址写入数据寄存器

【总结:I2C本身的通讯过程不是很复杂,但MCU的内部I2C模块控制通讯来说,涉及到的寄存器和标志位 还是不少,看来得通过例程来熟悉I2C模块各寄存器的使用。】

相关帖子

沙发
FSL_TICS_Jeremy| | 2013-11-11 14:09 | 只看该作者
论坛的例程讲解文档就有关于I2C例程的。楼主可以下载来参考。

使用特权

评论回复
板凳
springvirus|  楼主 | 2013-11-11 14:19 | 只看该作者
FSL_TICS_Jeremy 发表于 2013-11-11 14:09
论坛的例程讲解文档就有关于I2C例程的。楼主可以下载来参考。

OK !

使用特权

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

本版积分规则

127

主题

4552

帖子

14

粉丝