打印
[STM8]

STM8 硬件 i2c 问题

[复制链接]
3973|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
f781831|  楼主 | 2017-6-20 09:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
用的STM8的 硬件I2C +官方slave的示例代码。接收完第一帧后,第二帧无法完成接收,逻辑分析仪上发现ACK的脉宽与之前相比,短了很多并且SCL线直接被拉低了。不知道是什么原因造成ACK脉宽变短以及SCL被拉低。知道的老铁们,告知下谢谢[img][/img]

QQ图片20170620090024.png (383.72 KB )

SCL被拉低

SCL被拉低

QQ图片20170620090602.png (12.61 KB )

ACK脉宽变短

ACK脉宽变短
沙发
feelhyq| | 2017-6-20 14:24 | 只看该作者
本帖最后由 feelhyq 于 2017-6-20 14:29 编辑

在I2C总线处于工作状态时,CLK在空闲的时候拉低(防止产生结束信号),SDA在空闲的时候释放总线(OD开漏被上拉电阻拉高,I2C属于线与逻辑)。从第二张图来看,发完0x0E后,也就是在第8个时钟完成后,SDA释放了(被上拉电阻拉高),等待应答信号,而主机应答ACK会将SDA拉低,可以看到第8个时钟下降沿后有个很窄的脉冲,也就是这么来的,SDA信号被主机拉低后,在第9个时钟(应答时钟)到来时,此时SDA维持低电平,说明主机确实应答了。主机应答完后会将SDA释放(被拉高),也就出现了第九个时钟后的另外一个高电平。但是从实际波形图上看,SDA表现出来的并不是一个高电平,而是SDA释放(被上拉电阻拉高)后,立刻被拉低了(通常如果主机也是硬件I2C控制的话不会出现这种情况)。

forum.png (14.1 KB )

forum.png

使用特权

评论回复
板凳
feelhyq| | 2017-6-20 14:25 | 只看该作者
你的I2C主机是软件控制的吗?

使用特权

评论回复
地板
feelhyq| | 2017-6-20 14:31 | 只看该作者
对于总线的问题,尽量用示波器去看,毕竟还跟信号的质量有关。

使用特权

评论回复
5
f781831|  楼主 | 2017-6-20 14:33 | 只看该作者
feelhyq 发表于 2017-6-20 14:25
你的I2C主机是软件控制的吗?

我的主机是买的纬图的Ginkgo USB-I2C适配器 配置的是硬件模式

11.png (58.38 KB )

主机配置

主机配置

使用特权

评论回复
6
f781831|  楼主 | 2017-6-20 14:36 | 只看该作者
feelhyq 发表于 2017-6-20 14:25
你的I2C主机是软件控制的吗?

我发现把主机的速度 调低至5Kbps  通讯过程就一直正常了 100Kbps 能收到一次 然后死机 100kbps以上 不能收到一帧完整的数据

使用特权

评论回复
7
feelhyq| | 2017-6-20 14:39 | 只看该作者
收完第一帧后,是从机收到 11 22 33 44 55 66 77 88后再无法接收到其他数据吗?

使用特权

评论回复
8
feelhyq| | 2017-6-20 14:42 | 只看该作者
f781831 发表于 2017-6-20 14:36
我发现把主机的速度 调低至5Kbps  通讯过程就一直正常了 100Kbps 能收到一次 然后死机 100kbps以上 不能 ...

可以让你们的硬件工程师将 I2C的上拉电阻改小一点

使用特权

评论回复
9
f781831|  楼主 | 2017-6-20 14:43 | 只看该作者
feelhyq 发表于 2017-6-20 14:39
收完第一帧后,是从机收到 11 22 33 44 55 66 77 88后再无法接收到其他数据吗?

收完第一帧后 逻辑分析上看到的是 第二帧的数据 只收到了 地址位 和 第一个11的数据 然后SCL SDA 线都被拉低了 图示在一楼第二个图里

使用特权

评论回复
10
feelhyq| | 2017-6-20 14:44 | 只看该作者
feelhyq 发表于 2017-6-20 14:42
可以让你们的硬件工程师将 I2C的上拉电阻改小一点

上拉电阻改小后可以提高I2C通信速度的质量,不过也会增加功耗

使用特权

评论回复
11
f781831|  楼主 | 2017-6-20 14:45 | 只看该作者
feelhyq 发表于 2017-6-20 14:39
收完第一帧后,是从机收到 11 22 33 44 55 66 77 88后再无法接收到其他数据吗?

第一帧接收到的 是完整的

QQ图片20170620144413.png (14.35 KB )

完整数据

完整数据

使用特权

评论回复
12
f781831|  楼主 | 2017-6-20 14:46 | 只看该作者
feelhyq 发表于 2017-6-20 14:44
上拉电阻改小后可以提高I2C通信速度的质量,不过也会增加功耗

先试试调小吧,主站的工具上面推荐放的4.7k  我试试2.2k 吧

使用特权

评论回复
13
f781831|  楼主 | 2017-6-20 15:10 | 只看该作者
feelhyq 发表于 2017-6-20 14:44
上拉电阻改小后可以提高I2C通信速度的质量,不过也会增加功耗

调小了 没有改善  SCL好像 被拉低后 一直不会变高 这是为什么

使用特权

评论回复
14
feelhyq| | 2017-6-20 15:13 | 只看该作者
从波形图上面看,从机是给了主机应答(也许主机并没有收到该应答),如果主机正确接收到应答信号后会再次发送数据(数据会伴随着时钟产生),但是从波形图上看,主机是没有发送数据的(即便发送的数据全为0,CLK时钟线上应该有时终才对)。

使用特权

评论回复
15
feelhyq| | 2017-6-20 15:19 | 只看该作者
能不能把100Kb的速度稍微调小一点试试,比如说80kb,或者50kb

使用特权

评论回复
16
feelhyq| | 2017-6-20 15:22 | 只看该作者
还有一个现象,主机发完一帧数据后 直接把I2C通信给结束掉了,你可以尝试发送的一帧数据为多个字节,比如说20个或者30个,这些数据应该也能完整的收到

使用特权

评论回复
17
f781831|  楼主 | 2017-6-20 15:23 | 只看该作者
feelhyq 发表于 2017-6-20 15:19
能不能把100Kb的速度稍微调小一点试试,比如说80kb,或者50kb

速度调到 20kbps 没问题 能一直通讯上

使用特权

评论回复
18
f781831|  楼主 | 2017-6-20 15:25 | 只看该作者
feelhyq 发表于 2017-6-20 15:22
还有一个现象,主机发完一帧数据后 直接把I2C通信给结束掉了,你可以尝试发送的一帧数据为多个字节,比如说 ...

是啊 一帧 8个字节  速度100k的时候第一帧8字节都收到了 然后第二帧 只收到第一个字节 SDA 和SCL 线都被拉低了

使用特权

评论回复
19
f781831|  楼主 | 2017-6-20 15:27 | 只看该作者
feelhyq 发表于 2017-6-20 15:22
还有一个现象,主机发完一帧数据后 直接把I2C通信给结束掉了,你可以尝试发送的一帧数据为多个字节,比如说 ...

是啊 一帧 8个字节  速度100k  的时候第一帧8字节都收到了 然后第二帧 只收到第一个字节 SDA 和SCL 线都被拉低了

使用特权

评论回复
20
feelhyq| | 2017-6-20 15:29 | 只看该作者
自己写个弄个I2C主机 不用维图的,对比下就出来了。

使用特权

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

本版积分规则

1

主题

20

帖子

0

粉丝