[应用相关] I2C时序学习笔记

[复制链接]
 楼主| vigous1 发表于 2015-3-29 11:13 | 显示全部楼层 |阅读模式
仔细看了下reference manual,需要区分两个名词:
输入时钟频率 peripheral input clock frequency。分为at least 2MHz in Standard mode & 4MHz in Fast mode。需要在I2C_CR2寄存器中写入。
通讯速度 communication speed。分为standard speed (up to 100kHz) & fast speed (up to 400kHz)。需要使用CR2中写入的频率及高低电平持续时间计算得到。计算所得参数写入I2C_CCR寄存器中。

在实现交替往两个从设备读写数据的过程中,常出现I2C总线被挂起的情况,动作无法继续进行。踉踉跄跄地把程序糊好搞定,来整理一下I2C接口的读写时序:
起始条件为SCL为高电平时,SDA线由高至低。ACK为SDA上的低电平,时间大于一个SCL周期。停止条件为SCL为高电平时,SDA由低至高的跳变。

S:起始条件;A:ACK;NA:no ACK;P:停止条件。
地址的最后一位为1时,从机进入发送模式,否则从机默认为接收模式。

上述为I2C接口一般时序,对具体I2C总线上芯片的控制,需要根据芯片数据手册上给出的时序编程。

 楼主| vigous1 发表于 2015-3-29 11:13 | 显示全部楼层
PS:在寄存器中,CR1的最高位SWRST可以用来释放被挂起的总线。
energy1 发表于 2015-3-29 18:13 | 显示全部楼层
I2C时序很重要
mmuuss586 发表于 2015-3-29 18:47 | 显示全部楼层
学习下,谢谢分享;
powerful1 发表于 2015-3-29 18:52 | 显示全部楼层
对具体I2C总线上芯片的控制,需要根据芯片数据手册上给出的时序编程。
lovecat2015 发表于 2015-3-30 16:50 | 显示全部楼层
I2C读写flash的速度如何呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

427

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部