正点原子IIC例程讲解笔记(三)——24cxx.c中函数理解

本文详细介绍了如何使用C语言在STM32单片机上通过IIC协议与24C02进行通信,包括写入、读取数据以及检查设备正常性的函数解析,涉及地址计算、时序图和数据处理。
摘要由CSDN通过智能技术生成

目录

一、24C02 简介

二、在 AT24CXX 指定地址写入一个数据:

三、在ATC24XX指定地址读出一个数据

四、检查AT24CXX是否正常:u8 AT24CXX_Check(void)

五、在 AT24CXX 里面的指定地址开始写入长度为 Len 的数据

六、在 AT24CXX 里面的指定地址开始读出长度为 Len 的数据

七、在 AT24CXX 里面的指定地址开始写入指定个数的数据

八、在 AT24CXX 里面的指定地址开始读出指定个数的数据

一、24C02 简介

        设备地址:

         在IIC开始时,首先由主机设备向从机设备发送其从机设备地址,选择与哪个从机设备进行通讯,24C02作为从机时,地址前四位为1010,转为16进制后为A,后三位在硬件中全部拉低为低电平,用0表示;第八位为读/写选择位,0表示写入,1表示读取;用16进制表示为0xA0或者0xA1;

        写入时序图:

         读取时序图:

二、在 AT24CXX 指定地址写入一个数据:

void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)

函数源码:

void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
    IIC_Start();
    if(EE_TYPE>AT24C16)
    {
        IIC_Send_Byte(0XA0); //发送写命令
        IIC_Wait_Ack();
        IIC_Send_Byte(WriteAddr>>8);//发送高地址
    }
    else
    { 
        IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); //发送器件地址 0XA0,写数据
    }
    IIC_Wait_Ack();
    IIC_Send_Byte(WriteAddr%256); //发送低地址
    IIC_Wait_Ack();
    IIC_Send_Byte(DataToWrite);   //发送字节
    IIC_Wait_Ack();
    IIC_Stop();//产生一个停止条件
    delay_ms(10);                 //EEPROM 写入过程比较慢,需等待一点时间,再写下一次
}

其中:

        形参 u16 WriteAddr 表示写入数据的目的地址;

        形参 u8 DataToWrite 表示要写入的数据;

根据24C02的写入时序编写程序,操作步骤如下:

        (1)发送开始START信号

        (2)发送器件器件地址0XA0,最后一位为0,表示由主机发送数据,从机接收数据;

        (3)从机检测到主机发送的地址与自己的地址相同时发送一个应答信号ACK;

        (4)发送待操作的字节地址

        (5)等待一个ACK信号;

        (6)发送字节数据;

        (7)等待一个ACK信号;

        (8)产生一个停止信号,I2C停止;

        代码中,首先对设备型号进行了判断,当存储单元大于256个字节的时候,存储地址分两次发送:第一次把地址向左移8位—WriteAddr>>8,发送地址的高8位;第二次将地址与256取余—WriteAddr%256,得到的余数即为低八位的地址(可以随便取两个大于256的数验证一下)。

        如果设备的存储单元小于256个字节,按照步骤直接发送地址与256的余数(等于地址本身&#x

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值