IIC 概述之24c系列存储器内存分析

IIC

型号     容量      器件/业面寻址字节                   可寻址位       模块

24C01   128B      (1010)(A2)(A1)(A0)(0或1)     3            128B
24C02   256B      (1010)(A2)(A1)(A0)(0或1)     3            256B
24C04   512B      (1010)(A2)(A1)(P0)(0或1)     2            2X256B
24C08  1024B      (1010)(A2)(P1)(P0)(0或1)     1            4X256B
24C16  2048B      (1010)(P2)(P1)(P0)(0或1)     0            8X256B

解析:IIC总线接口器件24C系列非易失性存储器与89C51接口采用软件模拟IIC。24C系列
存储器器件地址统一为1010XXXX,不要问为什么,这是厂家出厂的时候规定好的了。至
于24C的引脚功能和89C51的接口我就不多说了,本文的重点主要是如何应用。
  上面说了,器件的地址字节的高位是1010,那么低4位呢?先说最后一位吧,最后一
位为0的时候表示89C51要写数据入存储器,1的时候表示要从存储器读数据。还剩下中
三位A2,A1和A0。它们的高低电平取决于24C的A2,A1,A0是接高电平还是接地。A2,
A1 和A0有8个组合,因此可以扩展8个相同的器件,根据A2、A1、A0的不同,一样的器件
也会有不同的地址。那么是不是每一个24C都可以扩展8个呢?不是的。注意上表,24C01
有三个可寻址位,A2,A1,A0,所以可以扩展8个,24C02也一样。而04则只可以扩展4个
08只可以扩展2个,16就没有扩展了,只可以挂一片24C16。为什么呢?因为访问24C系列
除了访问器件地址外,还要访问器件内的字节的地址。例如24C01,要对其操作,就先选
选中它的地址,然后操作第一个字节或其他字节,这些字节也是有地址的,分模块,用
一个字节表示,最多可以操作256个字节。24C01和24C02不大于256个字节,对其操作就
简单得多了。但24C04,08和16呢?他们都大于256个字节,怎么办?分模块。注意到上
表的P0,P1,P3没有?把04分成两个模块,2X256B,08四个模块,16就八个模块。究竟
怎么
模块操作呢?拿24C08为例,有A2 P1 P0。A2只可以0或1,所以只能扩展2个24C08,其
内有4个256字节的模块,要操作哪个模块取决于P1,P0的组合。例如,24C08的地址字节
为1010000X第一个字节地址为0,第256个地址为255,如果地址字节是1010001X,那么第
256个字节的地址为0,第512个字节的地址为255。就如此。
    再用24C08举例说明如何扩展,当两个24C08的A2脚分别接高电平和地的时候,就可
以了,这样就扩展了,他们的器件地址分别是1010000X和1010100X。当要读第一个(A2
接地)
   24C08的的第一个模块的数据时候,单片机先发送地址字节10100001;当要把数据写
进第二个(A2接高电平)24C08的第二个模块的时候,应发送10101010地址字节。

IIC通信过程:
写数据:发送启动信号,发送设备地址信号,检测应答,发送写命令,发送数据,发送停止信号。
读数据:发送启动信号,发送设备地址信号,检测应答,发送写命令,发送要读取数据的地址;发送开始信号,发送读命令。

菜鸟常见错误:用IIC控制硬件时,要特别注意硬件改变状态需要时间(硬件把收到的数据写入自己的寄存器需要时间、根据自己的寄存器改变状态也需要时间)。

时间: 2024-10-17 18:44:37

IIC 概述之24c系列存储器内存分析的相关文章

java执行程序的内存分析系列专栏二之static变量和方法内存分析

昨天写了简单的聊了下java执行程序时简单的内存划分,今天我们接着往下聊,聊聊static变量和方法的内存分析. 1.static变量和方法的第一个特性内存分析 statiic变量和方法的第一个特性能通过类名.static变量和类名.static方法的形式调用,而普通只能对象的形式调用.但具体为什么是这样的,这得分析static变量和方法他们在内存中怎样分配的,因此在这里我首先建立一个学生类,里面有一个普通成员变量和一个静态成员变量以及一个普通方法和一个成员方法,然后建立了一个测试学生的类. 1

java执行程序的内存分析系列专栏

近段时间研究了java的程序执行过程中的内存分配,收获颇多,解决了我最近时间学习java的很多困惑点.写java内存分析系列的目的主要有两个,一来是希望给像我一样的java初学者一定的启发,希望也能解决的java关于内存方面的困惑点.二来也是给自己做个总结,毕竟只有自己亲自写出来的东西,才是真正的东西.今天就开始java程序执行过程内存分析系列第一篇. 一. java执行程序时内存的划分 一般来说,作为初学者,一般只是将java程序的内存只是分为栈区,和堆区.确实刚开始学时这样划分能都便于我们理

