月之骑士-194136 发表于 2011-3-7 20:18:08

【ST公益分享】神舟IV学习笔记(六)I2C接口EEPROM-软硬件实现

EEPROM又称为电可擦可编程只读存储器,掉电后数据不丢失。广泛用于少量数据的保存,一些增强型51单片机和AVR都有芯片内部集成EEPROM。开发板使用的是I2C接口ATMEL的24C02芯片,芯片容量是2Kbit,也就是256字节。硬件连接如图所示,与STM32芯片上的I2C1硬件接口相连。

I2C的时序我这里就不介绍了,大家可以上网查查。I2C最大的优点就是有硬件地址,可以通过不同的硬件地址,挂载不同功能的I2C芯片。缺点就是速度慢,我们常使用到400kbps。
一硬件实现      
STM32官方给的范例中给出了两个封装好的文件:I2C_EE.C和I2C_EE.H
给了这样几个函数
void I2C_EE_Init(void);
//I2C端口和I2C模块初始化
void I2C_EE_ByteWrite(uint8_t* pBuffer, uint8_t WriteAddr);
//单个字节写入
void I2C_EE_PageWrite(uint8_t* pBuffer, uint8_t WriteAddr, uint8_t NumByteToWrite);
//页写,这款24C02能够支持8个字节同时写,能够提高写入时间。其他的EEPROM比如24C04/08/16支持16字节每页,24C32/64支持32字节每页
void I2C_EE_BufferWrite(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite);
//缓存写入,会调用上面两个子函数,根据当前的位置和写入的大小,调用是字节写还是页写
void I2C_EE_BufferRead(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead);
//缓存读,和上面类似
void I2C_EE_WaitEepromStandbyState(void);
       //EEPROM内部也有编程时间,使用要等到内部完成才能进行下一个步骤。
 
需要注意的是:官方这两个文件有点BUG,有时候会卡在读文件的时候,需要做些修改。二是24C02总共有256页,也就是0X00到0XFF。
       二软件实现
       最后说明下,我在使用STM32103VCT6的时候发现,硬件I2C有点问题。所以这里还用软件模拟I2C的功能实现同样的功能。我提供两个文件IIC_SOFT.C和IIC_SOFT.H文件。里面的函数为
void I2C_Configuration(void);
bool I2C_Write(u8 address,u8 data);
bool I2C_Writes(u8 *buff,u8 address,u8 length);
//bool I2C_Writes(u8 address,u8 *buff,u8 length);//只能写一页的内容
void I2C_BufferWrite(u8* pBuffer, u8 WriteAddr, u16 NumByteToWrite);
//仿照I2C_EE写的,数据不受限制
u8 I2C_Read(u8 address);
bool I2C_Reads(u8 address,u8 *buff,u8 length);

ml8866 发表于 2011-3-8 15:26:56

RE:【ST公益分享】神舟IV学习笔记(六)I2C接口EEPROM-软硬件实现

XIELIAO:D

megaf 发表于 2011-4-2 15:43:53

RE:【ST公益分享】神舟IV学习笔记(六)I2C接口EEPROM-软硬件实现

看看,谢谢,最近正在解决这个问题

denganhao-33176 发表于 2011-4-9 11:26:53

RE:【ST公益分享】神舟IV学习笔记(六)I2C接口EEPROM-软硬件实现

顶起来。谢谢。:D:D

flyme511 发表于 2011-5-6 10:49:41

回复:【ST公益分享】神舟IV学习笔记(六)I2C接口EEPROM-软硬件实现

谢谢!!!!!!

xialibaren0008 发表于 2011-5-13 17:32:45

回复:【ST公益分享】神舟IV学习笔记(六)I2C接口EEPROM-软硬件实现

look look

lixupeng-286501 发表于 2011-5-13 19:11:10

RE:【ST公益分享】神舟IV学习笔记(六)I2C接口EEPROM-软硬件实现

学习!!:lol

z120461454-1409 发表于 2011-6-15 12:08:56

RE:【ST公益分享】神舟IV学习笔记(六)I2C接口EEPROM-软硬件实现

:),学习

wwskyfhj 发表于 2011-6-15 22:42:43

回复:【ST公益分享】神舟IV学习笔记(六)I2C接口EEPROM-软硬件实现

学习,嘿嘿
回复第 1 楼 月之骑士于2011-03-07 12:18:08发表:
 
EEPROM又称为电可擦可编程只读存储器,掉电后数据不丢失。广泛用于少量数据的保存,一些增强型51单片机和AVR都有芯片内部集成EEPROM。开发板使用的是I2C接口ATMEL的24C02芯片,芯片容量是2Kbit,也就是256字节。硬件连接如图所示,与STM32芯片上的I2C1硬件接口相连。

I2C的时序我这里就不介绍了,大家可以上网查查。I2C最大的优点就是有硬件地址,可以通过不同的硬件地址,挂载不同功能的I2C芯片。缺点就是速度慢,我们常使用到400kbps。
一硬件实现      
STM32官方给的范例中给出了两个封装好的文件:I2C_EE.C和I2C_EE.H
给了这样几个函数
void I2C_EE_Init(void);
//I2C端口和I2C模块初始化
void I2C_EE_ByteWrite(uint8_t* pBuffer, uint8_t WriteAddr);
//单个字节写入
void I2C_EE_PageWrite(uint8_t* pBuffer, uint8_t WriteAddr, uint8_t NumByteToWrite);
//页写,这款24C02能够支持8个字节同时写,能够提高写入时间。其他的EEPROM比如24C04/08/16支持16字节每页,24C32/64支持32字节每页
void I2C_EE_BufferWrite(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite);
//缓存写入,会调用上面两个子函数,根据当前的位置和写入的大小,调用是字节写还是页写
void I2C_EE_BufferRead(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead);
//缓存读,和上面类似
void I2C_EE_WaitEepromStandbyState(void);
       //EEPROM内部也有编程时间,使用要等到内部完成才能进行下一个步骤。
 
需要注意的是:官方这两个文件有点BUG,有时候会卡在读文件的时候,需要做些修改。二是24C02总共有256页,也就是0X00到0XFF。
       二软件实现
       最后说明下,我在使用STM32103VCT6的时候发现,硬件I2C有点问题。所以这里还用软件模拟I2C的功能实现同样的功能。我提供两个文件IIC_SOFT.C和IIC_SOFT.H文件。里面的函数为
void I2C_Configuration(void);
bool I2C_Write(u8 address,u8 data);
bool I2C_Writes(u8 *buff,u8 address,u8 length);
//bool I2C_Writes(u8 address,u8 *buff,u8 length);//只能写一页的内容
void I2C_BufferWrite(u8* pBuffer, u8 WriteAddr, u16 NumByteToWrite);
//仿照I2C_EE写的,数据不受限制
u8 I2C_Read(u8 address);
bool I2C_Reads(u8 address,u8 *buff,u8 length);

 

laigs218 发表于 2011-6-20 21:01:52

RE:【ST公益分享】神舟IV学习笔记(六)I2C接口EEPROM-软硬件实现

I can't see attached file:)
页: [1] 2 3 4 5 6 7
查看完整版本: 【ST公益分享】神舟IV学习笔记(六)I2C接口EEPROM-软硬件实现