用于多模块系统的在线升级方法及旋转导向系统
技术领域
本发明涉及嵌入式软件在线升级的技术领域,尤其涉及一种用于多模块系统的在线升级方法及旋转导向系统。
背景技术
目前,嵌入式处理器最常用的软件升级方式是通过JTAG接口进行软件程序更新,该种方式由于JTAG接口信号线多,因此通常需要露出电路板才能达到升级程序的目的。针对旋转导向系统这种拆装难度大,且对密封性要求高的石油钻井仪器而言,采用此种软件升级方式进行旋转导向系统各模块的软件升级会导致操作不方便、效率低且无法保证仪器的密封性的问题。
发明内容
本发明提供了一种用于多模块系统的在线升级方法及旋转导向系统,能够解决现有技术中软件升级方法操作不方便、效率低且无法保证仪器的密封性的技术问题。
根据本发明的一方面,提供了一种用于多模块系统的在线升级方法,多模块系统具有多个模块,各个模块中均具有BootLoader程序、EEPROM存储器以及FLASH存储器,在线升级方法包括:将多模块系统通过单总线与上位机连接;上位机自动向多模块系统中的各个模块发送升级软件指令;各个模块接收升级软件指令并修改其相对应的EEPROM存储器中的存储值,存储值用于指示多个模块中待升级程序的模块的位置;将多模块系统断电并重新上电;各个模块运行各自的BootLoader程序并读取其相对应的EEPROM存储器中的存储值,判断多个模块中的待升级程序的模块;其中,针对待升级程序的模块,待升级程序的模块中的BootLoader程序接收升级程序数据并将升级程序数据写入相对应的FLASH存储器中;针对其他无需升级的模块,擦除无需升级的模块中的EEPROM存储器中的存储值并等待待升级程序的模块升级程序。
进一步地,各个模块接收升级软件指令并修改其相对应的EEPROM存储器中的存储值之后,在线升级方法还包括:各个模块接收到升级软件指令后,向上位机发送读取结果,上位机校验各个模块发送的读取结果,当读取结果不正确时,上位机报错并重新发送升级软件指令直至发送成功。
进一步地,待升级程序的模块中的BootLoader程序接收升级程序数据并将升级程序数据写入相对应的FLASH存储器中具体包括:待升级程序的模块中的BootLoader程序依次接收升级程序数据并将接收到的升级程序数据进行缓存;当缓存的升级程序数据达到设定存储量后,BootLoader程序将升级程序数据依次写入相对应的FLASH存储器中。
进一步地,待升级程序的模块中的BootLoader程序依次接收升级程序数据并将接受到的升级程序数据进行缓存具体包括:待升级程序的模块中的BootLoader程序依次接收升级程序数据,BootLoader程序每接收一帧数据,需要检查数据帧的同步头、目的地址和源地址,并核对数据帧的校验字节。
进一步地,BootLoader程序核对数据帧的校验字节具体包括:BootLoader程序核对数据帧的校验字节,当校验字节不正确时,将数据帧丢弃;当校验字节正确时,将数据帧返回至上位机,上位机验证发送的数据帧与接收的数据帧是否相同,如果发送的数据帧与接收的数据帧不相同,则上位机继续发送数据帧;如果发送的数据帧与接收的数据帧相同,则上位机发送下一帧的数据帧。
进一步地,BootLoader程序将升级程序数据依次写入相对应的FLASH存储器中具体包括:BootLoader程序判断键值,并获取应用起点;BootLoader程序对接收的数据块进行处理,并按照数据块中的地址信息存储到相应的位置。
进一步地,各个模块均还包括处理器,FLASH存储器为处理器的片内存储器,其中,键值与处理器的型号相匹配。
进一步地,在待升级程序的模块中的BootLoader程序接收升级程序数据之前,在线升级方法还包括:针对待升级程序的模块,等待设定时间以擦除FLASH存储器内的数据。
根据本发明的另一方面,提供了一种旋转导向系统,旋转导向系统包括多个模块,多个模块使用如上所述的在线升级方法进行程序升级。
应用本发明的技术方案,当系统某模块需要升级程序时,只需通过上位机对系统的各模块做简单的设置,即可通过单总线升级程序,操作简单、方便,不需拆装,有效地保证了产品的密封性。再者,本发明的在线升级方法通过编写具有防数据错误功能的BootLoader程序并在应用程序中增加与BootLoader的交互,从而将升级的应用程序准确、方便地通过单总线烧写到多模块系统的任意模块的FLASH存储器中。本发明的在线升级方法相对于现有技术而言,操作更加方便,不需要拆装仪器,在升级程序的同时有效的保证了系统的密封性,并节省了时间。
附图说明
所包括的附图用来提供对本发明实施例的进一步的理解,其构成了说明书的一部分,用于例示本发明的实施例,并与文字描述一起来阐释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了根据本发明的具体实施例提供的用于多模块系统的在线升级方法的流程框图;
图2示出了根据本发明的具体实施例提供的BootLoader程序接收获取有效数据的流程图;
图3示出了根据本发明的具体实施例提供的BootLoader程序向FLASH存储器中烧写程序的流程图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
如图1所示,根据本发明的具体实施例提供了一种用于多模块系统的在线升级方法,该多模块系统具有多个模块,各个模块中均具有BootLoader程序、EEPROM存储器以及FLASH存储器,该在线升级方法包括:将多模块系统通过单总线与上位机连接;上位机自动向多模块系统中的各个模块发送升级软件指令;各个模块接收升级软件指令并修改其相对应的EEPROM存储器中的存储值,存储值用于指示多个模块中待升级程序的模块的位置;将多模块系统断电并重新上电;各个模块运行各自的BootLoader程序并读取其相对应的EEPROM存储器中的存储值,判断多个模块中的待升级程序的模块;其中,针对待升级程序的模块,待升级程序的模块中的BootLoader程序接收升级程序数据并将升级程序数据写入相对应的FLASH存储器中;针对其他无需升级的模块,擦除无需升级的模块中的EEPROM存储器中的存储值并等待待升级程序的模块升级程序。
应用本发明的在线升级方法,当系统某模块需要升级程序时,只需通过上位机对系统的各模块做简单的设置,即可通过单总线升级程序,操作简单、方便,不需拆装,有效地保证了产品的密封性。再者,本发明的在线升级方法通过编写具有防数据错误功能的BootLoader程序并在应用程序中增加与BootLoader的交互,从而将升级的应用程序准确、方便地通过单总线烧写到多模块系统的任意模块的FLASH存储器中。本发明的在线升级方法相对于现有技术而言,操作更加方便,不需要拆装仪器,在升级程序的同时有效的保证了系统的密封性,并节省了时间。
作为本发明的一个具体实施例,多模块系统包括旋转导向系统,其中,旋转导向系统的各个模块均通过RS485转单总线电路都挂接在单总线上,单总线由于可以同时传输电力和信息,且只有两根线,因此适合于旋转导向系统各模块互联并作为模块对外的电气接口。现在很多的嵌入式处理器除了支持从FLASH加载程序外,还支持从SPI、SCI、IIC等外设接口加载程序,SCI可以转换成RS485,然后通过RS485转单总线电路实现从单总线加载程序的硬件配置。然而,由于SCI是全双工的通信方式,而RS485和单总线是半双工的通信方式,RS485转单总线电路会有一定的误码率,而且嵌入式处理器出厂时不支持RS485的程序加载方式,所以通过编写具有防数据错误功能并支持半双工通信功能的BootLoader程序能够完成从单总线加载程序。另外,由于系统各模块都挂接在单总线上,所以需要各模块的BootLoader程序和应用程序交互,确定给哪个模块更新应用程序。
基于此,本发明的在线升级方法在不改变原有系统硬件的条件下,通过编写BootLoader程序并在应用程序中增加与BootLoader程序的交互,能够实现系统任意模块通过单总线升级应用程序的功能。
进一步地,在本发明中,各个模块均还包括处理器,FLASH存储器为处理器的片内存储器,在处理器中编写具有防数据错误功能的BootLoader程序。作为本发明的一个具体实施例,多模块系统选用在工业控制领域广泛使用的TI公司的数字信号控制器TMS320F2808作为所有模块的处理器,使用EEPROM作为BootLoader程序和应用程序交互的媒介。如图1所示,各个模块的应用程序接收上位机软件发送的升级软件指令并修改EEPROM相应地址的存储值,断电并重新通电后各模块先运行BootLoader程序读取EEPROM该地址的存储值,判断是否需要升级程序、需要升级哪个模块的程序,然后程序跳转到相应的入口。当不需要升级本模块程序时,擦除EEPROM该地址的值并等待其他模块升级程序。当需要升级本模块程序时,接收并分析数据,将有效数据解析成二进制代码写入FLASH相应的空间中。
进一步地,在本发明中,为了保证模块程序更新的正确性,在各个模块接收升级软件指令并修改其相对应的EEPROM存储器中的存储值之后,在线升级方法还包括:各个模块接收到升级软件指令后,向上位机发送读取结果,上位机校验各个模块发送的读取结果,当读取结果不正确时,上位机报错并重新发送升级软件指令直至发送成功。
作为本发明的一个具体实施例,当旋转导向各模块软件运行在应用程序时,上位机软件选择仪器串上有哪些模块,然后上位机根据配置依次向这些模块发送指令。每个模块都在EEPROM存储器里用两个字节的16位表示16个不同的模块,在接收到上位机发送的升级程序指令后,需要升级程序的模块所代表的位置为‘1’。然后将这两个字节返回给上位机,由上位机验证是否正确。16个位,每次只能有一位为1,其余全为0,否则,上位机报错,并自动重新设置,直到全部设置成功。断电并给仪器重新通电后,上位机软件选择待编程的模块和待更新应用程序的二进制文件,启动编程,直至编程结束。
为了对本发明有进一步地了解,下面结合图1对本发明的在线升级方法进行详细说明。
作为本发明的一个具体实施例,旋转导向系统包括16个模块,每个模块均包括TMS320F2808处理器、BootLoader程序、EEPROM存储器以及处理器的片内FLASH存储器,首先将该旋转导向系统通过测试盒与上位机连接,然后旋转导向系统上电,各个模块工作在用户程序下,此时各个模块均可接收设置指令。接着打开上位机端的应用程序,设置系统中所包含的模块,上位机自动向16个模块分别发送升级模块的指令并修改各个模块中的EEPROM存储器中的相应地址的存储值。其中,每个模块的EEPROM存储器中都用两个字节的16位表示16个不同的模块,在接收到升级程序指令后,需要升级程序的模块所代表的位置为“1”,其余全为0。每个模块的EEPROM存储器存储升级程序指令后对指令进行读取并返回读取结果,上位机校验各个模块发送的读取结果,当读取结果不正确时,上位机报错并重新发送升级软件指令直至发送成功。
然后,将旋转导向系统断电并重新上电,16个模块分别运行各自的BootLoader程序并读取其相对应的EEPROM存储器中的存储值,判断多个模块中的待升级程序的模块。其中,如果读取存储值之后确定第5个模块需要升级,那么此时等待10秒以用于将第5个模块中的FLASH存储器中的内容擦除并开始启动编程。第5个模块中的BootLoader程序接收升级程序数据并将升级程序数据写入相对应的处理器的片内FLASH存储器中。针对第1-4,6-16模块而言,将这些无需升级程序的模块中的EEPROM存储器中的存储值擦除并等待第5个模块升级程序。
进一步地,在本发明中,待升级程序的模块中的BootLoader程序接收升级程序数据并将升级程序数据写入相对应的FLASH存储器中具体包括:待升级程序的模块中的BootLoader程序依次接收升级程序数据并将接受到的升级程序数据进行缓存;当缓存的升级程序数据达到设定存储量后,BootLoader程序将升级程序数据依次写入相对应的FLASH存储器中。
如图2所示,待升级程序的模块中的BootLoader程序依次接收升级程序数据并将接受到的升级程序数据进行缓存具体包括:待升级程序的模块中的BootLoader程序依次接收升级程序数据,BootLoader程序每接收一帧数据,需要检查数据帧的同步头、目的地址和源地址,并核对数据帧的校验字节。具体地,BootLoader程序核对数据帧的校验字节具体包括:BootLoader程序核对数据帧的校验字节,当校验字节不正确时,将数据帧丢弃;当校验字节正确时,将数据帧返回至上位机,上位机验证发送的数据帧与接收的数据帧是否相同,如果发送的数据帧与接收的数据帧不相同,则上位机继续发送数据帧;如果发送的数据帧与接收的数据帧相同,则上位机发送下一帧的数据帧。
作为本发明的一个具体实施例,如图2所示,采用旋转导向系统作为多模块系统,其中,在上位机完成对仪器串设置后,将旋转导向系统重新上电。各模块首先进入BootLoader程序,此程序先读取EEPROM存储器里的2个字节,检查是否要升级本模块的应用程序,如果不需要,则清零EEPROM存储器的2个字节,退出并等待其他操作。如果需要升级本模块的应用程序,则进入串口中断,读取串口接收单总线转RS485的数据,使用完善的通信协议和严谨的逻辑判断丢弃无效与错误的数据。处理器每接收一帧数据,需要检查数据帧的同步头、目的地址和源地址,并核对校验字节,如果不正确则不处理,上位机等待一段时间后重发同一帧。如果校验字节正确则记录帧号,然后将接收到的数据帧返回给上位机。然后上位机验证发送的数据帧和接收的数据帧是否相同,如果不相同,则继续发送刚才的数据帧,相同则发下一帧。模块的处理器只有接收到校验字节正确的下一帧数据时,才将上一帧的有效数据缓存起来,等待进一步处理。
具体地,如图2所示,用Com0_Logic表示不同的状态,在进入串口中断,读取串口接收单总线转RS485的数据后,首先通过Com0_Logic是否等于零,如果Com0_Logic==0,则判断是否接收到了正确的同步头,如果接收到了正确的同步头,那么此时Com0_Logic==1,并退出,等到接收下一个数据帧时,直接进入Com0_Logic==1的步骤,以判断目的地址和源地址是否正确。如果未接收到正确的同步头,那么跳出,此时Com0_Logic仍等于0,然后接收下一个数据帧,继续判断是否接收到了正确的同步头。当Com0_Logic==1时,判断目的地址和源地址是否正确,如果该数据帧的目的地址和源地址相同,那么此时Com0_Logic==2,并退出,等到接收下一个数据帧时,直接进入Com0_Logic==2的步骤,并核对数据帧的校验字节。如果该数据帧的目的地址和源地址不相同,那么此时Com0_Logic==0,并退出,等到接收下一个数据帧时,重新开始进行Com0_Logic==0的步骤以判断是否接收到了正确的同步头。当Com0_Logic==2时,首先判断是否收满一帧数据,如果未收满,则跳出,此时Com0_Logic==0,等到接收下一个数据帧时,重新开始进行Com0_Logic==0的步骤以判断是否接收到了正确的同步头。如果已经收满了一帧数据,此时进行帧校验,如果帧校验错误,那么丢弃此帧数据,并重新开始数据接收。如果帧校验正确,那么将此帧数据返回给上位机,判断当前的帧号是否等于上一帧帧号加1,如果是,那么将上一帧数据作为待写入FLASH数据,缓存此帧数据。如果当前帧号等于上一帧帧号,那么则缓存此帧数据,如果当前的帧号既不等于上一帧帧号加1,也不等于上一帧帧号,那么Com0_Logic==0,等到接收下一个数据帧时,重新开始进行Com0_Logic==0的步骤以判断是否接收到了正确的同步头。如果在进行数据接收过程中出现错误,那么将Com0_Logic置为0,跳出并重新开始进行数据接收。
进一步地,在本发明中,BootLoader程序将升级程序数据依次写入相对应的FLASH存储器中具体包括:BootLoader程序判断键值,并获取应用起点;BootLoader程序对接收的数据块进行处理,并按照数据块中的地址信息存储到相应的位置。其中,键值与处理器的型号相匹配。
应用此种配置方式,由于在进行数据烧写时,BootLoader程序需要判断键值,而键值与处理器的型号相匹配,由于TI各系列、各型号的处理器DSP在程序加载引导方面有很大的相关性,当仪器某模块更换TI公司的其他处理器时,只需要对该BootLoader程序做相应修改即可,极大地提高了本发明的在线升级方法的可继承性和可重用性。
具体地,在进行数据烧写时,如图3所示,逐字节扫描图2中缓存的有效数据,解析有效数据的意义,将表示程序的二进制码写入处理器的片内FLASH中。该过程首先判断键值,接下来忽略8个保留字,然后获取应用起点EntryPoint,最后处理数据块,按照数据块中的地址信息存储到相应的位置。在程序里定义了一个无符号整型数组用于缓存解析到的待烧写数据,在程序较大时,有些数据块比该数组大,所以一个数据块可能分多次进行存储。代码使用switch语句,以状态机的形式完成数据流的扫描与处理。用Com0_Logic表示不同的状态。在Com0_Logic==0时,完成键值判断并获取ENTRYPOINT;Com0_Logic==1获取数据块大小,并判断数据传输是否结束;Com0_Logic==2完成数据往FLASH存储器里的编程。
作为本发明的一个具体实施例,使用的TI公司的数字信号控制器TMS320F2808作为所有模块的处理器,与该处理器相对应的键值为0x08AA,在进行数据烧写的过程中,首先判断键值是否等于0x08AA,如果不正确,那么此时发送键值错误标志并跳出。如果键值正确,那么此时判断接收的数据数是否等于11,如果是,则获取应用起点Entry Point,将Com0_Logic置为1,WordCount置为0,并跳出,当接收下一数据帧时,进入Com0_Logic==1的程序。在Com0_Logic==1的程序中,获取数据块的大小,并判断数据传输是否结束。此时,如果第一个字为0,那么此时发送程序更新成功标志。如果第一个字不为0,则判断接收的数据数是否等于3,当接收的数据数等于3,那么此时提取数据块的大小和存储地址,计算编程FLASH的次数,并将Com0_Logic置为2,WordCount置为0,并跳出,当接收下一帧数据时,则从数据块的存储地址开始向FLASH存储器中编程,并判断是否是这个数据块的最后一次编程。如果是,那么判断是否接收完剩下的全部数据,如果是,那么向FLASH存储器中编程并退出;如果不是,那么跳出并进行再一次的判断及烧写。如果判断不是这个数据块的最后一次编程,那么此时判断WordCount是否等于2048,如果是,那么进行FLASH存储器的编程,并将存储地址加2048并退出。如果在烧写过程中出现错误,那么将Com0_Logic置为0,WordCount置为0,发送逻辑混乱标志并跳出,发送这一次进入中断读取到的字节并退出。
根据本发明的又一方面,提供了一种旋转导向系统,该旋转导向系统包括多个模块,多个模块使用如上所述的任一项在线升级方法进行程序升级。由于本发明的在线升级方法相对于现有技术而言,操作更加方便,不需要拆装仪器,在升级程序的同时有效的保证了系统的密封性,并节省了时间。因此,使用本发明的在线升级方法进行旋转导向系统的程序升级,能够极大地提高工作效率,确保旋转导向系统的密封性。
在本发明的描述中,需要理解的是,方位词如“前、后、上、下、左、右”、“横向、竖向、垂直、水平”和“顶、底”等所指示的方位或位置关系通常是基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,在未作相反说明的情况下,这些方位词并不指示和暗示所指的装置或元件必须具有特定的方位或者以特定的方位构造和操作,因此不能理解为对本发明保护范围的限制;方位词“内、外”是指相对于各部件本身的轮廓的内外。
为了便于描述,在这里可以使用空间相对术语,如“在……之上”、“在……上方”、“在……上表面”、“上面的”等,用来描述如在图中所示的一个器件或特征与其他器件或特征的空间位置关系。应当理解的是,空间相对术语旨在包含除了器件在图中所描述的方位之外的在使用或操作中的不同方位。例如,如果附图中的器件被倒置,则描述为“在其他器件或构造上方”或“在其他器件或构造之上”的器件之后将被定位为“在其他器件或构造下方”或“在其他器件或构造之下”。因而,示例性术语“在……上方”可以包括“在……上方”和“在……下方”两种方位。该器件也可以其他不同方式定位(旋转90度或处于其他方位),并且对这里所使用的空间相对描述作出相应解释。
此外,需要说明的是,使用“第一”、“第二”等词语来限定零部件,仅仅是为了便于对相应零部件进行区别,如没有另行声明,上述词语并没有特殊含义,因此不能理解为对本发明保护范围的限制。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。