Java内存分析

前言 只看代码,我们只能了解程序执行的先后顺序,通过内存分析,我们可以了解程序执行过程中的内存分配情况.前者是在时间维度上进行分析,后者是在空间维度上进行分析.本文目的就是将具体代码与其执行过程中的内存分配情况对应起来,使大家对这块内容有个清晰的认识. 概述 根据下图,我们首先来介绍一下整个程序执行过程.主要分为三步: 双击程序文件,将程序装载到内存中: 内存中本身有操作系统的代码,会找到代码中的main方法开始执行: 执行过程中的内存管理. 补充: 程序文件本身放在硬盘上,文件扩展名可以是.e

4.3-全栈Java笔记:面向对象的内存分析

面向对象的内存分析 为了让大家对于面向对象编程有更深入的了解,我们要对程序的执行过程中,内存到底发生了什么变化,进行剖析,让大家做到"心中有数",通过更加形象的方式理解程序的执行方式. 老鸟建议:       本节是为了让初学者更深入了解程序底层执行情况,为了完整的体现内存分析流程,会有些新的名词,比如:线程.Class对象.大家暂时可以不求甚解的了解,后期学了这两个概念再回头来看我们这篇内存分析,肯定收获会更大. Java虚拟机的内存可以分为三个区域:栈stack.堆heap.方法区

内存分析_.Net内存原理介绍

内存原理介绍 1.       .Net应用程序中的内存 1.1.Net内存类型 Windows使用一个系统:虚拟寻址系统.这个系统的作用是将程序可用的内存地址映射到硬件内存中的实际地址上.其实际结果是在32位的Windows操作系统中,每个进程都可以使用4GB的内存,当然,64位机这个数字就更大了,在这4GB的内存中存储着可执行代码.代码加载的DLL和程序运行的所有变量,这4GB的内存成为虚拟地址空间或虚拟内存.在.Net中要使用多种类型的内存,包括:堆栈.非托管堆和托管堆. C#将数据分为2

Dotmemory 内存分析工具的操作手册

教程一.开始学习dotmemory 在本教程中,我们将学习如何运行dotMemory内存快照.此外,我们将简要地看看dotMemory的用户界面和基本分析的概念.考虑dotMemory本教程作为起点 基本条款: 你可能会问:“什么是内存快照和为什么我要学他们?”这是一个很好的时间来达成一些内存分析 您将在本教程中遇到. 从内存的角度来看,应用程序由连续的工作为新对象分配内存和释放内存的对象不再使用的应用程序.对象分配一个接一个地在所谓的托管堆(关于内存管理.net,遵循这个链接).在此基础上,我

PO_PO系列 - 采购单管理分析(案例)

2014-07-01 BaoXinjian 一.摘要 PO采购单的类型 1. 标准采购业务 •业务背景: 标准采购业务的发生一般是,公司采购部门的采购员根据业务部门领导签字的请购单, 或者是已接受供应商报价的报价单,填写采购单,交部门领导审批,或更高层领导审批, 领导审批后,采购员即可通知供应商根据约定进行供货. 2. 一揽子采购业务 •业务背景: 一揽子采购业务的发生一般是,公司采购部门与供应商签订一个一揽子采购协议, 即在向该供应商进行采购时,由于采购量的变化,供应商可以根据实际的情况给与公

Linux 系统内存分析

1. 内存基本介绍 1.计算机基本结构: 电脑之父--冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器 如图: 输入设备:键盘鼠标等 CPU:是计算机的运算核心和控制核心,让电脑的各个部件顺利工作,起到协调和控制作用. 存储器:一系列的存储设备,硬盘,内存等 输出设备:如打印机,扬声器等 2.存储器: 我们看一下系统中存储器的层次结构: 图中L0-L5分别表示系统中所有存储器的层次结构,其中包括高速缓存,主存,磁盘等. 越上层的存储器造价越高,速度也越快,也更加靠近c

进制、内存分析

一.进制 1.什么是进制 是一种计数的方式,数值的表示形式 汉字:十一   十进制:11  二进制:1011  八进制:13 多种进制:十进制.二进制.八进制.十六进制.也就是说,同一个整数,我们至少有4种表示方式 软件开发,肯定要了解这个 2.二进制 1>   特点:只有0和1,逢2进1 2>   书写格式:0b或者0b开头 3>   使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储 4>   二进制和十进制的互相转换 5>   n为二进制位所能表示的数据范围(