基于flash的U盘数据记录仪的研制

2018-10-18 07:16
赤峰学院学报·自然科学版 2018年9期
关键词:记录器U盘字节

王 龙

(湘南学院 电子信息与电气工程学院,湖南 郴州 423000)

时代的进步,促使科学技术飞速发展,其大跨步走向自动化、互联网化、智能化的方向,采用的控制系统构与智能互联网结合走向多元化.面对科技的进步对工业应用中数据采集的需要加大,数据采集技术标准提升,故此考验数据存储设备的存储容量、速度、质量、便携性及工业应用环境等因素的能力.由U盘构成的数据储存记录器可面向于海量数据采集存储、设备黑匣子、考勤机数据记录、水文监测、无纸记录仪及自动化生产线运作数据采集系统等场合应用[1].

国内:最早期采用磁带记录技术开启数字化时期,高度数字记录(HDDR)特点是动态范围宽[2].再转变为固态数据记录器以SRAM存储器芯.中国科学院研究成功高速固态数据记录器,是国内较早以Flash为存储介质的数据记录器,存储容量突破120GByte[3].其中主要围绕CAN,USB2.0,PXIe等接口进行设计,随着USB总线的高速发展,运用USB接口技术实现数据记录的方式主要特点:传输速率快,即插即用等优势在高速数据传输领域开始普及和推数据记录器发展.

国外:从20世纪80年代末90年代初研制的数据记录器应用于诸多需要数据存储的领域.如美国SE公司(Seakr Engineering)MMUR系列数据记录器,具有28bit输出接口,数据记录的速度为3.6Gbps,容量是768Gbit[4],此时世界各国都准备探究数据记录器的技术.随着半导体工艺技术快速进步的到来,进入新的起航阶段,半导体存储器芯片逐渐诞生,如 EPROM、EEPROM、SDRAM、FLASH等.上述数据存储器芯片相对磁带记录器具有优点,例如占有空间小、耐高温、储存速率极快、容量大、稳定性高等.在研究领域有代表性的研制公司有美国的VCI公司和欧洲的ATRIUM公司[5].

总体方案是以ATmega128为主控芯片,通过UART通信方式实现与串口数据的传输,再通过spi通信方式控制flash芯片W25Q128BV的将接收的数据暂存入flash,从而将数据在USART通信方式下控制USB接口芯片CH376将缓存在flas中的数据传送到U盘,最终实现的目的是外部数据快速存入U盘,达到高速数据存储可以在脱离计算机控制的存储方式下实现.采用现场数据存储,事后通过计算机读取U盘的方式获取数据.本设计构成的模块有主控处理器、数据通信模块、U盘读取模块、电源管理模块,具体构成如下图所示:

图1 整体框架图

创新点:(1)将U盘应用于高速数据记录仪.U盘高速数据记录仪因避免了操作系统容易崩溃的问题而具有更高的可靠性,操作简单方便且成本低廉.

(2)采用flash作为前级数据缓存的目的是实现数据在采集存储时写入的速率与flash的存储速率完成有效的匹配,然后再转存到U盘,不会因为数据在采集存储时受U盘存储数据的速率的限制,完成数据采集与存储最佳效果.

1 Ch376使用分析

CH376s是实现U盘储存数据的芯片,它同样是文件管理系列的芯片,能够配合的主控芯片有单片机、DSP、FPJA等微机芯片的工作完成对U盘或者SD卡的数据存储.自身带有USB通讯协议的基本固件,芯片自身配置协议的固件就能够完成海量存储设备的专用通讯和SD卡的通讯[4].文件控制系统中主要包含FAT16、FAT32等管理固件.最大的优点是能够满足常见的USB储存开发,包含U盘、USB硬盘及SD卡(其中包含两类即标准容量和高容量的SD卡和HC-SD卡).

通讯方式三种:并口数据通信方式、SPI串行通信、异步串口通信.我们采用的是atmega128单片机,选择使用与单片机相结合的通讯方式uart,即异步串行通信方式.

U盘存储方式是分扇区模式和字节模式,本设计采用扇区模式进行的,因而U盘会给予极多个物理扇区,单独用来存储数据,而通常情况下单个扇区内存的大小一般是512字节为基本单位对U盘进行读写操作,速度比字节模式快因此我们需要调整我们数据缓存区的扇区大小,基本要求大于512字节的整数倍.当然也是适应RAM多,数量非常大,可实现频繁的操作的单片机.

