- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IC琰写EEPROM问题
总结
文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]
2 0 17 年 6 月 30 日 星 期 五 目的:利用TMS320F2801芯片上外设I2C (2线串口)读写EEPR0M数据(24LC128) 关键点1: 24LC时钟频率400KHz,寄存器设置如下:
Presealer-need7-12MhzonmodulecIk
=10; //NOTE:mustbenonzero
=5; NOTE:mustbenonzero
时钟频率也可设为200KHz,三个参数分别为9、20、20 (CPU时钟频率为100MHz)
(未测试)
关键点2:波形分析
问题:I2C模块是不是只有I2CCNT减到0才会发出停止信号?
I2C模块是硬件的,当检测到发送完了就会发结束自动发信号,不需要人为干预
问题1:字节写操作正常,但是字节读函数出错
原因:写EEPROM是在七位器件地址后添加写标志,而读EEPROM需要在七位器件地 址后添加写标志。
关键点:读EEPROM数据需要发送两次命令。第一次为写地址(此地址会被賦值给
EEPROM内的地址指针),因此需要添加写标志:第二次为读数据,将写标志改为读
问题2:主机接收时,SDA数据线上有数据传输,且I2CDRR接收数据寄存器有数据 更新,但寄存器显示不可读,即CPU认为一直没接收到数据,一直停在下面语句 while!=1);
关键点:初始化设置时釆用的是FIFO接收方式,因此无效,应査询FIFO接收中断
R while !=1) ://FIFORX 方式查询位。
此位只有在非FIFO中断接收方式时才有效。
问题3:断续单字节读写正常,但是采用连续的单字节读写出错。
原因:EEPROM写过程的结束并不是I2C总线写结束就结束,实际上I2C总线的写入 数据先被保存到了 EEPROM内部的缓冲区,当遇到I2C结束条件后,EEPROM才启动 内部写过程,这个过程才是保存数据的过程。非常悲哀的是这个过程比较长,官方 文档标注为5ms如果在这5ms以内对EEPROM芯片访问将被忽略。
关键点:读写EEPROM应延时至少5ms,软件延时10ms
do{}while(EEPR0M_Timer=10); //10ms
4:査询EEPROM写过程是否结束造成死机,只能査询EEPROM读过程。
官方文档说EEPROM内部写周期最长为5ms,在很多情况下是远远低F 5ms的,为了 节约时间,官方给出一个解决办法。当写周期完毕后就开始进行应答査询,来确定
EEPROM写周期何时结束。所谓应答査询官方解释为:就是向EEPROM发送一个I2C 起始条件后发送器件地址和一个读写标志位,当EEPROM完成内部写周期会回应一 个ACK,这时MCU就可以进行正常的其他读写过程了。官方原文如下:
杯具就是始于我画红线的那句话,它说可以在器件地址后任意填写读写标志。我就 填了读标志,事实证明在EEPROM写入过程采用读查询将导致系统死机,I2C总线不 能被正常拉高,可能是EEPROM内部己经把总线拉到了地!不管怎样,反正就是死机 r 0经过多次尝试最终发现应答査询只能釆用写应答査询可以正常确定EEPROM内 部写周期的结束。
by
数据传输过程:
从机发送数据SDA总线I2CRSR缓冲寄存器I2CDRR接收数据寄存器中间变量内存。
问题5: CPU以字(双字节)为单位读写EEPROM数据有误; 原因:CPU中的内存单元以字(word-16bit)为单位,而EEPROM中的内存单元是字 节(byte-Sbit)为单位,因此将CPU内存地址转化为EEPROM指针地址时,因乘以 2 (左移一位)
问题6:使用读数据函数式,收到的数据都是1。
原因:EEPROM初次读取未写过的内存单元时,默认为高电平,即收到的字节为
OxFFo
如果己经写过内存单元,则代表数据未成功写入: 写入与读数据的内存地址不一样。
7:写入EEPROM的数据与随后读出来的数据不一致,但读出来的数据又没有规 律性。
可能原因:数据未成功写入;数据读写字节数超过EEPROM的页内字节数(跨页); 读写地址不一致;读写EEPROM之间应有一定的延时时间。
解决办法:若连续读多字节数据,则读取数据之间应加延时,因为数据从12CRSR数
据接收缓冲寄存器(多字节)复制到I2CCDRR数据接收寄存器(一字节)需要时 间。
单字节延时25us,双字节(字)延时50us——测试通过 问题8:使用示波器观测SDA数据线上的波形时,发现每次应答信号之前都有一个 毛刺(尖峰),是什么原因导致的?(不影响数据的正常读写)
类似问题:使用F28335模拟I2C时序读取惯导器件的数据时,发现在更改SDA的传 输方向时,Gpi。中数据寄存器会发
原创力文档


文档评论(0)