在i2c协议中更改占空比有什么意义?该功能在大多数高级微控制器中都可用。
答案 0 :(得分:2)
占空比很大,因为不同的I²C模式的占空比略有不同。
检查I²C规范v5表10,pg。 48。
Mode | t_HIGH | t_LOW | ratio
--------------+--------+-------+-------
Standard-mode | 4.00u | 4.7u | 0.85
Fast-mode | 0.60u | 1.3u | 0.46
Fast-mode Plus| 0.26u | 0.5u | 0.52
您的控制器需要决定一个比率才能符合I²C规范。
因此,例如,如果控制器使用标准模式时序比,这将阻止您以最大时钟频率实现快速模式时序。
这些是 minimal t_HIGH:t_LOW标准中定义的比率。但是,请注意,100 kHz周期为10 us,但表中的t_HIGH + t_LOW小于10 us。因此,只要满足t_HIGH和t_LOW最小时序,实际值的比率就会变化。
这些比率的要点是说明I²C模式之间的I²C时序约束是不同的。它们不是控制器需要保留的强制性比率。
例如,4 us high,6 us low将是0.67比率,但标准模式时序将被满足。
STM32F4示例:
STM32F4xx系列仅支持100 kHz和400 kHz通信速度(RM0090,rev 5,第818页,第27.2节)。
我不知道您的比率来自哪里,但参考手册(RM0090,rev 5,第849页,第27.6.8节)标准模式的比例为1:1,1:2或9:快速模式的比率为16。
因此,例如,要达到100 kHz的最高标准模式时钟频率,需要将t_HIGH和t_LOW编程为5 us,因为该比率为1:1。
对于快速模式,例如比率为1:2,您需要将t_HIGH编程为3.33 us,将t_LOW编程为6.66 us,100 kHz。然而,这不符合标准模式的时间要求。
因此,在将标准模式时序保持在最高标准模式频率的同时,不能将STM32F4设置为快速模式。
反之亦然:您不能使用标准模式并编程400 kHz快速模式,因为默认的1:1比率超出2.5 us的规格,因为t_LOW将是1.25 us< 1.3我们。