OpenEdv-开源电子网

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

请问这句话什么意思?}else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); 不是器件地址固定为 0xa0或0xa1一旦我的硬件电路确定好后。假如3根地址线都接地。

[复制链接]

104

主题

313

帖子

0

精华

高级会员

Rank: 4

积分
893
金钱
893
注册时间
2014-11-13
在线时间
53 小时
发表于 2014-12-3 15:09:55 | 显示全部楼层 |阅读模式
5金钱
 if(EE_TYPE>AT24C16)
 {
  IIC_Send_Byte(0XA0);    //发送写命令
  IIC_Wait_Ack();
  IIC_Send_Byte(ReadAddr>>8);//发送高地址
//多余  IIC_Wait_Ack();          
 }else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));   //发送器件地址0XA0,写数据  


请问这句话什么意思?不是器件地址固定为 0xa0或0xa1一旦我的硬件电路确定好后。假如3根地址线都接地。

最佳答案

查看完整内容[请看2#楼]

24C04,24C08,24C16就会用到 04有512地址,需要9位表示 08有1024地址,需要10位表示 16有2048地址,需要11位表示。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-12-3 15:09:56 | 显示全部楼层
24C04,24C08,24C16就会用到
04有512地址,需要9位表示
08有1024地址,需要10位表示
16有2048地址,需要11位表示。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-4-6
在线时间
46 小时
发表于 2014-12-3 16:11:52 | 显示全部楼层
我也有疑惑,EE_TYPE(255)一定比AT24C16(2047)小,那为什么还用if,求路过的大神解释
回复

使用道具 举报

104

主题

313

帖子

0

精华

高级会员

Rank: 4

积分
893
金钱
893
注册时间
2014-11-13
在线时间
53 小时
 楼主| 发表于 2014-12-3 19:40:34 | 显示全部楼层
回复【2楼】Electfans:
---------------------------------
不一定比他小如果是24c17
回复

使用道具 举报

12

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-4-6
在线时间
46 小时
发表于 2014-12-3 22:35:23 | 显示全部楼层
回复【3楼】long7qazzaq:
---------------------------------
24c17的大小是?
回复

使用道具 举报

23

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2014-10-18
在线时间
1 小时
发表于 2015-1-11 23:08:28 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
这个地方我还在纠结,请问你说的9位10位 10位,高出8位的部分要用A0/A1/A2代替?
在AT24C01/02里面A0 A1 A2是片选地址,在AT24C04/C08/C16里面,那些不连接的引脚,是不是把它们用作空间寻址用的地址了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-1-11 23:09:07 | 显示全部楼层
回复【6楼】笨笨的小马驹爱奔跑:
---------------------------------
是的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-7-7 23:19:45 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
...原来如此
合肥-文盲
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2015-4-13
在线时间
0 小时
发表于 2015-9-23 21:43:05 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
请问原子哥
0XA0+((ReadAddr/256)<<1
这句怎么理解啊?
新人求教!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-9-25 22:29:27 | 显示全部楼层
回复【9楼】常春藤联盟:
---------------------------------
就是一句c代码...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2015-4-28
在线时间
2 小时
发表于 2015-11-21 02:41:48 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
还是不明白
回复

使用道具 举报

4

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2015-12-15
在线时间
6 小时
发表于 2015-12-15 09:33:50 | 显示全部楼层
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   取决于硬件选的EEPROM是哪款 如果选用AT24C08的话,从器件地址位是 1010A2 a9 a8 R/W,AT24C08是10位表示地址 所以 WriteAddr/256 就是取出高8位 也就是 000000 a9 a8,左移以为成00000a9 a80,希望可以帮到你
回复

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-1-12
在线时间
19 小时
发表于 2016-1-19 14:17:05 | 显示全部楼层
看了这个帖子总算搞明白了    0XA0+((WriteAddr/256)<<1)) 这个为啥这么写!
新手刚刚入门啊!
回复

使用道具 举报

0

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2014-6-5
在线时间
37 小时
发表于 2016-1-19 16:05:42 | 显示全部楼层
本帖最后由 zhanghan4310 于 2016-1-19 16:10 编辑

这个是为了兼容而设计的,24C01 24C02最大地址分别是127  255  所以不管是哪个地址/256都等于0,左移还是0.   但是后面的器件(C04 C08 C16)有memory page addressing这个控制比特位。所以要通知芯片是在哪一个区域。手册里面的Device Addressing这一章节有。再后面的芯片就没有这个控制比特位了,直接写地址的高低8位即可。
回复

使用道具 举报

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-4-14
在线时间
12 小时
发表于 2016-4-14 16:24:49 | 显示全部楼层
学32其实只有两周的时间,IIC这一块我看了一整天理解了好久,可能是妹子悟性真的很低吧
发现很多和我一样关于IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));这一个不理解,真的花了好几个小时,简单说下我现在得到的理解。
考虑到At24c04/08/16地址不止8位,这个可以看datasheet,为了得到对应的a8,a9,a10的值,
比如C08,地址位10位,WriteAddr/256是不是就是得到a9,a8值,写成10位形式00000000a9a8,左移一位0000000a9a80.
而C08器件地址位为1010A2a9a8R/W,这样移位是不是正好移到相应位置上。
只能这么浅显的理解了。错了的话请帮忙我解释,确实还有很多不懂。。。
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2016-7-18
在线时间
41 小时
发表于 2016-8-26 13:47:33 | 显示全部楼层
xiaolan520 发表于 2016-4-14 16:24
学32其实只有两周的时间,IIC这一块我看了一整天理解了好久,可能是妹子悟性真的很低吧
发现很多和我一样 ...

