偶的一个项目里面用到了P89V51,使用P89V51的P0口用软件模拟SPI接口和FPGA(EP2C6T144)通信。由于P89V51的供电电压是+5V,而FPGA的电压是+3.3V,所以利用P89V51的PO口是开漏端口的特性,外接10K上拉电阻,上拉到3.3V。硬件连接如下: P89V51 FPGA P0.4 SPI_CLK 全局时钟输入脚 P0.5 SPI_MOSI I/O脚 P0.6 SPI_MISO I/O脚 P0.7 SPI_CS I/O脚
按照上述连接MCU无法和FPGA通信(上拉电阻改为1K,2K,4.7K,10K,20K,50K都不行),但是,只要将单片机的SPI_CLK脚换到除了P0口以外的任何一个I/O引脚上,就可以正常通信,经过3天的连续疲劳测试,没有任何通信错误发生。比如说:将SPI_CLK脚从P0.4换到P1.0上,MCU端的程序只是将SPI_CLK脚定义到P1.0上 #define SPI_CLK P1.0 // 从P0.4改为P1.0 其余的MCU和FPGA的程序都不做任何改变,就可以正常通信。
各位大侠,这是怎么回事???希望各位大侠尽快回复 |