基于NI USB-6210的数据采集与SPI通信

在现代电子设计中,数据采集和通信是不可或缺的一部分。本文将介绍如何使用National Instruments的USB-6210数据采集设备(DAQ)来实现对一组设备的测量,并利用其数字输出和输入线路来实现测试夹具的命令与控制。

NI USB-6210数据采集设备

NI USB-6210是一款功能强大的数据采集设备,它拥有4个数字输入和4个数字输出端口。本文的目标是实现一个四线SPI(串行外设接口)总线,其中DAQ作为主设备,同时配置两个从设备选择线。在研究SPI的过程中,发现了一篇非常有用的文章,以及一些源代码示例,这些示例被成功地适配到了一个C#类中,以便在项目中使用。

这个SPI类提供了构造函数的重载,允许指定输出端口(四个输出线路)、输入线路、时钟相位和时钟极性。此外,该类还公开了一些属性和方法。

构造函数提供了多种重载方式,允许用户根据需要指定输出和输入线路,以及时钟脉冲的极性和相位。

类中定义了一些方法,例如Dispose()用于显式清理类使用的非托管资源,Transfer(byte inByte)用于同时向总线写入一个字节并从总线读取一个字节。

类中定义了一些属性,如SCKPhase和SCKPolarity用于获取或设置时钟边缘,SS0和SS1用于获取或设置从设备选择线的状态,Timeout用于获取或设置读写操作的超时时间。

类中定义了ClockPolarity和ClockPhase两个枚举,分别用于指定SCK线在字节传输前后的电平,以及从设备在时钟的哪个边缘上锁存输入数据位和移位输出数据位。

这个类使用了多个NI-DAQmx C API调用。这些调用被封装在一个本地包装类中,包含了PInvoke签名,将其与项目一起提供。

static void Main(string[] args) { try { daqSPI spi = new daqSPI( "Dev1/port1", "Dev1/port0/line3", daqSPI.ClockPolarity.ONE, daqSPI.ClockPhase.LOGICAL_ZERO); byte[] data = ASCIIEncoding.Default.GetBytes( "It was a dark and stormy night; the rain fell in torrents, except at " + "occasional intervals, when it was checked by a violent gust of wind " + "which swept up the streets (for it is in London that our scene lies), " + "rattling along the house-tops, and fiercely agitating the scanty flame " + "of the lamps that struggled against the darkness. Through one of the " + "obscurest quarters of London, and among haunts little loved by the " + "gentlemen of the police, a man, evidently of the lowest orders, was " + "wending his solitary way."); spi.SS0 = true; // Selects SS0 deselects SS1 foreach (byte b in data) { Console.Write((char) spi.Transfer(b)); } Console.WriteLine(); } catch (Exception ex) { Console.WriteLine("DAQmx Error: {0}", ex.ToString()); } Console.WriteLine("End of program, press Enter key to quit"); Console.Read(); }

尽管从设备0并不理解优美的诗句,但Tektronix TDS 420示波器捕捉到了正在传输的一个字节。

在进行数据传输时,可以通过示波器来观察数据线、时钟线、SS0和SS1的状态。通过这种方式,可以确保数据传输的正确性。

为了测试SPI类,构建了一个演示程序。这个程序展示了如何使用NI USB-6210实现SPI通信。在测试过程中,简单地将MOSI线循环到MISO线上。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485