OpenEdv-开源电子网

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

如果你的项目中用STM32,而你用模拟的I2C的话,好象STM32也比8位机快不了多少,

[复制链接]

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
发表于 2014-1-2 16:45:42 | 显示全部楼层 |阅读模式


 如果你选择了STM32, 说明了你的项目的需求是比较复杂的,使用EMBEDDED OS 和大量地运用中断+DMA的编程模型是必然的选择, 如果你的项目中用STM32,而你用模拟的I2C的话, 说明了两点: 一是浪费了STM32; 二, 如果你的项目很复杂的话,你会发现在项目的开发后期,好象STM32也比8位机快不了多少, WHY!! ,但这不是STM32的问题,而是你没有最有效地利用上STM32.


 很多朋友在搞STM32的I2C接口编程时总是时不时“当在某处”(GOOGLE时你会发现这个问题很普遍), 一些朋友这时就会用软件来模拟I2C,然后,很快发现和I2C设备能很好地通信了(但当机还是可能随机出现), 这些朋友于是大骂STM32的I2C硬件接口是个”杯具”(呵呵,我有时也会突然想骂骂,但我知道,99.999%的原因还是自已对于STM32硬件接口的熟悉程度不够,或者说,是我没有扬STM32 I2C的长,而总是捉住他的短不发。)。

    固然,STM32 I2C硬件接口有设计不完善的地方,例如下面就是我从STM32最新的Errata sheet中总结出的,关于STM32 I2C接口设计上的一些缺陷和如何避开这些缺陷的推荐程序模型:

(1)把I2C的中断优先级提升到最高

(2)把发送多于2个字节的发送与接收封装成利用DMA收发的函数,而把对某I2C设备接收和发送一个字节的函数单独封装为一个POLLING (轮询)函数。

(3)在寻址某一I2C DEVICE时要先CHECK I2C BUS 是否BUSY,如果忙,则等待指定时间,如果还是忙就说明I2C BUS 挂了(原因99.9%是由于我们的I2C通信时序并不十分尊守I2C规约,或者我们所封装的I2C通信模块没有加上防守代码(出错恢复代码)),这时要调用一个专门的用于通知 I2C BUS上的所有device,让他们结束当前内部的工作,重新准备好(下雨了,收衣服啦)。如下面的我的I2C模块的FUN 切片:

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-2 22:43:28 | 显示全部楼层
IIC不管你用硬件还是软件,速度就那样了,最快一般就400Khz,IO模拟伺候的妥妥的.
用硬件,你也不可能超过400Khz吧.
所以速度不是问题.

接下来再说说我的感受,现在不用硬件IIC已经很多年了,只有在08年之前用过AVR的硬件IIC,之后从没用过硬件IIC了.
当然我用IIC也不多,驱动过:24CXX,TEA5767,RDA5820,MMA7660,ADXL345,PT23XX,以及其他一些芯片.总之,没遇到说非用硬件IIC不可的地方.
而且在ucosii下,我也用过模拟IIC.一点问题没有.

我认为软件IIC最大的好处就是:方便移植.  完全基于IO口,不需要你有IIC硬件,也不用去学习芯片这部分的知识,直接移植2个IO口即可使用.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

57

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-2-20
在线时间
1 小时
发表于 2014-1-2 23:13:25 | 显示全部楼层
是的,这几天我调试STM8IIC,都说不好调试,但是最后我还是调通了,和自己的硬件有关.我用10K上拉电阻,用逻辑分析仪的架子测试,结果老死机,后来我弄掉了夹子,结果很稳定了....所以,调不通还是在于咱们自己的理解不够啊.....也不是每个器件的IIC都想EEPROM那样好调,具体问题具体分析....
创新超越梦想,拼搏创造奇迹....
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-2 23:16:56 | 显示全部楼层
回复【3楼】废墟崛起之厦:
---------------------------------
STM8我也用软件模拟IIC,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

57

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-2-20
在线时间
1 小时
发表于 2014-1-2 23:22:20 | 显示全部楼层
不过,我调试只能达到100K,太快了果断死机....
创新超越梦想,拼搏创造奇迹....
回复 支持 反对

使用道具 举报

3

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2018-3-5
在线时间
59 小时
发表于 2018-3-29 09:26:51 | 显示全部楼层
我的使用经验是模拟IIC想要高速,逻辑分析仪一定是少不了了的,400K以上也是妥妥的,控制也比较灵活,缺点就是模拟主机会比较浪费CPU资源,模拟从机就更浪费了,但一个高可靠性的模拟iic做下来工作量和硬件也差不了多少了,移植起来确实方便许多
回复 支持 反对

使用道具 举报

2

主题

26

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1077
金钱
1077
注册时间
2019-1-16
在线时间
240 小时
发表于 2019-5-7 15:55:52 | 显示全部楼层
本来打算学一下硬件I2C的,既然这样,那还是继续用软件模拟吧。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2011-10-3
在线时间
4 小时
发表于 2020-4-21 11:13:26 | 显示全部楼层
》》》》》》》》》》》》》》》》
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 11:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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