您的位置 首页 FPGA

使用FPGA和DSP直接操控硬盘完成存储操控的办法

数据存储是数据采集过程中的一个重要环节,目前大部分数据存储系统都是用内置工控机的方法完成数据保存任务,这种方法系统功耗大,硬件成本高,不适用于具有内记功能要求的系统。本系

1 导言

  数据存储是数据收集过程中的一个重要环节,现在大部分数据存储体系都是用内置工控机的办法完结数据保存使命,这种办法体系功耗大,硬件本钱高,不适用于具有内记功用要求的体系。本体系选用FPGADSP直接操控硬盘进行数据存储,并选用一片FIFO 作为数据缓存,规划思路比较新颖,硬件结构简略,本钱低,直接操控硬盘的办法可将体系功耗降至最低,具有主动内记功用,能及时存储收集到的数据。本体系现已应用于某信号收集设备中,实践证明可满意运用要求,能够满意80Khz数据采样率体系的存盘要求。

  2 体系完结计划

  本规划选用FPGADSP直接操控硬盘[1][2],并选用一片FIFO作为数据缓存,体系选用DSP完结文件管理作业,运用FPGA完结DSP与硬盘的接口。详细框图如图1所示。

  图1 计划完结框图

  首要由收集操控板FPGA将FIFO复位,需求贮存数据时数据流直接将数据写入FIFO,当存储操控板FPGA查询到FIFO的状况为非空时就输出BIO信号告诉DSP发动存盘程序。DSP先拜访硬盘确认所需参数,如下一个文件应运用的文件名,保存文件的逻辑扇区号等。然后DSP向硬盘宣布存盘指令,当硬盘呼应操控指令后,DSP告诉FPGA能够向硬盘传输数据。存盘时FPGA从FIFO中读出数据并将数据打包,由8bit变为16bit,并写入硬盘数据寄存器。当存满40M时,DSP告诉收集操控体系已写满一个文件,收集操控体系将FIFO复位完结一次存盘操作。

  3 存储操控程序流程

  程序发动后,首要将硬盘Device register中的SRST置1使硬盘复位,在硬盘复位后读取MBR0和BPB0,在FAT中找到Special Sector并查看是否有标志位0x55FF,假如没有则阐明硬盘是第1次被运用,假如有则从中读取参数预备传输数据。

  (1) 为了在每次发动程序后能敏捷查找到应运用的文件名、下一个空簇的方位、正在运用的磁盘等参数,将硬盘第3簇中第1扇区标志为Special Sector,用于贮存这些参数。

  (2)每个磁盘被区分出200M空间为保存区,当发现磁盘空间缺乏200M时即显现磁盘已满,不在用当时磁盘存储数据而是运用下一个磁盘。

  (3)每个磁盘第2簇为目录区,因运用短文件名无子目录,所以当每簇为16扇区时目录区共可贮存256个文件名。

  (4)数据文件巨细固定为40M。

  假如硬盘是第一次被运用,则主机依次读取MBR0、BPB0、MBR1、BPB1直到查询到最后一个硬盘分区,并将相关参数如每个分区的巨细、分区的逻辑地址、每个分区数据空间开端段的逻辑地址、FAT表逻辑地址等信息写入Special Sector,并做一个文件的目录(32字节)将第一个文件命名为“000.dat”。

  当FAT中第三簇被标志为坏簇时,标明现已在硬盘上区分Special Sector并已存入硬盘参数。主机从Special Sector中读取下一个可用空簇,并核算这一簇在FAT中的方位并将FAT读入C54的RAM中,读取Special Sector中的文件名及相关参数并将其写入目录区。然后查询BIO,当BIO为低电平时开端传输数据(拜见贮存板接口),传输数据时FPGA发动元件 trans_data,由主机宣布XF作为发动信号。FPGA从FIFO中每读出2Bytes向硬盘写一次,接连写256次,即向硬盘传输512字节数据。主机每宣布一个XF下降沿FPGA就从FIFO中读取512字节数据并存入硬盘。

  传输40M数据完毕后,主机将依据传输的扇区数填写FAT表,判别硬盘空间是否小于200M、已贮存的文件数是否大于256,假如为真则再次存储数据时将运用下一个磁盘分区。

  4 硬盘操作操控流程

  咱们一般习惯称硬盘接口为IDE接口[3],对硬盘的操作如读写扇区,发送指令等都是经过读写寄存器来完结的,每向硬盘发送一组指令后都要读取状况寄存器中的信息,经过状况寄存器的值来判别硬盘是否现已履行完所发送的指令。

  4.1 硬盘发动操作

  硬盘加电后应先将硬盘复位,硬盘复位方法有三种,本规划选用的是将SRST置1,当SRST被置1后硬盘当即复位,这时应至少等候2ms才读取Status register。假如Status register的值为80h,则标明硬盘已完结复位。硬盘发动流程见图2。

  图2 硬盘发动程序流程图

  图3 扇区读写操作程序流程图

  4.2 扇区读写操作

  首要应向硬盘发送指令参数,即将读写的扇区数目写入Sector count register,将扇区的逻辑地址写入LBA High register、LBA Mid register和LBA Low register,即将接纳指令的设备号写入Device register。流程见图3。

  LBA=(柱面编号×磁头数+磁头编号)×扇区数+扇区编号-1

  将指令READ SECTOR或WRITE SECTOR写入Command register后,在400ns内Status register的值并不牢靠,所以需等候400ns才干读取Status register,这段等候时刻能够经过读取Alternate Status register和Error register度过,读取的数值应被丢掉。当状况寄存器的值为58h时,表明硬盘现已能够从Data register接纳或传输数据。

  4.3 DMA操作流程

  DMA操作与I/O操作类似,流程见图4,首要应向硬盘发送指令参数,即将读写的扇区数目写入 Sector count register,将扇区的逻辑地址写入LBA High register、LBA Mid register和LBA Low register,即将接纳指令的设备号写入Device register。将指令READ DMA或 WRITE DMA写入Command register后,在400ns内Status register的值并不牢靠,所以需等候400ns才干读取Status register,这段等候时刻能够经过读取Alternate Status register和Error register度过,读取的数值应被丢掉。当状况寄存器值为58h时主机应给出DMA初始化时序开端传输数据。

  图4  DMA操作流程图

  5 规划中的要点

  5.1 采样率问题

  数据收集及存储体系一般都有采样率要求,采样率一般要求大于50K,才干满意快速实时收集数据的要求。本体系中速度较慢的环节是硬盘存储环节,硬盘接口规划存盘速度为7.8Mbyte/S,明显收集速率与存盘速率并不匹配,处理的措施为选用一片 FIFO作为数据缓冲区。因为对硬盘操作过程中,需不断查询其状况,而硬盘状况改动时刻又不确认,所以要选用存储深度较大的FIFO作为缓存,IDT公司的72V2101满意规划要求[5]。作业时数据直接将数据写入FIFO,FPGA查询FIFO的状况,为非空时,和谐DSP拜访硬盘,进行存储操作,这样选用FIFO作为缓存的计划处理了速率匹配问题[4],当采样率为80k时,数据流为5Mbyte/S,本体系规划存盘速度为7.8Mbyte/S,能够满意80K以内数据采样率体系的存盘要求。

  5.2 硬盘存储地址问题

  硬盘中数据怎么存储是本规划中另一个要点问题,首要考虑文件存储的地址及文件目录状况。本规划中硬盘文件的存储选用FAT32文件体系,引导扇区记录了文件分配表的地址、个数、巨细、簇的巨细等信息。文件逻辑地址=数据段开端地址+(簇号— RootClus)×SecPerClus;数据段开端地址=BPB地址+RsvdSecCn+FATSz32×NumFATs。)文件目录规划选用短文件名,每个文件名和相关信息占用32字节,每个磁盘第2簇为目录区,因运用短文件名无子目录,所以当每簇为16扇区时目录区共可贮存256个文件名。

  6 完毕语

  本体系数据存储量较大,较传统运用工控机进行数据存储功耗较低,适合于作业环境限制、体系要求具有主动内记功用的工况下。本体系现已应用于某信号收集设备中,实践证明可满意运用要求,体系作业安稳,没有数据溢出现象。当然本体系还有必定缺乏,如不能存储恣意长度数据文件,只能存储40M长度文件,还需进一步完善。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/192170.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部