本设计中要用到读函数CH376SecRead和CH376SecWrite扇区写函数,因为我们计算机一般是将U盘中的物理扇区,加以组织构造成为FAT文件系统,其目的是让单片机控制的U盘/SD卡的数据与计算机两间的数据交换,单片机存储U盘数据是在FAT标准规范下行使数据的读取.我们在使用中通常存储数据时,假如数据数量非常少或数据间断型,我们也是可以在每次读取完数据后进行更新文件目录信息,这一把是更新目录中的文件长度.

Ch376的结构图分为应用层包含的函数在HOST.c,文件系统接口包含的函数是在FILE_syst.c文件里面.设备接口所有函数包含在HAL.H文件里面,硬件部分是连线再到USB总线方式直连U盘.下面我们论述硬件层和文件系统层.

硬件抽象层,也就设置I/O接口子函数的程序,构成单片机与CH376芯片的通讯接口式,取决于HAL.H头文件,UART_HW.C是硬件异步串口连接方式,在硬件层,支持波特率从9600bps到3Mbps[4].

文件系统层,将常用命令进行打包,提供了常用的文件管理子程序和一些不太常用的子程序FILE_SYS.H文件系统层头文件和相应的子程序来调用.

辅助调试子程序,主要用于显示输出调试过程中信息,便于查看程序在运行过程中状态监测.

2 驱动ch376s步骤

配置头文件有atmega128相应的头文件及ch376应用层和硬件层文件系统层的头文件,例如#include <string.h>、#include <stdio.h> 等.设置缓存区BUFFFER,其中buf根据需要设置,我们是64,设置串口调试信息监控,配置硬件的波特率我们取9600.

初始化后应答正常就进入中断,中断函数是CH376DiskConnect函数,等待U盘插入,紧接着检查U盘相关信息如U盘的容量,创建文本文档,通过串口返回监测结果返回初始化成功,进入接收数据状态.

3 CH376S的UART的通信方式

异步串口通讯方式主要包括:数据的读RXD和串行数据输出也就是数据写的引脚TXD.芯片的RXD和TXD连接方式是在单片机的串行数据输出引脚和串行数据输入引脚.

CH376使用的串行数据传输格式采用的是通用的字节传输方式,这包含1个起始位和8个数据位及1个停止标志位.默认设置的波特率是9600bp,如果要修改波特率需要借助函数CMD_SET_BAUDRATE修改既可.

通讯过程中,分为两个阶段,即发送命令阶段和命令应答阶段.这其中的发送命令也就是使用者向写入器(串口rs-233)提出的操作申请和数据应答,命令应答是采用写入器向用户命令提出的响应.

软件接口功能:首先检测U盘的状态(如插入,拔出),创建文件和目录(支持长文件名文件和目录),打开一个已经创建的文件和目录(支持长文件名文件和目录),从文件中读取指定长度和指定位置的数据(支持长文件名文件和目录).

写数据到指定文件的指定地址(支持长文件名文件和目录),列举目录下的文件和目录(支持长文件名文件和目录),删除文件和目录(支持长文件名文件和目录)查询U盘容量.

4 ch376模块电路设计

CH376的通信方式是异步串行通信UART,其中包含:RXD为串行数据输入和TXD作为数据输出.采用这边通信方式的优势就是减少与单片机最少的连线.CH376s在通信中的数据格式属于标准的字节传输模式,一个起始位,八个数据位,一个停止位.CH376能够适应硬件设定默认的串行通讯波特率,当然可以跟随单片机修改函数CMD_SET_BAUDRATE.每次上电复位后,CH376s的波特率取决自己三个引脚也就是BZ和SCK和SDI三个引脚的电平组合设定,与单片机的连线如下图示:

图2 ch376模块电路图

5 flash模块设计

端口定义:CLK=PB5/CS=PB4 DO=PB6 DI=PB7,程序配置流程配置引脚使能spi时钟,系统IO口初始化,进入SPI初始化,判断指定的SPI标志位是否已经设置好,进一步进入发送缓存的空标志位,判断是否配置好的SPI缓存标志.

图3 flash引脚图

写状态寄存器(01H):

