本发明属于灯具驱动器固件升级,具体为基于dali总线及调光线的灯具驱动器固件升级方案。
背景技术:
1、灯具通过搭在智能系统可以实现物联网或多功能控制,其内部通常会设置有驱动器来继续控制,灯具的驱动器特别是户外的,为了防水效果更佳通常会灌胶密封处理。如果遇到需要功能升级,更改或者修改软件bug的时候需要有损拆壳来处理,代价非常大。本发明可以很好地解决这个问题。
技术实现思路
1、本发明的目的在于提供基于dali总线及调光线的灯具驱动器固件升级方案,以解决上述背景技术中提出的问题。
2、为了实现上述目的,本发明提供如下技术方案:基于dali总线及调光线的灯具驱动器固件升级方案,包括升级系统和固件升级方案,所述升级系统包括上机位、usb转dali接口和灯具驱动器;所述上位机通过usb先把数据包发到usb转dali接口,再经过dali总线或者调光线与灯具驱动器通信;
3、固件升级方案包括如下步骤;
4、步骤一:上电后在boot区运行;
5、步骤二:读取ap区数据并校验其完整性,如果完整则开始0.2秒计时;
6、步骤三:判断是否收到上机位在线探测命令;
7、步骤四:如果收到则直接执行固件更新流程,如果没收到则判断ap区数据是否完整并且超过0.2秒计时;
8、步骤五:如果判断ap区数据不完整或未超过0.2秒计时则回到步骤三;
9、步骤六:如果ap区数据完整且超过0.2秒计则进入app区运行;
10、步骤七:上述步骤四中在执行固件更新流程时判断是否收到退出命令,如果没收到则继续执行固件更新流程命令,如果收到则进入app区运行;
11、步骤八:app区运行后判断是否收到上机位的在线探测命令,如果没收到则继续在app区运行,如果收到则重新进入boot区执行固件更新流程命令。
12、优选地,所述上位机与usb转dali接口的通信协议包括第一层和第二层两种协议;
13、所述第一层应用层为:id(1字节)+命令(1字节)+流水号(2字节)+数据(可变长度)+crc16(ccitt1021)校验(2字节,本层数据的校验值),当id等于0xff时是广播,下位机无需回复;
14、所述第二层协议为:帧头(0x7e)+第一层的全部数据+帧尾(0x7e),第二层协议是底层协议,第一层协议是上层协议。
15、优选地,所述第一层协议的命令解释为:
16、a)探测设备是否在线:
17、主机对从机:命令0x96,没有数据;
18、从机回复主机:命令0x96,没有数据;
19、b)握手
20、主机对从机:命令0x9f,加密模式(1字节),0表示固件没有加密,1表示固件已经加密;
21、从机回复主机:命令0x9f,设备类型(2字节),固件的类型和被更新的硬件设备类型一致时才执行固件更新;
22、c)设置te值:
23、主机对从机:命令0x9e,数据是te值,单位微秒,两个字节;
24、从机回复主机:命令0x9e,没有数据;
25、d)查询版本号:
26、主机对从机:命令0x9d,没有数据;
27、从机回复主机:命令0x9d,数据是2字节的版本号+2字节的一页flash字节数;
28、e)擦除flash:
29、主机对从机:命令0x9c,数据是4字节,要擦除的字节数;
30、从机回复主机:命令0x9c,数据是1字节,1表示成功,0表示失败;
31、f)写flash:
32、主机对从机:命令0x9b,数据是4字节的地址,4字节的数据长度,512字节需要写入flash的数据;
33、从机回复主机:命令0x9b,没有数据;
34、g)校验:
35、主机对从机:命令0x99,数据是4个字节需要校验的数据长度+4个字节校验值;
36、从机回复主机:命令0x99,数据是4个字节的校验值,校验值是所有字节的累加和;
37、h)退出:
38、主机对从机:命令0x98,没有数据,收到命令后跳转到app区运行app程序;
39、从机回复主机:命令0x98,没有数据。
40、优选地,所述固件升级方案的主要工作流程如下:
41、1)读mcu的固件文件;
42、2)对固件数据的处理;
43、3)命令先后顺序;
44、4)固件加密的格式;
45、5)bootloader运行逻辑。
46、优选地,所述读mcu的固件文件包括:
47、a.固件支持原始bin格式和加密的bin格式;原始bin文件格式为flash里的数据映像;
48、b.储存于flash的0x200开始的4个字节是校验值checksum,储存于flash的0x204开始的3个字节是固件的大小size,checksum是指整个程序所有字节的累加和但不包括0x200~0x207这8个字节,0x207这个字节的flag的bit0用来标记固件的完整性,0x208~0x209是设备类型devicetype;
49、c.代码里先用两个4字节常量(checksum和size)占着0x200~0x207这个地址不让代码覆盖,checksum默认值是0x12345678(地址0x200~0x203对应的数据是0x78,0x56,0x34,0x12),size默认值是0xfe000000(地址0x204~0x207对应的数据是0x00,0x00,0x00,0xfe),devicetype默认值是0x0001(地址0x208~0x209对应的数据是0x01,0x00);
50、0x200 checksum最低字节;
51、0x201 checksum较低字节;
52、0x202 checksum较高字节;
53、0x203 checksum最高字节;
54、0x204 size最低字节;
55、0x205 size较低字节;
56、0x206 size较高字节,最高字节默认为0;
57、0x207 flag,bit0用来标记固件的完整性等于0表示完整;
58、0x208 devicetype低字节;
59、0x209 devicetype高字节。
60、优选地,所述对固件数据的处理包括:iap上位机软件把固件读到内存后,计算出固件的校验和(不包括0x200~0x207这8个字节)再写到checksum对应的位置,把固件的大小写到size对应的位置,flag的位置写0xff,处理完固件的缴存后可以下载到下位机了。
61、优选地,所述命令的先后顺序为:
62、s1、0x96探测设备是否在线:如果有合法返回说明设备在线;
63、s2、0x9f握手:告诉下位机固件是否需要解密,下位机返回设备类型,上位机根据固件的devicetype与下位机返回的设备类型是否一致再决定下一步动作;
64、s3、0x9e设置dali的时序周期:根据dali总线的实际环境调节速度;te值是半周期值,默认是416us即1.2k的速率,设置成功后将用新的速率通信;
65、s4、0x9d获取bootloader的版本号;
66、s5、0x9c擦除芯片flash;
67、s6、0x9b写数据:把上述2)中处理完的数据传给下位机,每次传512字节,如果固件是加密的,把上述4)byte16及之后的数据发下去;
68、s7、0x99校验:下位机收到校验值和长度后,根据长度计算出校验值与上位机发过来的校验值做对比,如果一致时把单片机的flag位置的第0位写0,bootloader启动时检查这个位置就知道程序是否完整,对于arm等处理器读flash速度快的,可以根据size大小整个区域实时计算校验值来判断是否完整,如果读flash慢的8位单片机就只判断flag的第0位了;
69、s8、0x98退出:下位机收到命令后从boot区跳转到app区运行app区程序。
70、优选地,所述固件加密的格式包括前16个加密信息的字节,所述16个字节里byte0~3都是0x88,byte4是版本号,byte5~7是固件的长度(高字节在前),byte8~11是固件的校验值(高字节在前),byte12~13是设备类型(高字节在前),byte14~15是整个加密文件的crc(ccitt)校验值,高字节在前,计算检验值时把这两个字节写0,从byte16开始是加密后的数据,操作固件更新时把第16字节及以后的数据发下去,下面是前16个字节的数据解析:
71、0x00常数0x88;
72、0x01常数0x88;
73、0x02常数0x88;
74、0x03常数0x88;
75、0x04版本号;
76、0x05固件长度,较高字节,最高字节默认是0;
77、0x06固件长度,较低字节;
78、0x07固件长度,最低字节;
79、0x08固件的校验值,最高字节;
80、0x09固件的校验值,较高字节;
81、0x0a固件的校验值,较低字节;
82、0x0b固件的校验值,最低字节;
83、0x0c设备类型,高字节;
84、0x0d设备类型,低字节;
85、0x0e整个加密文件的crc(ccitt)校验值,高字节;
86、0x0f整个加密文件的crc(ccitt)校验值,低字节。
87、本发明的有益效果如下:
88、本发明通过采用两线差分信号通信,信号是曼彻斯特编码格式,通信的物理媒介可以是标准的dali总线,也可以是普通的灯具驱动器调光线,适用于欧洲标准的dali灯具驱动器,也适用于普通的灯具驱动器;dali标准的速度是1.2k位/秒,一个位的周期是833微秒,一个周期拆分为2个te值,每个te时间是416微秒。
89、本发明采用变速策略,提高通信速度,缩短了固件升级时间,上位机发送命令前会以脉冲的方式告诉灯具驱动器te的时间长度,让双方的时序周期一致,te的时间长度由上位机根据操作者的输入值来决定,操作者可以根据现场的布线状况决定采用哪个速度来通信,通过实践验证te值最高可以设置到100微秒,即速率可以从1.2k位/秒提升到5k位/秒,通信采用变速策略,提高通信速度,缩短了固件升级时间。
90、由于驱动器的te值是根据上位机的参考脉宽来决定的,所以时序的精度就与自身晶振的精度无关了,可以采用更低成本的单片机完成,主机采用时序校正方式,降低对单片机晶振精度要求,降低使用成本。
91、先把固件加密,通过上位机传送到单片机后由bootloader程序进行解密和写入到aprom,固件加密,防止程序外泄。