一站式电子元器件采购平台

华强商城公众号

一站式电子元器件采购平台

元器件移动商城,随时随地采购

华强商城M站

元器件移动商城,随时随地采购

半导体行业观察第一站!

芯八哥公众号

半导体行业观察第一站!

专注电子产业链,坚持深度原创

华强微电子公众号

专注电子产业链,
坚持深度原创

电子元器件原材料采购信息平台

华强电子网公众号

电子元器件原材料采购
信息平台

将MAX7651/MAX7652 12位数据采集系统连接到24co2 2线串行EEPROM

来源:analog 发布时间:2023-11-15

摘要: 详细说明了如何将MAX7651/MAX7652 12位数据采集接口连接到24co2 2线串行EEPROM。

本文介绍了将MAX7651和MAX7652 12位数据采集系统连接到24co2 2线串行EEPROM所需的具体硬件描述和软件例程。提供了详细的软件代码。由于MAX7651/52基于标准8051处理器核心,因此这里提供的信息对任何基于标准8051的设计都很有用。

24Cxx系列2线串行eeprom广泛应用于8051微处理器系统。虽然MAX7651/MAX7652闪存可编程12位数据采集系统具有16K的内部闪存,但有许多“传统”产品使用小型且廉价的外部存储器。

这个应用笔记提供了基本的2线写和读软件子程序。它们可以很容易地修改,以解决eeprom的附加功能,如内存保护和银行寻址。

24co2串行EEPROM有许多衍生产品,其中包括额外的内存和页面寻址。24co2被广泛使用,是本例中使用的部件。其他派生部分可以使用此代码,只需稍作修改。

EEPROM信号和时序

24Cxx系列使用两条I/O线进行接口:SCL(串行时钟)和SDA(串行数据)。SCL边有不同的功能,这取决于一个设备是被读取还是被写入。当时钟数据进入设备时,时钟的正边锁存数据。负时钟将时钟数据移出设备。

SDA信号是双向的,并且物理上是一个开漏,因此多个eeprom或其他设备可以共享引脚。SCL和SDA都必须在外部拉高。

EEPROM使用的协议部分基于EEPROM发送的ACK(确认)位,如果发送给它的数据已被接收。所有的地址和数据都是用8位字发送的。EEPROM在第9个时钟周期内以低位周期发送ACK。EEPROM在SCL和SDA引脚上寻找特定的转换以符合READ和WRITE的要求。

SDA引脚上的数据可能只在SCL低的时候改变。在SCL高周期内的数据变化指示启动或停止条件。START条件是SDA随SCL高从高到低的转换。所有数据传输必须以START条件开始。

停止条件是SDA低到高的转换,SCL高。所有数据传输必须以STOP条件结束。READ后,STOP将EEPROM置于备用电源模式。有关启动和停止条件,请参见图1。


图1所示。启动和停止条件。

设备寻址

24co2有3个物理引脚,指定为A2, A1和A0,它们绑定到逻辑1或0电平。这允许8个唯一的硬件地址,因此多达8个24c02可以共享SCL和SDA线而不会发生冲突。有一个内部地址比较器,查找主控制器发送的地址与24co2唯一的7位地址之间的匹配,该地址部分由A2、A1和A0确定。参见下面的表1。

表1 24co2设备地址
最高有效位





LSB
1010A2A1A0R / W ~

设备地址在START条件之后立即发送。前四位是序列“1010”,这是一个简单的“噪声滤波器”,可以防止线路上的随机噪声突发进入设备。发送的最后一位是1表示READ, 0表示WRITE。下面的代码示例用于随机READ/WRITE操作。该部件还可以通过稍微修改代码来执行页面写入/顺序读取。更多信息请参见24co2数据表。

字节写入内存

字节写入序列如图2所示。在接收到START条件和设备地址后,如果设备地址与它自己的唯一地址匹配,EEPROM发送ACK。MAX7651等待ACK,如果ACK不存在,则终止通信。接下来,发送一个8位字节地址,然后是另一个ACK。然后MAX7651发送8位数据字节,等待第三次ACK,并发送一个STOP条件。


图2 写操作。

重要的是要注意,在收到STOP条件后,EEPROM内部等待将数据存储到其内部存储器阵列中。这可能需要长达10毫秒的时间。当内部EEPROM被编程时,24co2将忽略尝试访问。可以轮询该部件以完成内部写周期。这包括发送另一个START条件(也称为repeat START),后面跟着设备地址字节。注意,在这种情况下,没有发送STOP条件。如果内部编程周期完成,EEPROM将发送ACK。MAX7651也可以被编程为在继续之前等待10ms。

从内存中读取字节

从随机地址的24co2 EEPROM中读取一个字节需要在READ之前执行一个虚拟的WRITE操作。参见图3。