主要对写入状态寄存器中SRP0,SEC,LB,QE,SRP1,TB,BP,CMP进行操作,LB位是非易失性的,也就是只要进入编程(OTP)位,只要是写入1,即不能进行清零操作.一旦开启写使能,写入状态寄存器指令(01H)将以/CS置低电平开始,然后通过DI进行传输指令码(01H),然后传输相应的状态寄存器位最后以/CS置高电平为结束.

在写入(01H)指令前,必须先写入(06H)指令也就是写使能指令,这一步的目的就是确保WEL位是1.

在写易失性的状态寄存位,先完成指令50H写入.这其中SRP1和LB位都是采用一次编程,表明我们不可能做到从1写为0.确保完成写状态寄存器指令顺利进行,/CS管脚的电平是在数据传输完成后拉为高电平.假使/CS电平没有被拉高电平,会导致在写状态寄存指令不会被执行.如果/CS在第八个时钟拉高电平时,相关的位CMP、QE、SRP1也会快速进行清零.假如在非易失性相关的状态寄存器位在进行写操作,也就是指令06和指令01H,如果/CS拉高电平后,在指令在执行期间,并不会影响读状态寄存器指令进行检查BUYS位.当BUSY=1完成指令后,BUSY位马上变为低电平,WEL位也变为低电平,完成上述就表明可以接受新的指令了.写指令50H和指令01H操作时,/CS拉高电平后,状态寄存器马上进行刷新.在刷新期间,BUSY位仍然是0.

图4 写状态时序图

读数据(03H)

读数据指令主要功能是指通过存储器读出一个字节或者连续着的多个字节.完成这个指令是从/CS置为低电平开始的,主要在DI的clk的上升沿到来时,传输的指令代码03H及24位地址位.当芯片接收完成相关的地址位,则相应的地址处的值会在下个时钟下降沿到来时以高位在前面地位在后面的方式进行地址自动加一.表明我们可以一次性读出整个芯片的数据.判断是否结束我们只需要判断/CS是否是被置高.根据要写的其实地址,确定写的起始区域的sector号,及其在起始sector中的偏移量.根据要写的起始地址和字节数,确定是否要写的数据是夸sector.确定好操作的sector及sector的地址范围.对每一个sector,先便利要写的地址区域保持的数据是否是0xff,如果是就不擦除,如果不是0xff区域,先读出里面的数据,保存在缓存flash芯片中.然后擦除里面的内容,然后把sector要操作的数据,写到缓存中,最后一次性把缓存在W25Q128BV的数据写到对应sector中.pBuffer:数据存储区开始写入的地址(24bit)要写入的字节数(最大65535),单页剩余的字节数,判写入结束与否,计算字节减去已经写入了的字节数一次可以写入256字节.

图5 读数据(03H)

6 读取flash电路的设计

采用atmega128模拟spi进行读取数据,其连接方式如图6所示CLK=PB5/CS=PB4 DO=PB6 DI=PB7

图6 单片机与flash连接

7 系统程序流图

主程序的主要功能是对定时器,I/O口资源,wrd128flash,ch376s,串口通信等所用到的资源进行初始化.主程序流程见图7所示.

图7 流程图

8 ch376程序结构分析

主程序除了对所用到的外设资源进行初始化之外还调用了3个子程序,分别是模拟数据传感器的数据读写程序、flash暂存读取程序、对ch376s数据处理程序,单片机通过控制将程序存入U盘中是以文本文档存在.

图8 ch376工作流程图

表1 几种存取方式对比

9 结论

采用单片机为主控的芯片供电方式便捷,因此使用环境灵活和功耗低,便于我们适用于森林生态数据记录和水文观测点的数据记录,解决不通电的情况下可以采用电池或者太阳能供电来解决电源问题,操作简单,对于户外记录数据非常有帮助.当然如果工业实际应用需要大量调试和各种环境测试和数据论证,这需要大量实验测试和理论计算为依据,从而达到进一步提高.

猜你喜欢
记录器U盘字节
No.8 字节跳动将推出独立出口电商APP
采用U盘文件冗余方案实现TSP系统的可靠装载
自动辨认插口方向的U盘
No.10 “字节跳动手机”要来了?
简谈MC7字节码
汽车事故数据记录器数据规范及应用进展综述
列车车厢视频记录器的应用
基于弹载图像记录器的压缩系统设计
U盘“闹肚子”
人类进入“泽它时代”