主题:CE中用GPIO模拟总线问题

  共有27171人关注过本帖    
关山晓月
1楼


CE中用GPIO模拟总线问题  发帖心情 Post By:2012-3-2 8:43:00   [只看该作者]

CE中用GPIO模拟总线问题
CE是多任务系统,模拟总线时的时序应会因系统调度而造成时序错误 导致通讯数据,应该怎么解决呢?

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lqk
2楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2012-3-2 9:17:00   [只看该作者]

我的理解是,系统调度只会造成总线当前状态的延时(或叫保持),而不会导致通讯错误。
比如通过GPIO模拟I2C总线,当数据线刚变高输出一个高电平,此时系统发生调度而执行其它线程,当回到I2C的线程后,程序接着输出一个I2C时钟信号,当I2C从设备侦测到I2C时钟信号后,再采样I2C数据线上的数据仍然是高电平。整个过程虽然被其它线程打断,但仍是一次正确有效的数据传输。

  单帖管理 | 引用 | 回复 回到顶部
关山晓月
3楼


  发帖心情 Post By:2012-3-8 17:18:00   [只看该作者]

SMBus与I2C总线之间在时序特性上存在一些差别。首先,SMBus需要一定数据保持时间,而 I2C总线则是从内部延长数据保持时间。SMBus具有超时功能,因此当SCL太低而超过35 ms时,从器件将复位正在进行的通信。相反,I2C采用硬件复位。SMBus具有一种警报响应地址(ARA),因此当从器件产生一个中断时,它不会马上清除中断,而是一直保持到其收到一个由主器件发送的含有其地址的ARA为止。SMBus只工作在从10kHz到最高100KHZ。最低工作频率10kHz是由SMBus超时功能决定的。

现在用GPIO模拟SMBus总线通讯一直不能成功,是不是和超时复位有关呢?
应该怎么解决呢?

  单帖管理 | 引用 | 回复 回到顶部
x10
4楼


  发帖心情 Post By:2012-3-8 18:54:00   [只看该作者]

我认为用GPIO模拟是最简单的方法,这么慢的速度没有理由“一直不成功”。有没有单独的芯片,支持SMBus的?这样我们也可去买来做测试,谢谢。

  单帖管理 | 引用 | 回复 回到顶部
关山晓月
5楼


  发帖心情 Post By:2012-3-8 23:24:00   [只看该作者]

10-100K速度是比较慢,问题是时钟线有超时的限制
时钟信号高电平时间Min 4.0us  Max 50us
时序中断后恢复可能不能继续

http://wenku.baidu.com/view/752b363d5727a5e9856a616c.html
SMBus资料

芯片我查一下,看有没有相关的呵。
支持SMBus的接口的电池到是很多呵。

  单帖管理 | 引用 | 回复 回到顶部

返回首页

CE中用GPIO模拟总线问题

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: