NI提供了 SPI and I2C Driver API:下载SPI and I2C Driver API - NI
该API使用FPGA数字I / O线与SPI或I2C设备进行通信。
选择数字硬件时,要考虑三个选项:
- NI Single-Board RIO硬件可同时使用SPI和I2C驱动程序。
- NI 9401 C系列模块与SPI驱动程序配合使用效果最佳。
- NI 9402 C系列模块最适合I2C驱动程序。
I2C通信要求设备即时将DIO线置于三态。如果没有外部硬件,9401将无法执行此操作。 NI因此建议将9402用于I2C通信。
该示例已在 PXI-7854R 板上进行了测试,但我希望它也能在其他类似的板上工作(参见 I2C&SPI API 设备兼容性)。目标是使用 SPI 总线从两个温度传感器读取温度,并通过 I2C 总线从陀螺仪和加速度计获取数据。FPGA 托管 I2C 和 SPI 通用层的电路,每个命令均从主机 VI 发送。
在面包板上,一切都是这样接线的:
电源由 FPGA 引脚提供,电压为 3.3V。切勿忘记每条线上的上拉电阻(建议值:4.7k)。
注意:在 ADXL 345 上,要激活 I2C:将 SDO 引脚接地。
硬件和软件要求
传感器:
- LM 74(温度传感器)x2
- ADXL 345(加速度计)
- MPU 6050(陀螺仪)
硬件:
- PXI-7854R (FPGA)
- PXIe-8135(Windows 7下的PXI控制器)
- SCB-68
软件:
- LabVIEW 2018
- FPGA模块
- I2C&SPI API(VIPM 上提供:I2C&SPI API)
- R系列驱动程序(2018版)
实施或执行代码的步骤
首先,使用不同的传感器构建电路,并通过 SCB-68 将它们连接到 FPGA。如果您使用相同的硬件,我建议您使用以下引脚:
SCB-68 针 | FPGA引脚 | 面包板引脚 |
67 | 连接器1/DIO37 | SDA |
33 | 连接器1/DIO36 | SCL |
32 | 连接器1/DIO24 | 味噌 |
65 | 连接器1/DIO33 | 时钟时钟 |
31 | 连接器1/DIO32 | 抽烟 |
63 | 连接器1/DIO29 | CS0 |
29 | 连接器1/DIO28 | CS1 |
57 | 连接器1/DIO22 | 3.3V |
23 | 接地 | 接地 |
电路示例
完成后,打开项目。
项目你如果不使用相同的设备,则需要重新配置FPGA IO:打开FPGA和VI主FPGA.vi
然后,修改您在 FPGA 上选择的引脚的 IO。
配置 SPI 引脚。
配置 I2C 引脚。
注意:您可以看到我修改了 FPGA 引脚的名称,以使程序更易于阅读。
重新配置引脚后,重新编译 FPGA。完成后,您可以运行 VI Final_main.vi。
final_main.vi
注意:要对 FPGA 进行编程,您只需将 I2C Engine.vi 拖放到 FPGA 代码上即可。它将为您制作整个通用层。
使用I2C Engine.vi避免复杂的FPGA编程。您可以为 SPI 执行此操作。