OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9064|回复: 16

24c01的问题,小菜鸟

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2012-3-12
在线时间
0 小时
发表于 2012-3-12 14:07:13 | 显示全部楼层 |阅读模式


这个器件地址是怎么计算的,器件地址指的是24c02里面的具体要写入的地址还是某个24c02的地址,还有IIC_Send_Byte(0xA0 + ((ReadAddr/256) << 1))中的ReadAddr/256有什么用,加上0xA0又是什么意思呐,真的看不懂,谢谢原子哥
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-12 15:29:44 | 显示全部楼层
回复【楼主位】钻石手:
---------------------------------
看数据手册。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2012-3-12
在线时间
0 小时
 楼主| 发表于 2012-3-12 16:21:50 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
看了好几遍了 就是不懂为什么还要加上((ReadAddr/256) << 1),确定器件地址不是直接IIC_Send_Byte(0xA0)这样就行吗
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-14 10:23:06 | 显示全部楼层
一下图片来自24CXX中文资料.pdf的第



注意图片的第二点,a8,a9,a10对应的意义.
24c02容量是256字节,故只需要用8位地址即可表示.
24c04容量为512字节,需要9位地址.
24c08容量为1024字节,需要10位地址.
24c16容量为2048字节,需要11位地址.
而大于24c16的,无法用11位地址表示了,故需要2个字节的地址.
那么这里的a8,a9,a10,就是对应这几个的容量的最高位/数位.

再看代码:
 if(EE_TYPE>AT24C16)
 {
  IIC_Send_Byte(0XA0);    //发送写命令
  IIC_Wait_Ack();
  IIC_Send_Byte(ReadAddr>>8);//发送高地址    
 }else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));   //发送器件地址0XA0,写数据    
 IIC_Wait_Ack(); 
 IIC_Send_Byte(ReadAddr%256);   //发送低地址

现在你问(ReadAddr/256)<<1怎么来的,你说怎么来的?

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2012-3-12
在线时间
0 小时
 楼主| 发表于 2012-3-14 14:50:09 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥先别生气,我是菜鸟哈,我还是有疑问
不知道是不是我理解错了
我看电路图时候 A0 A1 A2都是接到地 
所以我觉得器件地址应该是 IIC_Send_Byte(0XA0);没有后面的“+((ReadAddr/256)<<1)”
如果A0 A1接到地 A2接到VCC,那我觉得应该是IIC_Send_Byte(0XA8);
我这样理解是不是错了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-14 15:06:48 | 显示全部楼层
这个代码都是考虑A0~A2接地的情况.
你看到上表,只有24C02/04/08有A0~A2,08以上就都没有了,如果你要接VCC,你就得按照你的设置来配置了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2012-3-12
在线时间
0 小时
 楼主| 发表于 2012-3-14 16:13:56 | 显示全部楼层
回复【6楼】正点原子:
这个代码都是考虑A0~A2接地的情况.
你看到上表,只有24C02/04/08有A0~A2,08以上就都没有了,如果你要接VCC,你就得按照你的设置来配置了.
---------------------------------
有点眉目了,如果程序单单只是设置24C02,没有04、08、16啥的,就直接IIC_Send_Byte(0XA0);不用再加上后面的“+((ReadAddr/256)<<1)” 了吧,如果是这样那我理解就没错了 谢谢原子哥
回复 支持 反对

使用道具 举报

42

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2014-6-12
在线时间
35 小时
发表于 2014-7-10 19:43:49 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,你的if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0);    //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8);//发送高地址
IIC_Wait_Ack();  
}else IIC_Send_Byte(0XA0);IIC_Wait_Ack();
IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));   //发送器件地址0XA0,写数据   
你的器件地址吗A0,A1,A2都接地了,也就是说你的ReadAddr/256横等于0,那你这个左移1位是干嘛用的
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-10 22:59:58 | 显示全部楼层
回复【8楼】郭刘阳:
---------------------------------
最低位是用来表示读写操作的。。。好好看看24CXX的数据手册。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2014-7-12 17:06:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

69

主题

173

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
469
金钱
469
注册时间
2014-6-21
在线时间
0 小时
发表于 2014-8-25 10:58:05 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
24c02与24wc02是有不同的啊?硬件是24C02啊。
回复 支持 反对

使用道具 举报

69

主题

173

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
469
金钱
469
注册时间
2014-6-21
在线时间
0 小时
发表于 2014-8-25 11:04:09 | 显示全部楼层
回复【7楼】钻石手:
---------------------------------
你明白“((ReadAddr/256)<<1)了?给讲一下呗?
回复 支持 反对

使用道具 举报

42

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2014-6-12
在线时间
35 小时
发表于 2014-10-12 17:28:12 | 显示全部楼层
回复【12楼】mengxiao1980:
---------------------------------
个人理解是这样的,ReadAddr/256是考虑到at24c04/08/16的a8,a9,a10位的,左移1位是弄成1010xxx0;
回复 支持 反对

使用道具 举报

42

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2014-6-12
在线时间
35 小时
发表于 2014-10-12 17:37:45 | 显示全部楼层
回复【3楼】钻石手:
---------------------------------
ReadAddr/256是考虑到at24c04/08/16的a8,a9,a10位的,假如是at24c04,从器件地址为1010A2A1a8R/W;我要往一个地址里面写/读数据ReadAddr/256就是a8的值,左移一位+0xa0就是1010A2A1a8R/W了
回复 支持 反对

使用道具 举报

42

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2014-6-12
在线时间
35 小时
发表于 2014-10-12 17:39:09 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
当然是at24c02/01的时候读数据ReadAddr/256=0
回复 支持 反对

使用道具 举报

12

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2014-10-23
在线时间
0 小时
发表于 2015-4-12 18:22:56 | 显示全部楼层
回复【15楼】郭刘阳:
---------------------------------
回复【12楼】mengxiao1980:
---------------------------------
回复【9楼】正点原子:
---------------------------------
The 8K EEPROM only uses the A2 device address bit with
 the next 2 bits being formemory page addressing.
 The A2 bit must compare to its corresponding hard-wiredinput pin. The A1 and A0 pins are no connect.
这是在英文手册上找到的,关于24C08的描述,翻译过来就是:"8kEEPROM(24C08)只使用A2器件地址位,另外两位(a9,a8)是页选择地址.........."我是这么理解的,在24C08里面存储区分页的,a9,a8,共有四种组合,也就是有四夜页,因此我们可以计算:8K/4=2K
也就是每一页有2K,也就是256个字节空间。下面我来解释原子哥的“(ReadAddr/256)<<1”是什么意思。还是以24C08为列,24C08四页一共有1024个字节空间,虽然分页管理,但是这些字节的地址是连续的,比如我们写入的地址是300,那么300/256=1,也就是说,地址为300的这个存储空间在第1页(页:0~3)。左移一位当然是基于R/W考虑的,因此IIC_Send_Byte(0xA0 + ((300/256) << 1))
就是IIC_Send_Byte(10100010)=IIC_Send_Byte(0xA2)。  

以上纯属个人理解,如有错误请指教
回复 支持 反对

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-7-7 23:40:44 | 显示全部楼层
回复【16楼】zhoupan:
---------------------------------
确实说的更易理解,但是能不能对04 08 16也直接先发A0   再发一个字节的页地址,再发一个字节的每页里面的具体地址,也就是>02的都按>16的那种处理方式,怎么样?这种处理方式对吗
合肥-文盲
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 12:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表