顺序为:

  • 开始的条件

  • 用R/~W = 0 'dummy WRITE'命令发送设备地址

  • 等待ACK

  • 发送字节存储器地址

  • 等待ACK

  • 发送重复启动条件

  • 发送R/~W = 1的设备地址(读取命令)

  • 等待ACK

  • 首先将8个数据位读入MAX7651, MSB

  • 没有应答

  • 停止条件


这个序列相当复杂!READ所需的SCL转换总数是38。


图3 读操作。

代码示例

下面的汇编语言代码示例假设在设备0H处寻址一个24co2 EEPROM(即A2 = A1 = A0 = ground)。MAX7651使用两个未使用的通用I/O端口引脚对串行时钟(SCL)和双向数据线(SDA)进行位bang。需要两个内部RAM位置:EE_ADDR存储字节地址,EE_DATA存储数据。

;EEPROM例程为24C02,具有A2 = A1 = A0 = 0


,,,
EE_WRITE:调用EE_START;发送一个起始标志到eeprom

MOV# 0 a0h;指定一个写eeprom @地址0h

调用;移出设备地址

JCWR_ABORT;如果没有从eeprom返回,则中止

MOV, EE_ADDR;获取eeprom内存地址

调用;移出内存地址

JCWR_ABORT;如果没有从eeprom返回,则中止

MOV, EE_DATA;获取要写入的数据

调用;移出数据

JCWR_ABORT

CLRC
WR_ABORT:调用EE_STOP;将停止条件发送到eeprom

;等待24co2 {10ms}的写入时间
;EEPROM需要10ms来内部存储数据。你可以选择
;将微控制器置于等待状态,或继续执行;
;记住EEPROM数据不是存储10ms的!






受潮湿腐烂
;回到主程序

;读取eeprom数据-首先执行' dummy write '





EE_READ:MOVEE_DATA # 00 h;清理旧数据

调用EE_START;发送一个起始标志到eeprom

MOV# 0 a0h;指定写入eeprom @地址0h

调用;执行“虚拟写入”

JCRD_ABORT;没有返回则中止

MOV, EE_ADDR;加载eeprom存储器位置



;从中阅读

调用;写入eeprom存储器位置

JCRD_ABORT;没有返回则中止

;现在读取数据!





EE_WRITE:调用EE_START;发送一个开始标志

MOV# 0 a1h;指定从eeprom读取

调用;移出eeprom地址

JCRD_ABORT;没有返回则中止

调用胫骨;从eeprom移入数据

MOVEE_DATA,;存储数据

调用钠钾共晶合金;发送一个nak(不承认)到



;eepm

CLRC;清除错误标志
RD_ABORT:调用EE_STOP;全部完成

受潮湿腐烂

;Ee_start位bang表示从开始序列到eeprom(从高到低sda)的转换
;SCL高)。





EE_START:SETBSDA

SETBsci;设置两个位

NOP
;延迟

CLRSDA;开始的条件;从高到低的过渡

NOP


NOP
;Eeprom访问延时

CLRsci

CLRC;清除错误标志

受潮湿腐烂
;全部完成

;Ee_stop发送一个停止序列到eeprom(低到高sda转换)
;SCL高)。





EE_STOP:CLRSDA

NOP


NOP


SETBsci

NOP


NOP
;设置时间延迟

SETBSDA;发送一个停止条件

受潮湿腐烂

;大喊将数据移出到eeprom





喊:B

MOVB, # 8;保存b并加载位计数
EEOUT:RLC一个;左移位(rlc =左旋转)



;携带)

MOVSDA C;从进位中获取数据位

NOP


SETBsci;1位时钟

NOP
;时钟高时间

CLRsci;时钟现在很低

DJNZB, EEOUT;做8次

SETBSDA;释放sda

NOP


NOP


SETBsci;ACK时钟

NOP


MOVC, SDA;得到回报

CLRsci;清除时钟钻头

流行B;还原b的值

受潮湿腐烂

;将数据从eeprom移入





心:SETBSDA;将sda作为输入

B

MOVB, # 8;保存b并设置位计数器
EEIN:NOP


SETBsci;设置时钟

NOP


NOP
;Eeprom存取时间

SETBSDA;Set = 1作为输入

MOVC, SDA;读1比特

RLC一个;左移位

CLRsci;清零时钟位

DJNZB, EEIN;如果读取少于8位,则获取下一位

流行B

受潮湿腐烂

;Ack发送一个eeprom确认





应答:CLRSDA

NOP


NOP


SETBsci;时钟时钟

NOP


CLRsci;把时钟调低

受潮湿腐烂

;Nak发送一个no acknowledgement





否定:SETBSDA

NOP


NOP


SETBsci;给闹钟计时

NOP


CLRsci;把时钟调低

受潮湿腐烂




声明:本文观点仅代表作者本人,不代表华强商城的观点和立场。如有侵权或者其他问题,请联系本站修改或删除。

社群二维码

关注“华强商城“微信公众号

调查问卷

请问您是:

您希望看到什么内容: