3933|6

49

帖子

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.
}

最新回复

我也在学走个,有点迷茫  详情 回复 发表于 2009-6-17 11:05
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1、“IIC Test(Polling) using AT24C02”    那么 AT24C02 这个芯片有自己的IIC 地址 也许是你这里的0XA0 吧
2、IIC标准中 读写 操作时通过地址字节的 最末位来确认的,  Bit 0 =0 代表IIC写   Bit 0 = 1 代表 IIC 读取At24C02操作,

详细请先看IIC协议标准 和 芯片资料的 IIC 部分讲解。

 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
2410的IIC可以作为主机,也可以作为从机(slave)
第一个slv addr是2410自己的slave addr,虽然没有实际应用。
第二个addr就是eeprom AT24C02的地址了,2410通过这个地址对其进行IIC的操作。
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

4
 
学习一下啊!不错的帖!
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
hao
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
2楼说的应该是对的 
读写的地址都是0xa0 那就应该是2410自己的slave addr
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
我也在学走个,有点迷茫
 
 
 

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

查找数据手册?

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
快速回复 返回顶部 返回列表