OpenEdv-开源电子网

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

IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //发送器件地址0XA0,写数据

[复制链接]

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
发表于 2012-7-17 11:12:02 | 显示全部楼层 |阅读模式
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{     
 u8 temp=0;                         
    IIC_Start(); 
 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);   //发送低地址
 IIC_Wait_Ack();    
 IIC_Start();       
 IIC_Send_Byte(0XA1);           //进入接收模式     
 IIC_Wait_Ack(); 
    temp=IIC_Read_Byte(0);    
    IIC_Stop();//产生一个停止条件    
 return temp;
}

IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));   //发送器件地址0XA0,写数据

((ReadAddr/256)<<1)这个是干什么用的,难道可以实现自动器件寻址?但我又不理解。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2017-10-27
在线时间
36 小时
发表于 2018-8-25 21:41:22 | 显示全部楼层
24c02 1片字节地址范围 00-255   加上地址引脚
a2 a1 a0 可以扩展2kb  是8片24c02 地址范围就是00-255  256 -511   512 -1023 。。。。。以此类推,假如写一个数据到300的地址  此时应该是第二片的范围即256-511 此时a2 a1  a0 应该是001   8位写从起见地址应该是 1010 a2a1 a0 0 (1010 0010)16位应该是0x a2    程序中0xa0+300/256<<1 即 0xa0+0x02=0xa2 刚好符合
回复 支持 2 反对 0

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2013-11-7
在线时间
0 小时
发表于 2014-3-24 19:46:45 | 显示全部楼层

新手上路,请多指教。

先看这个图1,这是从24c02datasheet上截下来的,从这里看到如果插入2k的eeprom就可以插8片,当然这个就需要片选信号了,就是A2,A1,A0,(原子的板子是一个2k的,

所以他就把A2A1A0都给接地了,可以看板子的原理图找到。)4k的就可以插4片片选就是A2和A1,依次类推,16k的只能插一片(当然就不需要片选了,不用A2A1A0了)

也就是说,它总共能管理的大小为16kbit。

然后再看图2和图3;

对照着时序看代码,继START之后先给出器件地址,因为16k(也就是AT24C16)不需要片选信号,所以只需要发送16位的字节地址,

if(EE_TYPE>AT24C16)
 {
  IIC_Send_Byte(0XA0);    //发送写命令
  IIC_Wait_Ack();
  IIC_Send_Byte(ReadAddr>>8);//发送高地址    
 }在确定写命令后,用来发送16位的高地址。

else
  IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));  
         //发送器件地址0XA0,写数据  

取16位地址的高8位,对于24C02而言,高8位完全就是片选信号(其实只有8,9,10三位是,11,12,13,14,15都为0);而对于24C04而言,高7位才是片选信号,

第8位是page信号,就是P0;依次类推

对于左移是让片选信号位依次对应,A0的0才是表示写数据。

 

 

tupian.zip

496.94 KB, 下载次数: 618

回复 支持 2 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2012-7-17 12:42:15 | 显示全部楼层
这个,你对比看24C02以上的数据手册,和24C02的数据手册,发现有没有不一样的地方?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2013-10-8
在线时间
0 小时
发表于 2013-10-28 16:49:16 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥我想问一下 那个0XA0是什么意思  在数据手册上没看到相关的
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2013-10-28 18:43:21 | 显示全部楼层
回复【3楼】love1evol:
---------------------------------
24CXX的读写,有个地址的...你看看相关内容
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2013-9-5
在线时间
0 小时
发表于 2013-10-29 09:12:36 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,如果用24C256,改成发/收16位数据,读写命令该怎么改0x00A1?还是0xA100?
呵呵
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2013-10-29 12:26:24 | 显示全部楼层
还是一样啊。。。你只需要修改:EE_TYPE 为  24C256即可。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2013-10-29 16:49:34 | 显示全部楼层
回复【5楼】Tang青:
---------------------------------
原子哥的程序是通用的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

9

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2013-9-5
在线时间
0 小时
发表于 2013-10-29 17:51:42 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
我也知道,公司那块EEPROM 上面写着ATMLU204  2ECL,都不知道是什么,他们又说是24C256,弄了一天弄不好,我用24C16试又没问题,所以应该不是程序的问题也不是我的问题。
呵呵
回复 支持 反对

使用道具 举报

4

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2017-4-5
在线时间
24 小时
发表于 2017-4-18 09:22:40 | 显示全部楼层
我也在看这个呢
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

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

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

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

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

使用道具 举报

90

主题

534

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1059
金钱
1059
注册时间
2017-4-12
在线时间
280 小时
发表于 2018-8-27 09:42:25 | 显示全部楼层
其实你可以用标准I2C去尝试谢谢, 就会知道A0 什么了
穷不可怕,可怕的是穷的是我~~~
回复 支持 反对

使用道具 举报

3

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2018-3-6
在线时间
24 小时
发表于 2018-11-4 11:24:29 | 显示全部楼层
也想问一下 最后为什么要加这个((ReadAddr/256)<<1)
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2020-6-18
在线时间
32 小时
发表于 2020-9-7 11:15:05 | 显示全部楼层
请问在用IIC和别的设备通信 比如MLX90614,还需要把地址高八位左移一位吗
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-17 14:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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