[开发工具] I2C 读写,不产生停止信号

[复制链接]
268|38
地瓜patch 发表于 2026-7-16 10:49 | 显示全部楼层 |阅读模式
使用 HAL I2C 库,能否在芯片地址应答、数据应答之后持续输出 SCL/SDA 数据流,不发送 STOP 停止位?
如果 HAL 库做不到,我打算改用软件模拟 I2C;大家有没有推荐方案?
我所用的目标器件不希望出现下文标注的停止时序段。

534126a5846b355430.png

香水城 发表于 2026-7-16 20:28 | 显示全部楼层
寻址应答后,可以连续读写的,直到读写完成,MASTER才发STOP。
内政奇才 发表于 2026-7-17 16:00 | 显示全部楼层
HAL_I2C_Master_Transmit函数默认在传输结束后自动发送STOP,要连续传输得用HAL_I2C_Master_Seq_Transmit_IT。
classroom 发表于 2026-7-17 16:31 | 显示全部楼层
使用HAL_I2C_Master_Transmit时把传入的传输字节数设为0,可能跳过STOP发送,但这种方式不太标准。
cr315 发表于 2026-7-17 17:10 | 显示全部楼层
I2C的停止位是硬件自动控制的,除非用寄存器直接操作,否则很难精确控制STOP的时机。
duo点 发表于 2026-7-17 17:42 | 显示全部楼层
目标器件不希望出现STOP时序段,那就需要用 Repeated Start 来连接多个传输,中间不停。
flycamelaaa 发表于 2026-7-17 18:13 | 显示全部楼层
HAL库的阻塞模式在每次传输结束都会产生STOP,用中断或DMA模式可以控制不发送。
jcky001 发表于 2026-7-17 18:44 | 显示全部楼层
Repeated Start 的条件是传输完一个字节后不释放总线,继续发下一个,这需要手动控制控制位。
onlycook 发表于 2026-7-17 19:15 | 显示全部楼层
软件模拟I2C最灵活,想什么时候发STOP就什么时候发,但占用CPU和时间。
powerantone 发表于 2026-7-17 19:45 | 显示全部楼层
硬件I2C的寄存器里有STOP位,写0就不发,但HAL库封装太厚,改底层寄存器更方便。
probedog 发表于 2026-7-17 20:15 | 显示全部楼层
把CR2寄存器里的STOP位在传输前清零,就能阻止HAL发送停止位。
solty 发表于 2026-7-17 20:45 | 显示全部楼层
多字节连续传输,每次只发一个字节然后重新Start,比一次发完再Stop更符合要求。
spicy 发表于 2026-7-17 21:18 | 显示全部楼层
目标器件是EEPROM还是传感器?有些器件对STOP敏感,有些则无所谓,要先确认。
stormwind123 发表于 2026-7-17 21:49 | 显示全部楼层
用逻辑分析仪抓HAL每次传输结束的波形,确认STOP是否真的发出来了。
七毛钱 发表于 2026-7-17 20:20 | 显示全部楼层
改成DMA模式,传输长度设成你要的字节数,然后在完成回调里不调用HAL_I2C_Stop。
今天会画卧蚕吗 发表于 2026-7-17 22:20 | 显示全部楼层
软件模拟I2C如果主频够高,时序可以做到很准,但要注意中断会打断时序。
内政奇才 发表于 2026-7-17 22:50 | 显示全部楼层
建议先尝试修改HAL库中发送STOP的条件判断,而不是重写整个I2C驱动。
 楼主| 地瓜patch 发表于 2026-7-17 19:49 | 显示全部楼层
香水城 发表于 2026-7-16 20:28
寻址应答后,可以连续读写的,直到读写完成,MASTER才发STOP。

用模拟iic试了一下,达到要求了
 楼主| 地瓜patch 发表于 2026-7-17 19:49 | 显示全部楼层
duo点 发表于 2026-7-17 17:42
目标器件不希望出现STOP时序段,那就需要用 Repeated Start 来连接多个传输,中间不停。 ...

我试试哈
kzlzqi 发表于 2026-7-18 15:41 | 显示全部楼层
看你的波形图,ACK之后SCL和SDA都拉高了,这其实是总线空闲状态。如果后面没有紧接着发STOP,可能是你的代码里在发送完数据后直接进入了死循环或者延时,导致I2C控制器没机会发出停止位。检查一下HAL_I2C_Master_Transmit之后的代码逻辑
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

3039

主题

18148

帖子

31

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