本应用笔记说明如何使用I²C I/O扩展器将CF卡连接到微控制器的I²C接口。解释了用于读取和写入数据的软件命令。MAX7311 I/O端口扩展器用于设计电路。
数据记录通常需要大量内存来存储测量数据,尤其是在监控通道数量很大的情况下。更复杂的是,小型微控制器的内部数据存储器(RAM和EEPROM)有限,并且缺少地址和数据端口,这通常妨碍了外部存储器的添加。图1电路使用16位I²C I/O扩展器(U1,MAX7311)将紧凑型闪存(CF)卡连接到微控制器的I²C接口。I²C接口是一个合理的选择,因为许多电路已经使用它来连接外部ADC、DAC、实时时钟和其他元件。
图1.该电路采用16位I/O扩展器(MAX7311)将紧凑型闪存连接器连接到微控制器的I²C总线。
CF 卡以内存映射模式通过 8 位宽的数据总线进行控制。MAX7311的端口1(I/O线0–7)连接到CF卡的数据总线;端口 2 连接到地址和控制信号。CF卡的数据寄存器可以使用端口1的输入和输出寄存器进行读写。端口 2 寻址正确的寄存器并生成读写信号。
要写入特定寄存器,首先将数据写入配置为输出的端口 1。接下来,使用相同的数据连续三次写入端口 2,WR 除外N通过从 1 到 0 切换到 1 来生成写入信号的 PIN。地址位 A2–A0 指示要写入的寄存器。CE 低,而 RDN为高启用 CF 卡。类似的过程允许您从特定的寄存器读取。端口 1 用作输入端口,在三次写入端口 2 后读取,其中 RDNPIN 通过从 1 到 0 切换到 1 来生成读取信号。三次写入后,电路读取端口 1 并使数据可用。这三个地址位允许您读取、写入和寻址八个内部寄存器:
地址 | 注册 | 地址 | 注册 |
0x00 | 数据 | 0x04 | 气缸低 |
0x01 | 错误/功能 | 0x05 | 气缸高 |
0x02 | 扇区计数 | 0x06 | 选择卡/头 |
0x03 | 扇区编号 | 0x07 | 状态/命令 |
寄存器0x00用于主机和CF卡之间的数据交换。寄存器0x03、0x04、0x05和0x06用于指定读取或写入数据的磁道。每个轨道包含 512 个数据字节。处理器通过写入命令寄存器来指示读/写磁道和其他功能。您可以读取状态和错误寄存器以获取状态(忙、数据就绪等)和错误条件。
端口 2(I/O 10 和 11)上的两个未使用的引脚可用于驱动显示电路活动的 LED,或读取指示处理器使用或不使用卡的跳线(由用户设置)。如果第二个CF卡与第二个MAX7311连接,处理器可以从一个卡切换到下一个卡;用户可以拔下卡并处理其上的数据,而不会干扰数据记录过程。使用特殊的 CF 连接器时,该卡可热插拔。在这种情况下,MAX7311的中断输出应连接到微控制器上的中断输入。因此,通过放置或移除跳线产生的中断可用于触发处理器切换到另一张卡。
软件
两个I²C功能使微控制器能够读写。如果它具有硬件I²C接口,则功能可以非常简单。首先,读取和写入MAX7311端口需要两个功能:
Write_MAX7311(slv,prt,dat)此过程启动I²C总线,将数据字节数据发送到MAX7311上具有从地址slv的PRT端口。
Read_MAX7311(SLV,PRT)此过程启动I²C总线,从MAX7311端口prt读取数据字节,从地址为slv。
上述函数用于创建另外两个函数,它们读取和写入 CF 卡寄存器:
Write_CF_REG(注册,dat)此过程使用 Write_MAX7311 将数据 dat 放在端口 1 上。相同的过程用于将寄存器地址reg与其他控制信号一起放置在端口2上。写入执行三次(切换 WRN) 以生成写入信号。
Read_CF_REG(注册)此过程使用Write_MAX7311对CF卡寄存器进行寻址并生成读取信号。然后,Read_MAX7311过程从寄存器读取数据。
可用于读取和写入卡寄存器的函数现在可用于创建访问 CF 卡扇区的函数:
Write_CF(cyl,head,sec)此过程使用Write_CF_REG在写入操作中指定目标柱面、缸盖和扇区(寄存器0x03到0x06)。然后,通过将0x30写入命令寄存器来配置CF卡进行数据写入。然后执行 512 次Write_CF_REG,将数据(存储在全局数组中)写入数据寄存器。CF 卡会自动将此数据添加到当前轨道。
Read_CF(cyl,head,sec)此过程使用 Write_CF_REG 在读取操作中指定目标柱面、缸盖和扇区。然后,通过将0x20写入命令寄存器来配置CF卡进行数据读取。然后执行 512 次Read_CF_REG,通过数据寄存器从轨道读取所有 512 个字节,并将数据放入全局数组中。
如果微控制器的内部存储器太小,无法存储 512 字节的数据,则可以从进行数据采集的环路中写入扇区。也就是说,在接收到每个新的测量数据点后,其值可以直接写入CF卡。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !