搜索
bottom↓
回复: 3

AVR单片机和MSP430单片机的I2C通讯一般存在哪些问题,都需要注意什么?

[复制链接]

出0入0汤圆

发表于 2011-9-22 19:18:30 | 显示全部楼层 |阅读模式
AVR单片机和MSP430单片机的I2C通讯一般存在哪些问题,都需要注意什么?我用的AVR的单片机输出电压是5V,做主机发送。用的430输出电压是3.3V,做从机用于接受。现在发现从机无法响应主机,芯片什么的都是好的,查了波形就是应应答为为高!求高手指教

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2011-9-22 19:19:23 | 显示全部楼层
回复【楼主位】tianyaxtujxlg
-----------------------------------------------------------------------

急啊   哪位帮帮忙啊?或者给我发一个MSP430的硬件I2C接受程序

出0入0汤圆

 楼主| 发表于 2011-9-28 10:07:13 | 显示全部楼层
回复【1楼】tianyaxtujxlg
-----------------------------------------------------------------------

我发现了一个特别奇怪的问题,就是MSP430F249的I2C的7位地址模式地址莫名其妙的往前移了一位,这样导致F249想跟AVR通讯,他们的地址模式无法匹配?弄的我现在只能用10位的地址模式,但是AVR那边又只有7位的地址模式,搞的两个通讯不了!!哪位大侠知道的帮忙解决一下!

出0入0汤圆

 楼主| 发表于 2011-9-29 11:24:53 | 显示全部楼层
回复【楼主位】tianyaxtujxlg
-----------------------------------------------------------------------

以下是本来在调试硬I2C过程的心得,现将他贴上来与大家交流分享。若有理解不到位,或者理解错误的地方望大家指正



MSP430F249的硬I2C的通讯部分调试成功,现将调试过程中遇到的问题和解决办法总结如下:

问题1:MSP430F249的硬I2C对AVR发过来的地址无法匹配
     通过示波器我们发现AVR的发出的波形正常,但是MSP430F249无法响应。该问题的主要出在MSP430F249的七位地址模式上。通过MSP430F249与MSP430F249进行硬I2C通讯发现MSP430F249七位地址模式时,所给出的地址与示波器上显示的地址并不一致。但是只要两个MSP430F249所定义的地址一样,就能完成通讯。经过查找多次观察,发现MSP430F249所设定的通讯地址和示波器上的地址发生了移位,也就是MSP430F249所设定的地址在原来的基础上左移了移位。比如是原本地址是48H,但是示波器上看到的地址确是90H。

解决办法:将MSP430F249的地址改为10位模式,再次观察波形发现地址匹配正常,并且示波器上观察到的地址与MSP430F249实际设定地址一致。


问题2:AVR并没有10位地址模式的I2C
AVR并没有10位地址模式的I2C,而由于MSP430F249的10位地址模式的读写位在高地址位的最后一位,所以虽然AVR能通过发生模式来模拟出10位地址,但是一旦AVR处于接收模式,发完第一个地址后,并处于接受状态,无法再发生低地址,所以无法模拟出10位地址。

解决办法:将AVR改为模拟I2C方式,则可以模拟出10位地址。并可以正常通讯。或者找出MSP430F249七位地址模式设定地址与实际地址发生左移的原因,并进行纠正。


问题3:SCL时钟线出现长时间被拉低状况,导致SDA上无法传输数据,或者传输数据延时
      通过MSP430F249与MSP430F249的通讯波形发现SCL时钟线出现长时间被拉低状况,导致SDA上无法传输数据,或者传输数据延时。考虑这种状况的出现问题肯定是在时钟上,于是对I2C模块的时钟选择再次核对,发现两个时钟频率并不一样。导致一个处理速度快,一个处理速度慢,从而使慢的那个MSP430F249会拉低SCL,等待自身处理完毕,再释放时钟,一般是出现在从机上。

解决办法:重新设定I2C模块的时钟,并保持主从机的时钟一致,即使不能完全一致也必须保证从机的速度要大于主机的速度。影响I2C时钟不只是I2C模块初始化的时钟选择,还有系统时钟,所以必须把系统时钟也配置成相同频率。

问题4:MSP430F249从机接收到的第一个数据是上一次传入的最后一个数据
       通过多次软件仿真,发现MSP430F249从机接收到的第一个数据是上一次传入的最后一个数据,比如本来应该接收到三个数据01H,02H,03H。但是如果重复接收这组数据,发现后来接收到的三个数据变成了03H,01H,02H。经过查询资料发现MSP430F249是有可能会出现这种情况,相当于上一次传输的最后一个数据放入到了UCB0RXBUF,等这一次需要传输数据时,UCB0RXBUF中的值仍然保留为上一次最后接收到的数据,故此出现了如上现象。

解决办法:这是由于MSP430F249本身带来的问题,所以不是很好解决,所以在每次需要通讯传输数据时,从新初始化MSP430F249。虽然这种办法可以暂时解决这个问题,可是这样做并不规范,也会加重程序的负担,所以正在找寻更好的办法。


总结:
I2C是个标准通讯协议,所以许多情况硬件都已经考虑完善,当出现问题时需要耐心查找,从I2C协议本身出发,结合IC的DATASHEET进行查找,首先看懂协议的具体内容,弄懂每个寄存器设置的意思和先后顺序,再通过跑程序,再示波器上观察波形,观察波形是否与正常I2C通讯波形一样,特别是开始信号,地址,停止信号是否正确,再观察所传出来的数据是否正确,由于示波器是实时捕捉波形,所以最后写一个不断发送和接受的程序,并将发送数据设为好辨认的数据,如01H,02H,30H,90H等。另外如果发现SDA和SCL上没有任何变化的话,那就要考虑是否接了上拉电阻,和配置I2C初始化部分是否有错。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-25 11:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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