CN115941102A 审中 一种采用SPI连接MCU和FPGA的控制器间同步通信的方法
技术领域 [0001]本发明属于同步通信和光纤通信技术领域,具体涉及在需要同步信号协调多个控制器联合控制的场景,一种采用SPI连接MCU和FPGA的控制器间同步通信的方法。 背景技术 [0002]MCU(Micro Controller Unit,微控制单元)是嵌入式控制系统的核心,执行测量、控制计算和流程处理等功能,包含C51控制器、X86控制器、ARM控制器等多种类型。 [0003]FPGA (Field-Programmable Gate Array,现场可编程门阵列)具有高主频、多路并行处理特征,与MCU配合使用执行开关量扩展、数据通信、数据处理等功能,可以有效减轻MCU的任务负担,扩大控制器的应用范围。 [0004]开关量是只有0、1两个状态的量,例如开关触点分合状态是开入量,控制开关分断的命令是开出量。MCU的大部分引脚都是复用的,既可以作为开关量,也可以指定给内部集成的外设。使用FPGA后开关量直接连接到FPGA,MCU通过通信间接控制这些开关量,可以极大地节省MCU的引脚资源。 [0005]SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,可以使MCU与各种外围设备以串行方式进行通信以交换信息,该接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线NSS。图1是一种典型连接方式:一个主设备连接一个从设备。SPI通信中NSS信号为低电平时通信有效,此时主设备通过MOSI输出数据,同时通过SCLK引脚为从设备提供时钟信号,从设备通过MISO引脚向主设备发送数据。这种通信方式要求主设备与从设备发送数据长度一致才能正常通信。另外,因为SPI通信是主设备启动和停止的,从设备必须在主设备启动通信前准备好待传送的数据,需要协调好主从设备的时序才能保证通信正常。 [0006]MCU与FPGA通过并口连接比较常见,可以充分发挥FPGA的并行处理能力,MCU和FPGA没有通信延时,MCU可以无延时依次查询通信通道状态或读写通信数据。但并口占用的MCU引脚资源较多,包含16根数据线,20根地址线,加上片选等控制线,最多可能用到41个MCU引脚。 [0007]MCU与FPGA采用SPI连接时占用MCU引脚资源较少,但是MCU和FPGA间SPI间的通信延时导致MCU不能实时查询外部数据或状态。另外如果MCU和FPGA间需要执行变长度SPI数据通信,协调作为从设备的FPGA正确响应也比较复杂。 [0008]MCU在进行实时性要求不高的流程控制时可以启用通信中断以保证通信的可靠性,但进行实时控制时一般通过查询方式进行通信。DMA(Direct Memory Access,直接内存访问)功能是MCU进行数据通信的重要手段,MCU发送数据时只需要设置发送长度,并准备好数据后启动发送即可,接收数据只需要查询是否接收到预定长度的数据,不需要逐字节查询收发,有效降低了MCU的占用率。 [0009]有的嵌入式控制系统需要多个控制器模块协同控制,由同步信号协调控制器之间的光纤通信。以智能整流桥方案为例,控制通道和智能整流桥均配有控制器。两个控制通道一个在线控制,一个备用,用于测量与控制;多个智能整流桥用于并联输出电流。控制通道计算的控制结果通过光纤网络传送到智能整流桥同步执行。各智能整流桥必须按照相同的控制角输出才能保证各整流桥输出电流大小相近。为此提出了励磁系统的同步通信方法(CN201610224359.6一种并联智能整流桥与调节器之间的同步通信方法):光纤通信中智能整流桥是主控制器,由同步信号驱动开始通信周期,向控制通道发送自身状态,控制通道是从控制器,接收到任一主控制器数据后立即回应控制结果,保证各整流桥下一周期按此结果执行。其光纤网络连接如图2所示,任意两个控制器间均有光纤连接。 [0010]FPGA处理光纤通道的数据收发的同时还兼顾控制器的控制开关量,从外部读取开入量状态传送给MCU,并从MCU获取开出数据操作对应引脚输出电平。开关量刷新频率要求不高,不低于同步信号频率即可。 发明内容 [0011]本发明提出采用SPI连接MCU和FPGA的控制器间同步通信的方法,旨在解决采用MCU与FPGA通过SPI连接的控制器之间进行通信时无法实施查询收到外部数据的状态的问题,及MCU和FPGA间需要执行变长度SPI数据通信困难的问题。 [0012]本发明的技术方案为:一种采用SPI连接MCU和FPGA的控制器间实现同步通信的方法,应用于通过光纤进行点对点互联的控制器之间,其中由同步信号驱动数据通信的控制器为主控制器,接收到主控制器信息后应答的为从控制器,参与光纤通信的控制器均为使用SPI连接的MCU和FPGA,两种控制器内部MCU和FPGA的SPI通信中MCU均作为主方,FPGA同时承担光纤通信任务和控制器扩展开关量刷新任务; 主控制器中,同步信号启动MCU通过SPI向FPGA发送光纤通信数据和开出信号,FPGA实现扩展开出并将光纤通信数据发送到其余控制器,同时FPGA将此前通过光纤端口接收的光纤通信数据以及开入信号传送给MCU; 从控制器中,MCU与FPGA通过SPI按照至少5倍同步频率进行短数据帧通信,对开关量定时刷新,并从接收自FPGA的短数据帧中查询光纤端口接收光纤通信的状态,当MCU检测到光纤端口已收到任一主控制器光纤通信数据后,第一个刷新周期通过设置在短数据帧中的控制字通知FPGA将启动光纤通信数据交互,将需要通过光纤网络发送的数据处理成光纤通信数据,第二个刷新周期MCU启动长数据帧通信并将光纤通信数据传送到FPGA,而FPGA将所有接收自其他控制器的光纤通信数据传送给MCU,在接收完MCU发送的光纤通信数据后立即通过各光纤端口送给其余所有控制器。 [0013]进一步地,主控器和从控制器之间均设置收、发两条光纤,每对主控器和从控制器之间均设置收、发两条光纤,每一条光纤设有各自独立的光纤端口,控制器通过不同的光纤端口与不同的控制器多路并联。 [0014]控制器发送数据的某个光纤端口与接收数据的控制器的某个光纤端口,唯一对应。 [0015]进一步地,主控器中,MCU与FPGA进行SPI通信的数据等长,且包括多个等长的端口收发数据和开关量数据,MCU发送给FPGA的数据的开关量数据为开出数据,FPGA发送给MCU的数据的开关量数据为开入数据,端口收发数据包括等字节长度的目标设备ID和自身设备ID数据,多个端口收发数据按照光纤端口序号排列拼接处理成光纤通信数据,开关量数据排列拼接在光纤通信数据的尾部。 [0016]进一步地,主控器中,同步信号启动MCU后的通信过程包括: 同步信号触发MCU中断,由MCU收集待发送的数据和扩展开出数据拼接后通过SPI传送到FPGA,由FPGA实现扩展开出,并将通信数据发送到其余控制器,FPGA通过SPI在接收MCU数据的同时,将扩展开入量数据和已经接收到的其他控制器数据按照各控制器所连接光纤端口序号拼接成一个长数据帧发送到MCU,随后FPGA通过光纤网络将MCU发送的数据传送给其余所有控制器。 [0017]优选地,从控制器中,MCU与FPGA进行SPI通信的数据等长,在短数据帧通信时,FPGA发送到MCU的短数据帧除了开入量外还包含各个光纤端口是否接收到光纤通信数据的状态,MCU输出到FPGA的短数据帧除了开出数据外还包括一个控制字; 需要通过各光纤端口发送的数据等长,在长数据帧通信时,MCU与FPGA进行SPI通信的数据包括多个等长的端口收发数据组成的光纤通信数据。 [0018]MCU与FPGA在长数据帧通信时相互传递的由多个等长的端口收发数据组成的光纤通信数据也称为长数据帧。 [0019]优选地,控制器通过光纤发送的光纤通信数据长度一致,MCU接收到光纤通信数据后,按照数据长度将其分解为各个端口接收的数据,并检测端口与数据中的设备ID是否匹配,目标ID与自身ID是否匹配,不匹配则告警光纤连接错误。 [0020]控制器内部MCU与FPGA采用SPI连接时,在节省MCU的引脚资源的同时也带来了内部通信延时的问题。本发明在主控制器使用了长数据帧通信,兼顾扩展开关量和光纤通信的同时减少了通信次数。在从控制器使用了长短数据帧混合使用的方法,通过短数据帧刷新开关量并查询光纤通信状态,使用长数据帧交换光纤通信数据,解决了MCU作为SPI通信主设备时查询光纤通信状态的问题,最终使得应用SPI连接MCU与FPGA的控制器也可以实现同步通信。 附图说明 [0021]图1为MCU与FPGA的 SPI通信连接方式示意图; 图2为配置了4个智能整流桥的励磁系统的光纤网络示意图; 图3为主控制器通信数据格式示意图; 图4为从控制器用于开关量刷新的通信协议示意图; 图5为从控制器MCU与FPGA通过SPI交互光纤通信数据的通信协议示意图; 图6为同步信号驱动下光纤通信网络各控制器内部和外部通信时序示意图。 具体实施方式 [0022]下面结合说明书附图详细阐述本发明的具体实施方案。 [0023]本发明应用于需要同步信号协调多个控制器联合控制的场景,控制器内部采用SPI连接MCU和FPGA,FPGA同时承担光纤通信任务和扩展开关量刷新任务。由同步信号驱动数据通信的控制器为主控制器,接收到主控制器信息后应答的为从控制器,两种控制器内部MCU和FPGA的SPI通信中MCU均作为主方。 [0024]图2所示的励磁系统为例,智能整流桥作为通信网络的主控制器,在图6所示的通信过程中,由同步信号触发主控制器MCU定时器输入捕获中断,主控制器MCU在定时器中断服务程序中将各个光纤端口待发送的数据组成的光纤通信数据和开出信号拼接成一个长数据帧后启动SPI的DMA发送,主控制器FPGA通过SPI接收长数据帧的同时将此前各个光纤端口接收的数据组成的光纤通信数据以及开入信号拼接成一个与主控制器MCU发送长数据帧等长的长数据帧传送给主控制器MCU。光纤通信中每个主控制器发送的数据长度一致,主控制器内部SPI通信中将光纤通信数据按照收发对应的端口序号排列,并在尾部加上开关量信号。 [0025]例如一个控制器有8个光纤端口,每个端口收发数据长度均为128字节,第一个字节为光纤通信目标设备的ID,第二个字节是提供数据的设备ID。如果一个主控制器设备ID为3,需要发送到设备ID为7的控制器,则其通过光纤端口输出的数据帧第一个字节是7,第二个字节是3。扩展开入信号32个(一个信号占用1位,8位为1字节,共4字节),扩展开出信号32个(4字节),其SPI通信数据格式如图3所示,收发长度均为1028(128×8+4)字节。主控制器FPGA收到主控制器MCU的长数据帧后根据预置长度截取数据,立即通过对应光纤端口发送到其他设备,其他设备指包括从控制器和其他主控制器,各控制器的FPGA通过光纤端口接收数据。 [0026]图2所示的励磁系统中控制通道为通信网络的从控制器,接收到任一主控制器(励磁系统中的智能整流桥)数据后才能将控制量等数据通过光纤网络发送到其他控制器(其他控制器指与此从控制器有光纤连接的控制器,包含智能整流桥和另一控制通道)。 [0027]从控制器的MCU的扩展开关量刷新和数据通信分成两种通信协议,开关量刷新的短帧通信协议中,从控制器的MCU是SPI通信的主方,以至少5倍于同步信号的频率刷新开关量。如图4所示,从控制器的MCU发送的短数据帧包括开出信号和一个用于启动光纤通信数据交互的命令字节,命令字节为1时提示从控制器的FPGA下一次进行光纤通信数据交互;从控制器的FPGA发送的短数据帧包括开入量信号和各个光纤端口是否接收到信息的状态,光纤端口状态字节最低位为1号光纤端口状态,最高位为8号光纤端口状态,状态位为1时表示此端口已接收到数据。其中光纤端口1-7连接的是主控制器,端口8连接的是另一从控制器。 [0028]正常状态下从控制器的MCU执行刷新开关量的短数据帧通信,一旦此从控制器的FPGA发送的光纤端口状态检测到已经收到来自主控制器的数据,从控制器的MCU立即在下一次开关量刷新时设置光纤通信数据交互命令,从控制器的MCU通知从控制器的FPGA即将在SPI执行用于光纤通信数据交互的长数据帧通信。即在发送完光纤通信数据交互命令后的下一个查询周期执行长数据帧通信:从控制器的MCU将需要通过光纤发送的多个等长的端口收发数据按照端口序号依次排列,组合成一个长数据帧,即光纤通信数据。长数据帧通信数据格式如图5所示,从控制器一共8个光纤端口,每个端口收发数据长度均为128字节,按照端口序号排列,从控制器的FPGA收到长数据帧通信命令后立即将光纤通信中所有接收到的端口收发数据按照光纤端口序号拼接成一个长数据帧,在前述的下一个查询周期中接收从控制器的MCU长数据帧的同时传送给从控制器的MCU。长数据帧除了尾部没有开关量数据外,从控制器内部SPI长数据帧通信与主控制器内部SPI通信数据格式一致。从控制器的FPGA通过SPI接收完从控制器的MCU发送的长数据帧后连接通过光纤转发各其余控制器。在同步信号驱动下,结合具体实例光纤通信网络的各个从控制器通信时序如图6所示,从控制器FPGA在光纤端口1收到主控制器光纤通信数据后,在与MCU交互的SPI短数据帧中将其光纤端口状态字节对应位置设置为1;从控制器的MCU在随后的开关量刷新周期中检测到光纤端口状态字节低7位任意一位为1,确认收到主控制器光纤通信数据,并在下一个开关量刷新周期将光纤通信数据交互命令置1,通知从控制器的FPGA准备执行长数据帧通信;从控制器的MCU将需要通过光纤发送的端口收发数据按照端口序号依次排列,组合成一个长数据帧。并在进行长数据帧通信时发送给从控制器FPGA,从控制器的FPGA收到长数据帧通信命令后立即将光纤通信中所有接收到的数据按照光纤端口序号拼接成一个长数据帧,在接收MCU光纤通信数据的同时将通过光纤网络接收到的数据传送给MCU。接收完MCU发送的光纤通信数据后按照长度分解后通过光纤端口传送给其他控制器。 [0029]因为发送光纤通信数据的控制器通过不同的光纤端口与不同的控制器通信,发送光纤通信数据的控制器的光纤端口发送端,与接收光纤通信数据的控制器的光纤端口接收端点对点连接,因此具有一一对应的映射关系,接收到的光纤通信数据都带有目标设备ID和提供数据的设备ID,而MCU也可以通过端口收发数据排列的位置确定数据来源于发送数据的控制器的哪一个光纤端口以及目标ID是否与自身ID一致。光纤网络接线有着确定的顺序,如果MCU检测到数据所带的设备ID与光纤端口不匹配,或者目标ID与自身ID不符,将立即告警“光纤连接错误”,提示调试人员检查光纤接线。 [0030]控制器内部MCU与FPGA采用SPI连接时,在节省MCU的引脚资源的同时也带来了内部通信延时的问题。本发明在主控制器使用了长数据帧通信,兼顾扩展开关量和光纤通信的同时减少了通信次数。在从控制器使用了长短数据帧混合使用的方法,通过短数据帧刷新开关量并查询光纤通信状态,使用长数据帧交换光纤通信数据,解决了MCU作为SPI通信主设备时查询光纤通信状态的问题,最终使得应用SPI连接MCU与FPGA的控制器也可以实现同步通信。 [0031]上文中控制器内部SPI通信是指从控制器的MCU与FPGA在SPI通信中NSS信号为低电平时通信有效,此时MCU通过MOSI向FPGA输出数据,同时通过SCLK引脚为FPGA提供时钟信号,FPGA通过MISO引脚向MCU发送数据。
现在,一起体验智慧芽的产品和服务
自动注册,无需人工审核,即可立即开始查询专利
立即注册
澳门正版图库

AI助手