fifo存储器芯片
A. 数据采集时,如何动态创建缓冲区存数据
第二节 数据传输与数据处理的独立性
为了提高数据吞吐率以及实现实时数据处理(如随时取数、随时暂停设备、随时开始传输、随时存盘、随时显示波形、随时设备控制输出等功能), 我们采用一种最新、最灵活的设计思想,即数据采集传输和数据处理相独立的思想。即用我们所创建的设备对象在Windows系统空间管理一个一级强制性缓冲队列,该缓冲队列可支持128K字(即256K字节)的系统内存空间Buffer,该队列采用先进先出策略和动态链表等技术来更高效地管理这个Buffer。这个队列缓冲与用户数据缓冲区相独立,设备对象在后台负责数据采集和传输,将其数据映射到相应的队列缓冲单元,且维持一个动态链表,并向用户发送相应的通知消息。而用户则不必知道内部的任何复杂操作,而只须在这个消息到来时,使用ReadDeviceIntAD函数读一批AD数据或几批即可。重要的是,在这个消息没有到来时,用户代码不必花任何CPU时间去轮询等待,而用户正好利用这段空闲时间去处理更多的任务。即轻松实现了数据采集与数据处理的同步并发进行。这将是最高效的。这个队列缓冲跟先进先出存储器FIFO芯片功能基本一致,只不过这个缓冲是一个被软件仿真的FIFO存储器。使用这项技术的最大优点就是完全解决了在多任务环境中实现高速连续采集数据难的问题。特别是整个系统突然繁忙的时候,比如用户在高速采集数据或实时存盘时,偶而移动窗口或改变窗口大小或弹出对话框时,这项技术足以保证所采集的数据完整无缺。如果用户希望应用程序有更好的处理能力和克服操作系统的陡然忙碌对连续数据采集的影响,可以考虑在用户模式中再使用二级缓冲队列和相应的缓冲区链表技术。具体细节请参考NT下的中断演示程序。(目前在Window NT中完全支持此项技术,在以后的Win2000和WinXP版本中应该会进一步提供)。
第三节 连续不间断大容量采集存盘
在虚拟仪器、实验室数据分析、医疗设备、记录仪等诸多研究和应用领域中,对数据的要求很高,一方面数据容量较大,如几百兆甚至几仟兆,另一方面采样速度都较高,如200KHz,300KHz等,更重要是要求在高速长时间的采集数据过程中,不能丢掉一个点,必须全部存入硬盘,同时还要进行一些点的抽样分析,这在DOS环境中实现起来就有较大的难度,就更别说在Windows这样的多任务环境中(对于Windows多任务机制请参阅有关Windows手册)。大家知道Windows的各应用程序总是不断地被任务调度器调度,循环处在睡眠、排队、就绪、触发运行等状态中。Win95任务之间的切换密度至少大于1毫秒,那么如果要以300KHz频率采样(即每3.3微秒就得传输一个数据),很显然有大量的数据在传输中由于任务之间的切换而被丢失掉。这就是基于Windows客户程序在传统模式下,高速连续采集传输数据时所具有的局限性。为了突破这种局限性,就得采用别的办法,如非客户程序、内核程序、驱动程序(如VxD、微代码)等,再加上我们所掌握的新技术,如内存映射、直接写盘技术以及独有的设计思想便可以很好的解决这些问题。从1998年9月开始,已有部分用户实际使用,反映良好。我们自己也经过全面测试,比如在Windows95下使用无FIFO芯片的BH5104模板,实际结果是:以200KHz频率,双通道采集正弦波且存盘,写满整个硬盘近4000兆数据,其时间长达6个小时左右,随后再读盘回放磁盘数据,整个波形没有发现任何串道、断点和畸形状。当然PCI2303等PCI设备同样具这样的性能。它不仅具有一级硬件缓冲FIFO(其缓冲深度可调1KB、2KB、4KB、8KB、16KB等),同样具有第二节中叙述的二级强制队列缓冲,这个软件防真的缓冲比一级缓冲要大几十倍。如果用户需要的话,可以在应用程序中再建立循环式用户缓冲,即可实现高速不间断大容量采集存盘功能。
第四节 后台工作方式
我们的驱动程序为用户提供了后台工作方式进行数据传输,这样可以保证您的前台应用程序能实时高效的进行数据处理。后台方式的特点是在进行数据采集和传输过程中不占用客户程序的任何时间,当采集的数据长度达到客户指定的值时便触发客户事件,客户程序接受该事件便开始进行数据处理。在数据处理的同时,驱动程序依然在进行下一批数据的传输,即实现了并行操作,极大的提高了数据的吞吐量和计算机系统的整体处理能力。
第五节 与设备无关性
通过总结各数据采集卡的的共同特点,设计了基本一致的接口方式,可以让您的应用程序不仅能适应您所购买的我公司第一种产品,同时也能不经修改地适应我公司的其他同类产品(只有极少数设备需要极少的修改,其修改的比例基本不超过5%)。所以可以保证您的应用程序在我们的硬件产品基础上极为容易地进行功能和应用扩展,节省您的大部分软件投资,极大的缩短工程开发周期。
第六节 驱动程序的坚固性
我们的驱动程序都是经过严密彻底的测试和验证,并经部分用户试用之后,确认没有任何问题后才予以正式发行的,所以当您使用起来应该有十足的安全感。
第七节 驱动程序特点
由于我们的驱动程序均采用动态虚拟技术(Windows 95),微内核代码(Windows NT)因此可动态装载和卸载,而且可以重入,即可实现多道任务同时访问硬件设备的功能。这样可以保证您的软硬件资源可以被充分有效的利用。特别是在Windows NT下,采用队列突发机制,可以实现几十道线程序同时访问一设备的功能。
B. 什么是存储器
存储器(Memory)是现代信息技术中用于保存信息的记忆设备。其概念很广,有很多层次,在数字系统中,只要能保存二进制数据的都可以是存储器;在集成电路中,一个没有实物形式的具有存储功能的电路也叫存储器,如RAM、FIFO等;在系统中,具有实物形式的存储设备也叫存储器,如内存条、TF卡等。计算机中全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。它根据控制器指定的位置存入和取出信息。有了存储器,计算机才有记忆功能,才能保证正常工作。计算机中的存储器按用途存储器可分为主存储器(内存)和辅助存储器(外存),也有分为外部存储器和内部存储器的分类方法。外存通常是磁性介质或光盘等,能长期保存信息。内存指主板上的存储部件,用来存放当前正在执行的数据和程序,但仅用于暂时存放程序和数据,关闭电源或断电,数据会丢失。
存储器的分类特点及其应用
在嵌入式系统中最常用的存储器类型分为三类:
1.随机存取的RAM;
2.只读的ROM;
3.介于两者之间的混合存储器
1.随机存储器(Random Access Memory,RAM)
RAM能够随时在任一地址读出或写入内容。 RAM的优点是读/写方便、使用灵活;
RAM的缺点是不能长期保存信息,一旦停电,所存信息就会丢失。 RAM用于二进制信息的临时存储或缓冲存储
2.只读存储器(Read-Only Memory,ROM)
ROM中存储的数据可以被任意读取,断电后,ROM中的数据仍保持不变,但不可以写入数据。
ROM在嵌入式系统中非常有用,常常用来存放系统软件(如ROM BIOS)、应用程序等不随时间改变的代码或数据。
ROM存储器按发展顺序可分为:掩膜ROM、可编程ROM(PROM)和可擦写可编程ROM(EPROM)拦耐。
3. 混合存储器
混合存储器既可以随意读写,又可以芦族在断电后保持设备中的数据不变。混合存储设备可分为三种:
EEPROM NVRAM FLASH
(1)EEPROM
EEPROM是电可擦写可编程存储设备,与EPROM不同的是EEPROM是用电来实现数据的清除,而不是通过紫外线照射实现的。
EEPROM允许用户以字节为单位多次用电擦除和改写内容,而且可以直接在机内进行,不需要专用设备,方便灵活,常用作对数据、参数等经常修改又有掉电保护要求的数据存储器。
(2) NVRAM
NVRAM通常就是带有后备电池的SRAM。当电源接通的时候,NVRAM就像任何其他SRAM一样,但是当电源切断的时候,NVRAM从电池中获取足够的电力以保持其中现存的内容。
NVRAM在嵌入式系统中使用十分普遍,它最大的缺点是价格昂贵,因此,它的应用被限制于存储仅仅几百字节的系统关键信息。
(3)Flash
Flash(闪速存储器,简称闪存)是不需要Vpp电压信号的EEPROM,一个扇区的字节可以在瞬间(与单时钟周期比较是一个非常短的时间)擦除。
Flash比EEPROM优越的方面是,可以同时擦除许多字节,节省了每次写数据前擦除的时间,但一旦一个扇区被擦除,必须逐个字节地写进去,其写入时间很长。
存储器工作原理
这里只介绍动态存储器(DRAM)的工作原理。
工作原理
动态存储器每片只有一条输入数据线,而地址引脚只有8条。为了形成64K地址,必须在系统地址总线和芯片地址引线之间专门设计一个地址形成电路。使系统地址总线信号能分时地加到8个地址的引脚上,借助芯片内部的行锁存器、列锁存器和译码电路选定芯片内的存储单元,锁存信号也靠着外部地址电路产生。
当要从DRAM芯片中读出数据时,CPU首先将行地址加在A0-A7上,而后送出RAS锁存信号,该信号的下降沿将地址锁存在芯片内部。接着将列地址加到芯片的A0-A7上,再送CAS锁存信号,也是在信号的陪衡弊下降沿将列地址锁存在芯片内部。然后保持WE=1,则在CAS有效期间数据输出并保持。
当需要把数据写入芯片时,行列地址先后将RAS和CAS锁存在芯片内部,然后,WE有效,加上要写入的数据,则将该数据写入选中的存贮单元。
存储器芯片
由于电容不可能长期保持电荷不变,必须定时对动态存储电路的各存储单元执行重读操作,以保持电荷稳定,这个过程称为动态存储器刷新。PC/XT机中DRAM的刷新是利用DMA实现的。首先应用可编程定时器8253的计数器1,每隔1⒌12μs产生一次DMA请求,该请求加在DMA控制器的0通道上。当DMA控制器0通道的请求得到响应时,DMA控制器送出到刷新地址信号,对动态存储器执行读操作,每读一次刷新一行。