OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5778|回复: 2

I2C TRISE寄存器(I2C_TRISE)

[复制链接]

2

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
377
金钱
377
注册时间
2015-10-19
在线时间
173 小时
发表于 2016-11-23 15:05:35 | 显示全部楼层 |阅读模式
本帖最后由 jdwang1000 于 2016-11-23 15:07 编辑

在 STM32F10xxx参考手册 P514 頁中有解釋 :

标准模式中最大允许SCL上升时间为1000ns。如果在I2C_CR2寄存器中FREQ[5:0]中的值等于0x08且TPCLK1=125ns,
故TRISE[5:0]中必须写入09h(1000ns/125 ns = 8+1)。


但是 P497 頁中又提到
I2C模块的输入时钟频率必须至少是:
●标准模式下为:2MHz (1/2,000,000 = 0.000 000 5 = 500 ns , SCL上升時間應該是 500 ns 怎麼會是 1000 ns ?)
●快速模式下为:4MHz (1/4,000,000 = 0.000 000 25 = 250 ns, SCL上升時間應該是 250 ns 怎麼會是 300 ns ?)

http://www.openedv.com/thread-7888-1-1.html  此帖 7 樓中又提到

库函数的I2C_Init()中定义了:
    I2Cx->TRISE = (u16)(((freqrange * 300) / 1000) + 1); //主模式的快速模式的Trise_scl=300ns。
    freqrange后面的300就是300ns

是我認知錯誤嗎? 還是I2C中已有明確規範SCL的允許最大上升時間 ??




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2019-11-27
在线时间
36 小时
发表于 2021-9-17 16:02:36 | 显示全部楼层
帖子过去很久了,正好今天找到了相关资料,回复一下。

I2C协议的要求是:
标准模式下,最大允许SCL的上升时间为1000ns;
快速模式下,最大允许SCL的上升时间为300ns。

I2C协议

I2C协议


在STM32F103RC系列数据手册中描述的I2C要求相同:

STM32F103RC系列数据

STM32F103RC系列数据


I2C_TRISE寄存器中保存的时间是用于,在主机释放SCL后等待TRISE个时钟周期,之后检查SCL电平。如果SCL为低电平,就意味着从机正在延长时钟。时钟延长(clock stretching)的功能是设计用于当从机来不及处理数据时,通知主机暂停发送,待从机处理结束后释放SCL到高电平,主机检测到SCL为高电平后继续发送数据。

参考文献:
IIC协议:UM10204 I2C-bus specification and user manual (nxp.com)
STM32F103RC系列数据手册:STM32F103RC - 主流增强型ARM Cortex-M3 MCU,具有256 KB Flash、72 MHz CPU、电机控制、USB和CAN - STMicroelectronics

回复 支持 反对

使用道具 举报

2

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
377
金钱
377
注册时间
2015-10-19
在线时间
173 小时
 楼主| 发表于 2021-10-18 15:04:03 | 显示全部楼层
七肢桶 发表于 2021-9-17 16:02
帖子过去很久了,正好今天找到了相关资料,回复一下。

I2C协议的要求是:

感謝 七肢桶 的回覆解說
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 16:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表