[ZLG-MCU] I2C EEPROM读/写数据的问题

[复制链接]
 楼主| xiaoxin1986 发表于 2009-3-15 13:10 | 显示全部楼层 |阅读模式
最近看LPC2200向CAT24WC02读/写数据的程序一直没看懂,为什么程序里都没提到将这些数据从I2C&nbsp;EEPROM的什么地址读/写出。难道直接从0x00开始读/写吗?如果是写入一半的数据再向I2C&nbsp;EEPROM里写数据呢,怎么办?<br /><br />&nbsp;<br /><br /><br />/*&nbsp;以下为I2C操作时所需要的变量&nbsp;*/<br />volatile&nbsp;&nbsp;uint8&nbsp;&nbsp;I2C_sla;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;从机地址(即器件地址)<br />volatile&nbsp;&nbsp;uint8&nbsp;&nbsp;I2C_suba;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;子地址<br />volatile&nbsp;&nbsp;uint8&nbsp;&nbsp;*I2C_buf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;数据缓冲区指针&nbsp;(读操作时会被更改)<br />volatile&nbsp;&nbsp;uint8&nbsp;&nbsp;I2C_num;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;操作数据个数&nbsp;(会被更改)<br />volatile&nbsp;&nbsp;uint8&nbsp;&nbsp;I2C_end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;操作结束标志,为1时表示操作结束,为0xFF时表示操作失败&nbsp;(会被设置)<br />volatile&nbsp;&nbsp;uint8&nbsp;&nbsp;I2C_suba_en;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;子地址使能控制,读操作时请设置为1,写操作时请设置为2&nbsp;(会被更改)<br /><br />&nbsp;<br /><br />/****************************************************************************<br />*&nbsp;名称:ISendByte()<br />*&nbsp;功能:向无子地址器件发送一字节数据。<br />*&nbsp;入口参数:sla&nbsp;&nbsp;器件地址<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dat&nbsp;&nbsp;要发送的数据<br />*&nbsp;出口参数:返回值为0时表示出错,为1时表示操作正确。<br />*&nbsp;说明:使用前要初始化好I2C引脚功能和I2C中断,并已使能I2C主模式<br />****************************************************************************/<br />uint8&nbsp;&nbsp;ISendByte(uint8&nbsp;sla,&nbsp;uint8&nbsp;dat)<br />{&nbsp;&nbsp;/*&nbsp;参数设置&nbsp;*/<br />&nbsp;&nbsp;&nbsp;I2C_sla&nbsp;=&nbsp;sla;&nbsp;&nbsp;//&nbsp;写操作的器件地址<br />&nbsp;&nbsp;&nbsp;I2C_buf&nbsp;=&nbsp;&dat;&nbsp;&nbsp;//&nbsp;待发送的数据<br />&nbsp;&nbsp;&nbsp;I2C_num&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;//&nbsp;发送1字节数据<br />&nbsp;&nbsp;&nbsp;I2C_suba_en&nbsp;=&nbsp;0;&nbsp;&nbsp;//&nbsp;无子地址<br />&nbsp;&nbsp;&nbsp;I2C_end&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;I2CONCLR&nbsp;=&nbsp;0x2C;<br />&nbsp;&nbsp;&nbsp;I2CONSET&nbsp;=&nbsp;0x60;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置为主机,并启动总线<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;while(0==I2C_end);<br />&nbsp;&nbsp;&nbsp;if(1==I2C_end)&nbsp;return(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;return(0);<br />}<br />
 楼主| xiaoxin1986 发表于 2009-3-15 19:15 | 显示全部楼层

召唤达人

  
linhai1986 发表于 2009-3-16 23:06 | 显示全部楼层

这两天比较冷清

  
linhai1986 发表于 2009-3-16 23:08 | 显示全部楼层

还是我来回答吧

  
linhai1986 发表于 2009-3-16 23:08 | 显示全部楼层

RE:

因为是硬件的I2c,很多过程都是在中断里面实现的,比如说I2CONSET&nbsp;=&nbsp;0x60指令会发送I2c的Start信号,当信号发出后会进入中断,然后在中断中处理发送地址,读还是写等等,挺多,你看一下就明白了。<br /><br />
 楼主| xiaoxin1986 发表于 2009-3-16 23:34 | 显示全部楼层

谢谢LS,不过我是说写入的地址不需要指定从什么开始的吗?

  
linhai1986 发表于 2009-3-16 23:54 | 显示全部楼层

IIC相关资料链接

IIC相关资料链接<br />HTTP://WWW.ZLGMCU.COM/PHILIPS/PHILIPS-YINGRONG-IIC.ASP<br />自己去看一下吧<br /><br />
kenand 发表于 2009-3-17 09:17 | 显示全部楼层

I2C的一种模式。

以读数据为例,I2C具有多种模式,<br />连续读<br />指定地址读。<br />随机读。<br /><br />等等。<br /><br />如果你不指定地址,那么你读的地址将在上次读的地址上自动加1.<br />推荐去zlg网站上找资料看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

1487

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部