zoukankan      html  css  js  c++  java
  • 蓝桥继续水——E2PROM的驱动读写(AT24C02的使用)

    比赛的AT24C02内存最大有2Kbit,即256个Byte。使用的通讯协议是I2C协议。

     

    由于比赛中用到连续按页写,按页读的情况比较少见。(数据没有特别多需要保存)

    所以只在这里介绍以字节为单位的写(Byte Write)随意读(Random Read,当然我就是把它当一个字节的读)。

    1设备地址码:

    由硬件电路图知,0xa0,是我们需要的地址码。(暂不考虑最后1位是读/写命令的问题)

    2.字节写

    S(起始信号)→设备地址+0→A(接收从器件应答)→写入数据的地址→A(接收从器件应答)→写入的数据(8位)→A(接收从器件应答)→P(结束信号)

     函数如下:

    void At24c02Write(unsigned char addr,unsigned char dat)        //这里写得比较粗糙哇,等待应答函数可以用来判断,但是我没有判断,只是贴合时序要求了。
    {
    IIC_Start();
    IIC_SendByte(0xa0);
    IIC_WaitAck();
    IIC_SendByte(addr);
    IIC_WaitAck(); 
    IIC_SendByte(dat);
    IIC_WaitAck();
    IIC_Stop();
    }

    3.随意读

    S(起始信号)→设备地址+0→A(接收从器件应答)→需要读取数据的地址n→A(接收从器件应答)→S→设备地址+1(要求读flash)→A(接收从器件应答)→读取字节→A非(主器件发送非应答信号1)→P(结束信号)

    函数如下:

    unsigned char At24c02Read(unsigned char addr)          //读取的字节需要返回。
    {
    unsigned char num;
    IIC_Start();
    IIC_SendByte(0xa0);
    IIC_WaitAck();//???????
    IIC_SendByte(addr);
    IIC_WaitAck(); //????????

    IIC_Start();
    IIC_SendByte(0xa1);
    IIC_WaitAck();
    num=IIC_RecByte();
    IIC_SendAck(1);
    IIC_Stop();
    return num;
    }

  • 相关阅读:
    POJ 1611 : The Suspects (普通并查集)
    深入解析 Dubbo 3.0 服务端暴露全流程
    智能搜索推荐一体化营收增长解决方案
    云上应用系统数据存储架构演进
    EMR on ACK 全新发布,助力企业高效构建大数据平台
    介绍一下闭包和闭包常用场景?
    BFC
    高斯消元学习笔记
    云虚拟主机如何设置域名解析
    Centos7.3安装openJDK
  • 原文地址:https://www.cnblogs.com/page71/p/13968180.html
Copyright © 2011-2022 走看看