你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 12038|回复: 68

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

[复制链接]

13

主题

23

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-3-7 20:18:08 | 显示全部楼层 |阅读模式
EEPROM又称为电可擦可编程只读存储器,掉电后数据不丢失。广泛用于少量数据的保存,一些增强型51单片机和AVR都有芯片内部集成EEPROM。开发板使用的是I2C接口ATMEL24C02芯片,芯片容量是2Kbit,也就是256字节。硬件连接如图所示,与STM32芯片上的I2C1硬件接口相连。
图1电路连接.jpg
I2C的时序我这里就不介绍了,大家可以上网查查。I2C最大的优点就是有硬件地址,可以通过不同的硬件地址,挂载不同功能的I2C芯片。缺点就是速度慢,我们常使用到400kbps
一硬件实现      
STM32官方给的范例中给出了两个封装好的文件:I2C_EE.CI2C_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内部也有编程时间,使用要等到内部完成才能进行下一个步骤。
  测试结果.jpg
需要注意的是:官方这两个文件有点BUG,有时候会卡在读文件的时候,需要做些修改。二是24C02总共有256页,也就是0X000XFF
       二软件实现
       最后说明下,我在使用STM32103VCT6的时候发现,硬件I2C有点问题。所以这里还用软件模拟I2C的功能实现同样的功能。我提供两个文件IIC_SOFT.CIIC_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);
测试结果2.jpg

I2C接口EEPROM-软硬件实现.zip

下载

297.96 KB, 下载次数: 130, 下载积分: ST金币 -1

回复

使用道具 举报

0

主题

29

回帖

0

蝴蝶豆

初级会员

最后登录
2020-5-12
发表于 2011-3-8 15:26:56 | 显示全部楼层

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

XIELIAO
回复 支持 反对

使用道具 举报

0

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-4-2 15:43:53 | 显示全部楼层

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

看看,谢谢,最近正在解决这个问题
回复 支持 反对

使用道具 举报

0

主题

8

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-4-9 11:26:53 | 显示全部楼层

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

顶起来。谢谢。
回复 支持 反对

使用道具 举报

0

主题

6

回帖

0

蝴蝶豆

新手上路

最后登录
2020-9-3
发表于 2011-5-6 10:49:41 | 显示全部楼层

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

谢谢!!!!!!
回复 支持 反对

使用道具 举报

0

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-5-13 17:32:45 | 显示全部楼层

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

look look
回复 支持 反对

使用道具 举报

0

主题

38

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-5-13 19:11:10 | 显示全部楼层

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

学习!!
回复 支持 反对

使用道具 举报

0

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-6-15 12:08:56 | 显示全部楼层

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

,学习
回复 支持 反对

使用道具 举报

1

主题

12

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-6-15 22:42:43 | 显示全部楼层

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

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

I2C的时序我这里就不介绍了,大家可以上网查查。I2C最大的优点就是有硬件地址,可以通过不同的硬件地址,挂载不同功能的I2C芯片。缺点就是速度慢,我们常使用到400kbps
一硬件实现      
STM32官方给的范例中给出了两个封装好的文件:I2C_EE.CI2C_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页,也就是0X000XFF
       二软件实现
       最后说明下,我在使用STM32103VCT6的时候发现,硬件I2C有点问题。所以这里还用软件模拟I2C的功能实现同样的功能。我提供两个文件IIC_SOFT.CIIC_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);

 
回复 支持 反对

使用道具 举报

0

主题

13

回帖

0

蝴蝶豆

新手上路

最后登录
2020-8-6
发表于 2011-6-20 21:01:52 | 显示全部楼层

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

I can't see attached file
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版