6567|4

66

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于IIC的地址问题 [复制链接]

各位兄弟
请问IIC从设备的地址是怎么设置的?不是物理地址吧?是不是芯片自己定义的?
我这有个程序是关于2410通过IIC向AT24C02(EEPROM)中写数据和读取数据的
为什么这里面设置了两个从机地址?:::
void Test_Iic2(void)
{
    unsigned int i,j,save_E,save_PE;
    static U8 data[256];
   
    Uart_Printf("IIC Test(Polling) using AT24C02\n");

    save_E   = rGPECON;
    save_PE  = rGPEUP;
    rGPEUP  |= 0xc000;                  //Pull-up disable
    rGPECON &= ~0xf0000000;
    rGPECON |= 0xa0000000;              //GPE15:IICSDA , GPE14:IICSCL

    //Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx //clock=IICCLK/16
    rIICCON  = (1<<7) | (0<<6) | (1<<5) | (0xf);        //0xaf

    rIICADD  = 0x10;                    //2410 slave address = [7:1]
    rIICSTAT = 0x10;                     //IIC bus data output enable(Rx/Tx)

    Uart_Printf("Write test data into AT24C02\n");

   for(i=0;i<256;i++)
        _Wr24C080(0xa0,(U8)i,i);//void _Wr24C080(U32 slvAddr,U32 addr,U8 data)
    for(i=0;i<256;i++)
        data = 0;

    Uart_Printf("Read test data from AT24C02\n");
    for(i=0;i<256;i++)
        _Rd24C080(0xa0,(U8)i,&(data));

    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
            Uart_Printf("%2x ",data[i*8+j]);
        Uart_Printf("\n");
    }
   
    Uart_Printf("OK! Write data is same to Read data!\n");
    rGPEUP  = save_PE;
    rGPECON = save_E;
}
void _Wr24C080(U32 slvAddr,U32 addr,U8 data)
{
    _iicMode      = WRDATA;
    _iicPt        = 0;
    _iicData[0]   = (U8)addr;
    _iicData[1]   = data;
    _iicDataCount = 2;
   
    rIICDS        = slvAddr;            //0xa0
      //Master Tx mode, Start(Write), IIC-bus data output enable
      //Bus arbitration sucessful, Address as slave status flag Cleared,
      //Address zero status flag cleared, Last received bit is 0
    rIICSTAT      = 0xf0;      
      //Clearing the pending bit isn't needed because the pending bit has been cleared.
    while(_iicDataCount!=-1)
       Run_IicPoll();

    _iicMode = POLLACK;

    while(1)
    {
        rIICDS     = slvAddr;
        _iicStatus = 0x100;             //To check if _iicStatus is changed
        rIICSTAT   = 0xf0;              //Master Tx, Start, Output Enable, Sucessful, Cleared, Cleared, 0
        rIICCON    = 0xe0;//0xaf;              //Resumes IIC operation. //hzh
        while(_iicStatus==0x100)  
            Run_IicPoll();
              
        if(!(_iicStatus & 0x1))
            break;                      //When ACK is received
    }
    rIICSTAT = 0xd0;                    //Master Tx condition, Stop(Write), Output Enable
    rIICCON  = 0xe0;//0xaf;                    //Resumes IIC operation.         //hzh
    Delay(1);                           //Wait until stop condtion is in effect.
      //Write is completed.
}

最新回复

rIICADD  = 0x10;                    //2410 slave address = [7:1] 这个是2410芯片做为从地址时候的地址.但是在这里2410是做为主设备用的,所以这个值没有用到,只是设置了一下值的大小 void _Wr24C080(U32 slvAddr,U32 addr,U8 data) 其中第一个参数slvAddr是从设备的地址,也就是IIC组织固定好了的,在每个器件里的固定的值,而第二个参数addr是器件内的寄存器地址. 假如说器件地址为0x70而它的内部有10个寄存器地址分别为0x10,0x11.........0x19. 就类似于这个意思. 好像是第一个寄存器像是基址寄存器的样子,第二个参数是个偏移量,这样理解也没有问题的我觉得  详情 回复 发表于 2009-2-5 11:55
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
IIC设备的地址是IIC设备自己定义的,具体你可以看你的目标IIC芯片的DATASHEET
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
DS上面有说的

24C系列通常是0xA0~或者外加片选
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 1 楼 sherlock_lai 的回复:
IIC设备的地址是IIC设备自己定义的,具体你可以看你的目标IIC芯片的DATASHEET
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

5
 
rIICADD  = 0x10;                    //2410 slave address = [7:1]
这个是2410芯片做为从地址时候的地址.但是在这里2410是做为主设备用的,所以这个值没有用到,只是设置了一下值的大小
void _Wr24C080(U32 slvAddr,U32 addr,U8 data)
其中第一个参数slvAddr是从设备的地址,也就是IIC组织固定好了的,在每个器件里的固定的值,而第二个参数addr是器件内的寄存器地址.
假如说器件地址为0x70而它的内部有10个寄存器地址分别为0x10,0x11.........0x19. 就类似于这个意思.
好像是第一个寄存器像是基址寄存器的样子,第二个参数是个偏移量,这样理解也没有问题的我觉得
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表