找回密码
 注册
搜索
查看: 2066|回复: 19

[讨论] GPIO模拟I2C

[复制链接]
发表于 2006-1-17 13:29:00 | 显示全部楼层 |阅读模式
如果在某个task中,用IO模拟I2C与slave通信,假如这个task的priority不是最高的话,由于os的管理会被更高priority的task抢占执行,timing岂不是无法保证。
请发表见解。
发表于 2006-1-17 16:07:00 | 显示全部楼层
为什么不用CPLD来做I2C和GPIO的接口?
点评回复

使用道具 举报

发表于 2006-1-17 16:15:00 | 显示全部楼层
<P>MTK里就是用GPIO模拟I2C的,但是被抢占的情况我还没有碰到过,况且即使被抢占,slave也未必不能正确读写,抢占至少低于ms级别吧</P>[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2006-1-17 22:10:00 | 显示全部楼层
<P>软模拟I2C以前做过,不是很可靠</P><P>除非ARM在与从设备通信的时候其他的任务都挂起</P>[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2006-1-17 22:18:00 | 显示全部楼层
我们也用GPIO做过I2C的模拟,没出现过这个问题,楼主你们遇到了么?
点评回复

使用道具 举报

发表于 2006-1-17 22:42:00 | 显示全部楼层
<P>我用GPIO模拟I2C调试一款FM芯片的时候,在和上层应用联调时,有时候发现程序是不能正常运行。单步调试没有问题,和上层一联调,有时候,就出现这个问题。要么不能正常搜台,要么不能设置电台。加我延迟,好像作用不大。上层在于我通讯是,所有任务是挂起的(呵呵,这样做是有问题的)。</P>[br]<p align=right><font color=red>+5 RD币</font></p>
点评回复

使用道具 举报

发表于 2006-1-18 09:28:00 | 显示全部楼层
<P>我有试过,我在通讯时特意调用NU_Sleep(1),让task挂起,能正常读写,楼主是什么平台,什么芯片?</P>
点评回复

使用道具 举报

发表于 2006-1-18 10:55:00 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>talcon</I>在2006-1-17 16:15:01的发言:</B>

<P>MTK里就是用GPIO模拟I2C的,但是被抢占的情况我还没有碰到过,况且即使被抢占,slave也未必不能正确读写,抢占至少低于ms级别吧</P>

<P align=right><FONT color=red>+3 RD币</FONT></P></DIV>


TI calypso的I2C也是半吊子的.datasheet 里说是兼容PHILIPS的规范.但实际上只支持单字节的读写.所以,也要用GPIO来模拟.
点评回复

使用道具 举报

 楼主| 发表于 2006-1-18 11:28:00 | 显示全部楼层
<P>TI calypsod的平台,FM是si4700。</P><P>从逻辑分析仪来看,timing不是很好,每次操作都不一样,估计是os的task管理问题,因为我是在mmi task中读写的,priority不是最高。</P><P>现在想在一个HISR中去与slave通信,还没有调通。</P><P>请大家继续指点。</P>
点评回复

使用道具 举报

发表于 2006-1-18 11:39:00 | 显示全部楼层
如果用CPLD做GPIO到I2C的转换,这是硬件结构的,应该可以避免上面说到的问题!
点评回复

使用道具 举报

 楼主| 发表于 2006-1-18 11:48:00 | 显示全部楼层
<P>请问CPLD是什么东东啊?怎么去做啊?</P>
点评回复

使用道具 举报

发表于 2006-1-18 11:57:00 | 显示全部楼层
CPLD是可编程逻辑器件,可以保证把GPIO送来的信号在芯片内部调整成标准I2C格式送出。因为是纯逻辑器件,做这些事情很容易!
点评回复

使用道具 举报

发表于 2006-1-18 13:03:00 | 显示全部楼层
<P>看来都是TI平台若的货。</P><P>估计国内手机FM功能很少见,和TI早期平台I2C这个BUG有很大关系</P>[em02]
点评回复

使用道具 举报

 楼主| 发表于 2006-1-18 13:25:00 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>ylboat</I>在2006-1-18 11:57:09的发言:</B>
CPLD是可编程逻辑器件,可以保证把GPIO送来的信号在芯片内部调整成标准I2C格式送出。因为是纯逻辑器件,做这些事情很容易!</DIV>


有这方面的应用实例或文档什么的吗?参考一下
点评回复

使用道具 举报

发表于 2006-1-18 16:15:00 | 显示全部楼层
TI的mmi task的优先级是挺低的,楼主可以自己开一个task,ti里开task还是挺容易的[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2006-1-18 16:25:00 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>jsyccxj</I>在2006-1-18 13:25:23的发言:</B>



有这方面的应用实例或文档什么的吗?参考一下</DIV>


附上一个CPLD做I2C的application note,你可以参考一下,如果有需要的话,可以联系我!
【文件名】:06118@52RD_xapp385.pdf
【格 式】:pdf
【大 小】:151K
【简 介】:CoolRunner-II CPLD I2C Bus Controller Implementation
【目 录】:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
点评回复

使用道具 举报

发表于 2006-1-18 16:28:00 | 显示全部楼层
<P>其实如果是task切换的问题的话,楼主最好的办法就是每次在I2C读写之前提高mmi tsak的优先级,完后再恢复,如果还没有作用说明不是task切换的问题。</P><P>好久没有作ti了</P>[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2006-1-18 17:07:00 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>ylboat</I>在2006-1-18 16:25:08的发言:</B>



附上一个CPLD做I2C的application note,你可以参考一下,如果有需要的话,可以联系我!
【文件名】:06118@52RD_xapp385.pdf
【格 式】:pdf
【大 小】:151K
【简 介】:CoolRunner-II CPLD I2C Bus Controller Implementation
【目 录】:
</DIV>


另外如果只是做简单的GPIO到I2C的转换,用最小的CPLD就可以做了,性价比好,而且灵活方便
点评回复

使用道具 举报

发表于 2006-1-19 22:09:00 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>jsyccxj</I>在2006-1-18 11:28:13的发言:</B>

<P>TI calypsod的平台,FM是si4700。</P>
<P>从逻辑分析仪来看,timing不是很好,每次操作都不一样,估计是os的task管理问题,因为我是在mmi task中读写的,priority不是最高。</P>
<P>现在想在一个HISR中去与slave通信,还没有调通。</P>
<P>请大家继续指点。</P></DIV>


Si4700和TI calypso平台匹配时要注意,晶振的振幅要达到好像是2.0V以上吧(记不太清了),但是TI分频出来的只有1.几V,所以两者间要电平转换过.[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2010-1-22 13:11:00 | 显示全部楼层
大大啊啊大
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-24 23:50 , Processed in 0.049766 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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