和我理解的差不多还有在补充一下,如果实AT24C16以上的直接另开一个IIC_Send_Byte(ReadAddr>>8)传输
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
发表于 2016-11-26 11:25:23 | 显示全部楼层
蛋蛋面在路上 发表于 2015-12-15 09:33
IIC_Send_Byte(0XA0+((WriteAddr/256)&lt;&lt;1));&nbsp;&nbsp;&nbsp;取决于硬件选的EEPROM是哪款&nbsp;如果 ...

看你的解释看明白了,谢谢
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2016-9-10
在线时间
7 小时
发表于 2017-2-16 16:11:18 | 显示全部楼层
该类器件要通过iic总线操作,读写过程中都要先寻址,这类器件地址有两个字节组成,如下表,1010是固定的,A表示器件地址,可以拉高和拉低,iic总线上可以并接2的几次方个器件。P表示具体的内部地址数,比如at24c02共有256个字节,第二个地址字节完全可以满足,不用P。但是at24c04一个有512个字节,需要9位地址线,第一个字节中的p就表示地址线了,p=0表示低256字节,1表示高256字节。
注意:一般页写可以连续写8个数据。主机每发送一个字节都要接受从机的应答信号。


该类器件是采用iic总线进行操作的,器件地址根据容量的不同稍有不同,如下
对于芯片的A0,A1,A2脚:
24C01/02,A0,A1,A2都是从设备地址。
24C04,A1,A2是从设备地址,A0没用
24C08,A2是从设备地址,A0,A1没用
24C16及以上,A0,A1,A2都没用了。

其中,A表示期间地址,p表示也地址,在读写的时候首先是起始条件+器件地址
器件地址如上所示在16k中,需要两个字节表示内部地址,正是p2/1/0 和8位具体的地址
回复

使用道具 举报

1

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
415
金钱
415
注册时间
2015-1-16
在线时间
82 小时
发表于 2017-2-27 16:39:30 | 显示全部楼层
wuxixiaoli 发表于 2017-2-16 16:11
该类器件要通过iic总线操作,读写过程中都要先寻址,这类器件地址有两个字节组成,如下表,1010是固定的,A ...

回复

使用道具 举报

1

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
415
金钱
415
注册时间
2015-1-16
在线时间
82 小时
发表于 2017-2-27 16:39:43 | 显示全部楼层
wuxixiaoli 发表于 2017-2-16 16:11
该类器件要通过iic总线操作,读写过程中都要先寻址,这类器件地址有两个字节组成,如下表,1010是固定的,A ...

回复

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-11-5
在线时间
4 小时
发表于 2017-11-24 17:50:22 | 显示全部楼层

AT24CXX数据手册之设备寻址解读

本帖最后由 华兄 于 2017-11-28 17:20 编辑

详细解读:https://wenku.baidu.com/view/689 ... 4e852458fb39cd.html
http://huaxiongshangpu.taobao.com
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-7-30
在线时间
2 小时
发表于 2019-7-30 16:19:23 | 显示全部楼层
本帖最后由 ozp2003 于 2019-7-30 16:20 编辑

新手!看了一下午才明白!EEPROM的地址是8位,位数是固定的,高4位的值固定即A;中间3位由16位数据地址/256来定,最后1位由读写来定,估计很多新手和我一样,数据地址和EEPROM的地址弄混了!然后很多回复描述不是很清楚半天看不懂!!
回复

使用道具 举报

2

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2020-2-6
在线时间
37 小时
发表于 2020-4-12 15:40:47 | 显示全部楼层
ozp2003 发表于 2019-7-30 16:19
新手!看了一下午才明白!EEPROM的地址是8位,位数是固定的,高4位的值固定即A;中间3位由16位数据 ...

深有同感
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 05:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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