14153|23

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

同学们,ST关于i2c-e2prom的例子,修改以下几点就可以了 [复制链接]

1.之前有同学说发现I2C_EE_BufferWrite执行后,总线就被拉低了,使得后来的start位发不出去

这是因为每个I2C_EE_BufferWrite都是以I2C_EE_WaitEepromStandbyState结尾的,而这个函数里并未发送stop位来释放总线

所以第一个需要修改的地方就是在I2C_EE_WaitEepromStandbyState结尾加上I2C_GenerateSTOP(I2C1, ENABLE);

2.很多同学还发现在I2C_EE_BufferWrite接下来的I2C_EE_BufferRead中,死在了check EV6。

正因为第一点,有了stop位后,马上来start位,肯定不行;因为从e2prom的datasheet中有专门一个参数限制了Time between Stop condition and next Start condition。这个值typically 1.3us minimum。

所以代码中需要保证这个延迟。

3.附件中提供了修改后的代码,在各个I2C-speed(100K/200K/300K/400K)和各种MCU频率(PLL *6/*7/*8/*9),各种组合都可以运行正确了。
代码是跑在万利的EK-STM32F103板子上的。
相关链接:https://bbs.eeworld.com.cn/upfiles/img/200710/2007101316746703.zip
此帖出自stm32/stm8论坛

最新回复

                                 参考  详情 回复 发表于 2011-3-15 11:14
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

bucuo

顶!

谢谢lut1lut老师!

收藏了



此帖出自stm32/stm8论坛
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

谢谢

                                   马上试一下 
此帖出自stm32/stm8论坛
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 

谢谢了

                                 谢谢lut1lut,已经能用了
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 

我试了一下

我在万利的EK-STM32F板上,I2C_PageSize = 8时速度400 300 100 都可以;
I2C_PageSize = 16 ,上面3个速率都不行数据错误,但是在我的板子上24C04上可以.
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

6
 

请6楼注意看看I2C的上拉电阻

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 

上拉电阻怎么了?

                                 我的EEPROM接法和万利的完全相同.
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 

pagesize取决于你的用的e2prom的size啊

比如atmel的
24C01/02都是8 byte per page
24C04/08/16就是16 byte per page。

6楼的所谓数据错误肯定是说写进和读出相比较不一致,不是通信失败。

为什么page size不同会造成比较不一致,请看buffer write这个函数的实现,就知道了~~~
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

9
 

我是说:请注意上拉电阻的阻值

                                 如果上拉电阻的阻值太大,I2C的高速度会受影响。
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 

可是资料上写着只有24C01的页是8个字节啊

概述
CAT24WC01/02/04/08/16 是一个1K/2K/4K/8K/16K 位串行CMOS E2PROM 内部含有
128/256/512/1024/2048 个8 位字节CATALYST 公司的先进CMOS 技术实质上减少了器件的功耗
CAT24WC01 有一个8 字节页写缓冲器CAT24WC02/04/08/16 有一个16 字节页写缓冲器该器件通过
I2C 总线接口进行操作有一个专门的写保护功能
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

11
 

data sheet错了,还是你看错了?


万利板子上放的是Atmel的24C02,它的page size=8,你用16当然不行;
你的板子是24c04,它的page size=16,用16当然可以。

以下摘自atmel的data sheet
------------------------------------------------------------------
Memory Organization AT24C01A, 1K SERIAL EEPROM: Internally organized with 16 pages of 8 bytes each,
the 1K requires a 7-bit data word address for random word addressing.
AT24C02, 2K SERIAL EEPROM: Internally organized with 32 pages of 8 bytes each,
the 2K requires an 8-bit data word address for random word addressing.
AT24C04, 4K SERIAL EEPROM: Internally organized with 32 pages of 16 bytes each,
the 4K requires a 9-bit data word address for random word addressing.
AT24C08A, 8K SERIAL EEPROM: Internally organized with 64 pages of 16 bytes each,
the 8K requires a 10-bit data word address for random word addressing.
AT24C16A, 16K SERIAL EEPROM: Internally organized with 128 pages of 16 bytes
each, the 16K requires an 11-bit data word address for random word addressing.
--------------------------------------------------------------------
此帖出自stm32/stm8论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

12
 

我的测试结果

 to lut1lut 我将万利板子上的改为了AT24C1024
 -------------------------------------------------------------------
 AT24C1024, 1024K SERIAL EEPROM: The 1024K is internally organized as 512 pages of 256 bytes each. Random word addressing requires a 17-bit data word address.
 I2C_PageSize = 16 测试通过,应该改为I2C_PageSize =256。

---------------------------------------------------------------------
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

13
 

如果是data sheet错了,就对了

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

14
 

To lixun00 测试通过 谢谢

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

15
 

To lixun00 测试通过 谢谢


  lixun00老师的方法对原例程修改不大,本人较为支持
  单步运行的时候 I2C_EE_BufferRead() 中发送完读地址之后的/* Test on EV7 and clear it */
  if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))  老是过不去,#define  I2C_EVENT_MASTER_BYTE_RECEIVED    ((u32)0x00030040)  /* BUSY, MSL and RXNE flags */
  实际读出的值 SR1=0x44 与预期的SR1=0x40 相差BTF这一位,相关描述:如果RxNE 位被置位,并且在上一次数据接收之后DR 寄存器中的数据没有被读走,硬件将置起BTF 位,接口等待读DR 寄存器。 
 分析在发送读地址之后确实没有进行读操作,所以增加
 #define  I2C_EVENT_MASTER_BYTE_RECEIVED1     ((u32)0x00030044)  /* BUSY, MSL and RXNE BTF flags */
 并替换if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED1))
 单步测试运行通过,请lixun00老师斟酌一下。

  
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

16
 

RE hanker510:

                                 老师不敢当,共同探讨
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

17
 

嘿嘿,貌似很多网上收来的IIC代码都有这个问题。

                                 估计ST当初也是直接用来那么改写的。这个代码没有考虑到连续读写。
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

18
 

数据好像只在一页上读写

to lixun00 :
     程序用到板子上调试连续读时 不管输入地址都是从00开始。
     写时只在第一页上。
#define I2C_OwnAddr  0xA0
#define I2C_PageSize   16 //at24c08

 //u8 s[]=0 ....99; 

 I2C_EE_BufferWrite(I2C_OwnAddr,0,s,30);// 从00地址开始写入0~90  
 I2C_EE_BufferRead(I2C_OwnAddr,0,s,30);//s=16,..25,10..14,ff..ff(第一页写反转)

 s[0]=0x55;
 I2C_EE_BufferWrite(I2C_OwnAddr,5,s,1);//05地址写入0x55
 I2C_EE_BufferRead(I2C_OwnAddr,0,s,30);//s=0x55,17..25,10..14,ff..ff(本应该写入05地址的 写到了00上)
不知道是什么原因?
  

 


                     
         
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

19
 

这个问题,万利竟然还没改。

我前几天下了最新的程序跑了半天不行,想起了就到这里看看。
终于就解决了。万利的板子上焊了个2402,程序确是2408的,地址还给设置成了0XA2.那就只有2408,2416就才能用呢。
唉,这个也是正经销售的板子啊,怎么也更新下驱动啊?
此帖出自stm32/stm8论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

20
 

haodongxi

                                 下来看下
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表