1.一种FPGA和MCU之间的快速通信方法,其特征在于,包括:(1)MCU对SPI外设进行配置,配置SPI传输字长为10bit,空闲时钟极性为高电平,在SCK的第二个边沿采样;(2)MCU计算要发送的数据包的校验码,放在数据包的最后,生成原始数据包;(3)将原始数据包经8B/10B编码为10bit码;(4)将10bit码的数据包增加包头和包尾,打包成经过编码的数据包;(5)MCU将经过编码的数据包通过MOSI发送给FPGA;FPGA成功接收到报文并通过8B/10B报文解码和接收模块解码为原始数据,根据数据包的命令准备相应的应答数据,启动增强型SPI从机模块,等待MCU读取;(6)编码数据包发送完毕,MCU检查MISO的电平,根据MISO的电平判断FPGA的工作状态;(7)根据FPGA的工作状态执行FPGA与MCU的握手操作,FPGA发送应答数据;(8)MCU对SPI外设进行重新配置,配置SPI传输字长为8bit,空闲时钟极性为高电平,在SCK的第二个边沿采样;(9)MCU通过MISO读取FPGA的应答数据;包括,FPGA在S_SEND状态下,以MOSI数据线的信号为SPI时钟,将响应数据通过MISO数据线移出,MCU发送固定的数据0b01010101,通过SPI外设将MISO数据线上的数据读取;(10)跳转到步骤(1),开始进行下一次传输。
2.根据权利要求1所述的一种FPGA和MCU之间的快速通信方法,其特征在于,还包括将FPGA和MCU通过2个数据线连接的步骤,配置MISO为SPI的主机输入,从机输出信号;配置MOSI为SPI的主机发送,从机接收信号;所述MCU为SPI的主机,FPGA为SPI的从机。
3.根据权利要求2所述的一种FPGA和MCU之间的快速通信方法,其特征在于,所述FPGA包括8B/10B报文解码和接收模块,命令解释和执行模块,增强型SPI从机模块和外部接口模块;所述8B/10B报文解码和接收模块用于接收MOSI信号线上发送的码流,将码流进行8B/10B解码,并校验报文的正确性;所述命令解释和执行模块用于解析8B/10B报文解码和接收模块解码后的报文,得到命令和参数,并准备好响应数据;所述增强型SPI从机模块用于将命令解释和执行模块准备好的响应数据发送至外部接口模块;所述外部接口模块用于将数据经由MISO发送至MCU。
4.根据权利要求1所述的一种FPGA和MCU之间的快速通信方法,其特征在于,所述将10bit码的数据包增加包头和包尾,打包成经过编码的数据包,包括:采用8B/10B编码的特殊字符K28.7和K29.7作为数据包的包头,采用特殊字符K28.7和K27.7作为数据包的包尾;将10B编码的高位补0后得到包头的编码为0b0000_0000_0111_1100,0b0000_0000_0101_1101,包尾的编码为0b0000_0000_0111_1100,0b0000_0000_0101_1011。
5.根据权利要求1所述的一种FPGA和MCU之间的快速通信方法,其特征在于,所述MCU使用DMA将经过编码的数据包发送给FPGA。
6.根据权利要求1所述的一种FPGA和MCU之间的快速通信方法,其特征在于,所述根据MISO的电平判断FPGA的工作状态,包括:S_WAIT和S_CMD状态下,MISO保持为高电平;S_SEND状态下,MISO为低电平;所述FPGA的工作状态包括报文接收,S_WAIT状态,S_CMD状态和S_SEND状态;所述报文接收和其余状态并行进行,FPGA的8B/10B报文解码和接收模块一直对MOSI数据线上的码流进行接收和解码;所述S_WAIT状态下,FPGA等待8B/10B报文解码和接收模块接收到新的报文,如果接收到报文,对报文进行校验,如果校验通过,跳转到S_CMD状态,否则停留在S_WAIT状态;所述S_CMD状态下,FPGA的命令解释和执行模块对接收到的报文进行校验,如果命令格式错误或者命令不支持,跳转回S_WAIT状态,否则,响应命令,将命令的响应数据准备好,等待MCU来读取,然后跳转到S_SEND状态;所述S_SEND状态下,FPGA的增强SPI从机模块以MOSI数据线的信号为SPI时钟,将响应数据通过MISO数据线移出,MCU通过SPI外设将MISO数据线上的数据读取,然后跳转到S_WAIT状态;如果接收到新的报文,则直接放弃本次响应,进入S_WAIT状态。
7.根据权利要求6所述的一种FPGA和MCU之间的快速通信方法,其特征在于,所述根据FPGA的工作状态执行FPGA与MCU的握手操作,包括:S_WAIT状态下,MISO保持为高电平,MCU检测到MISO为高电平,发送数据包到FPGA,FPGA没有成功接收到数据包或者数据包的命令解析失败,保持MISO为高电平,继续等待,直到MISO为低电平;进入S_SEND状态,MISO变为低电平,MCU读取响应数据,或者重新发送数据包,执行新的命令;如果MCU完成了所有响应数据的读取,跳转到S_WAIT状态。
8.根据权利要求7所述的一种FPGA和MCU之间的快速通信方法,其特征在于,如果等待超时,则进行数据包重传。