图 <一> 数据采集系统正面图
图 <二>数据采集系统背面图
本数据采集系统是基于ARM9和FPGA通信实现的采集系统。系统由12bit高精度的AD574作为数据采样输入。采样触发电平可以远程设置。数据通过AD采样,然后存储到与FPGA相连接的SDRAM中。在采样完成后,将SDRAM里面的数据保存到通fpga接口的128M的nandflash中去。同事保存的数据可以通过USB控制芯片FT232将nandflash里面的数据读取出来。在fpga EP2C20中,内建一个64K 16bit宽的FIFO,通过控制器将SDRAM里面的数据,压进FIFO。FIFO的外部接口通ARM9 AT91SAM9G10接口。通过EBI接口中的SMC控制器,控制对FPGA中的SRAM进行大量数据的读写。本系统要求一次性能读出8M的数据。系统设计保证能读取32M数据。读取到ARM中的数据会保存在SDRAM中。同时会将数据通过USB WIFI传输到远端的PC机上去。
其中本系统的重点应该是,FPGA和ARM9通信过程中的驱动设计。硬件设计过程中考虑的是 NWR 、NRD、 NCS0、AD2~AD9、D0~D15。在驱动设计过程中,肯能会遇到总线挂起的问题。遇到这类型的问题,首先考虑的是上电顺序问题。如果特别是完成了FPGA中代码设计后,讲FPGA代码下载到ram中,需要是上电下载。这个过程可能导致的,总线挂起。我首先想到的解决问题就是上单顺序的问题。我割掉了板子上面的核心板的供电。结果问题还是没有解决。最后发现两个问题,第一是总线总的数据总线设计问题。对于数据总线应该是可控的模式,在写有效的过程才能输出电平。平时应该为三态。解决完这个问题后,后面还是存在。最后发现NCS0 必须应用。用于保证总线时序正确。
大量数据的读取,本系统设计由于是数据采集系统。所以存在大量数据读写的问题。本来考虑的是连续读写的,结果发现地址偏移和系统偏移都麻烦。最后决定设计过程中改为FIFO做数据缓冲。本思路应用起来相当方便,类似在系统中建立了一个数据管道。sdram能存储多达的数据,这边就能读出多达的数据。使用非常方便。
将大量数据写到ARM9的linux系统的动态内存中,linux内核使用的是linux-2.6.30,然后u-boot使用的是 u-boot1.3.4文件系统使用的是yaffs2。将驱动和应用写进去,通过动态内存分配的方式,分配8M大小的空间,将数据读写出来。最后通过USBwifi传送出去。本系统用于多点远程数高精度数据采集。AD可以换成16bit。