主题:CE中用GPIO模拟总线问题 共有27170人关注过本帖 |
---|
关山晓月 |
1楼 |
![]() |
CE中用GPIO模拟总线问题 ![]()
CE中用GPIO模拟总线问题
CE是多任务系统,模拟总线时的时序应会因系统调度而造成时序错误 导致通讯数据,应该怎么解决呢? |
单帖管理 | 引用 | 回复 ![]() |
![]() lqk |
2楼 信息 | 搜索 | 邮箱 |
![]() ![]() ![]() ![]() |
![]()
我的理解是,系统调度只会造成总线当前状态的延时(或叫保持),而不会导致通讯错误。
比如通过GPIO模拟I2C总线,当数据线刚变高输出一个高电平,此时系统发生调度而执行其它线程,当回到I2C的线程后,程序接着输出一个I2C时钟信号,当I2C从设备侦测到I2C时钟信号后,再采样I2C数据线上的数据仍然是高电平。整个过程虽然被其它线程打断,但仍是一次正确有效的数据传输。 |
单帖管理 | 引用 | 回复 ![]() |
关山晓月 |
3楼 |
![]() |
![]()
SMBus与I2C总线之间在时序特性上存在一些差别。首先,SMBus需要一定数据保持时间,而 I2C总线则是从内部延长数据保持时间。SMBus具有超时功能,因此当SCL太低而超过35 ms时,从器件将复位正在进行的通信。相反,I2C采用硬件复位。SMBus具有一种警报响应地址(ARA),因此当从器件产生一个中断时,它不会马上清除中断,而是一直保持到其收到一个由主器件发送的含有其地址的ARA为止。SMBus只工作在从10kHz到最高100KHZ。最低工作频率10kHz是由SMBus超时功能决定的。
现在用GPIO模拟SMBus总线通讯一直不能成功,是不是和超时复位有关呢? 应该怎么解决呢? |
单帖管理 | 引用 | 回复 ![]() |
x10 |
4楼 |
![]() |
![]()
我认为用GPIO模拟是最简单的方法,这么慢的速度没有理由“一直不成功”。有没有单独的芯片,支持SMBus的?这样我们也可去买来做测试,谢谢。
|
单帖管理 | 引用 | 回复 ![]() |
关山晓月 |
5楼 |
![]() |
![]()
10-100K速度是比较慢,问题是时钟线有超时的限制
时钟信号高电平时间Min 4.0us  Max 50us 时序中断后恢复可能不能继续 http://wenku.baidu.com/view/752b363d5727a5e9856a616c.html SMBus资料 芯片我查一下,看有没有相关的呵。 支持SMBus的接口的电池到是很多呵。 |
单帖管理 | 引用 | 回复 ![]() |