由于工程需要,必须使用一个大容量的EEPROM才能够用,所以使用了16K的EEPROM,我使用的是FMD(辉芒微)公司的FT24C16A-ELR-T芯片,使用方式与AT24C16是一样的。
首先我在网上搜索到的现成的代码,有一些地址码直接就是U8的,8位地址最多只能支持到256字节,16K的有2048个字节,所以地位需要用U16的才够用,后来找到地址是U16的示范代码,去测试开始是没有问题的,但是当容量超过256个字节后会出错了。
废话不多说,直接贴上我修改后的读写函数和初始化三大主要部分。大家如果和我一样,使用STM8S003F3F6的芯片读写16KEEPROM时按下面的使用,应该就没有问题了。下面的代码中部分是从其它作者的代码中复制过来的,由于太懒没有标明出处,望见谅。
#define I2C_SPEED 400000
#define I2C_SLAVE_ADDRESS7 0xA0
void IIC_Read(uint16_t Addr , unsigned char *buffer , unsigned short num)
{
uint8_t Did;//设备ID
uint8_t Tmp;//方便计算中间量
Tmp=(Addr>>8);
if (Addr>255) Did=0xA0+(Tmp*2); //这里的计算目的就是把超过256字节部分需要做页偏移的数值计算到后四位中的p0 p1 p2的前三个位置
else Did=0xA0;
while (I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));
/