你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32L073中I2C(SMBUS)的问题

[复制链接]
liming45 提问时间:2017-12-21 18:55 /
       准备做一个项目,用到STM32L073芯片中I2C模块的SMBUS模式,最近对其进行了调试,产生了以下疑问,望有人能够解惑,不胜感激!
1.  SMBUS的收发两端的PEC字节不一致,导致PECERR置1;详细情况是这样的:
     设置NBYTES=3;ADD10=1;HEAD10R=0;RD_WRN=1ECBYTE=1;
     想要从从设备读取2次数据,每次读取2个数据字节+1Byte PEC字节,两次读取中间不产生STOP,流程如下(省略了ACK):
     START -> ADDR0(bit0=0) -> ADDR1 -> ADDR0(bit0=1) -> DAT0 -> DAT1 -> PEC0 -> RESTART -> ADDR0(bit0=0) -> ADDR1 -> ADDR0(bit0=1) ->          DAT2 -> DAT3 -> PEC1 -> STOP;

     如上流程,主从两边计数得到的PEC数据不一致,经分析,主端参与计算的字节为ADDR0(bit0=0)、ADDR1、ADDR0(bit0=1)、DAT2、DAT3,最后计算得到PEC1,而从端参与计算的字节为ADDR0(bit0=0)、ADDR1、ADDR0(bit0=1)、DAT0、DAT1,ADDR0(bit0=0)、ADDR1、ADDR0(bit0=1)、DAT2、DAT3,计算得到待发送的PEC1,不知哪种正确,或者我程序中什么地方配置有问题。

哪位熟悉能帮忙解答一下!


收藏 1 评论3 发布时间:2017-12-21 18:55

举报

3个回答
toofree 回答时间:2018-2-5 10:15:13
本帖最后由 toofree 于 2018-2-5 10:23 编辑

PEC校验字节包括了PEC字节之前的所有数据。
下面是SMBUS协议中对PEC的描述
傲游截图20180205101341.png

傲游截图20180205102235.png

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

feixiang20 回答时间:2018-2-5 10:35:13
尝试修改你的设置,逐层修改你的设置参数,分析最终正确的可能性,得到正确的流程。另外找点类似的实验资料看看,重新确定步骤的正确。

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

无薪税绵 回答时间:2018-2-5 11:23:04
看样子,从端把主端的数据也计算了一次。
找了个例程给你参考一下:
http://blog.csdn.net/zlk1214/article/details/76037417

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版