????????NI提供了?SPI and I2C Driver API:下载SPI and I2C Driver API - NI
? ? ? ? 该API使用FPGA数字I / O线与SPI或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 引脚接地。
????????
?传感器:
硬件:
软件:
首先,使用不同的传感器构建电路,并通过 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 执行此操作。