用无线方式升级目前两个思路:1是借助一个可以进行TCP连接的串口透传模块HLK7628N,通过TCP连接服务器后,还是通过ymodem的方式传输
首先修改ymodem传输串口到7628N所在的串口
将if (!rym_recv_on_device(&rctx, rt_console_get_device(), RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX, ymodem_on_begin, ymodem_on_data, NULL, RT_TICK_PER_SECOND))中的rt_console_get_device()改为rt_device_find(SAMPLE_UART4_NAME)
SAMPLE_UART4_NAME是定义的串口4的名称,前面要把串口4初始化
如有必要还要修改一下串口波特率,去int rt_hw_usart_init(void)函数里面
然后把HLK7628N的串口接到串口4上
TCP协议和ymodem协议两者间是不互相冲突的,可以通过虚拟串口工具将TCP客户端虚拟映射到一个虚拟串口,然后用超级终端xshell打开这个虚拟串口即可,如下图,COM3是虚拟出来的串口,8080是本地端口号,HLK7628N作为远程客户端连接本地作为服务器的PC机
上面这款软件是付费的,有个哥们给破解了,破解流程,流程走了一遍,发现已经破解不了了,一些重要的.dll文件好像已经被处理过了,防止反编译,后来又看了一下,发现一开始想法错了,软件版本、反编译工具、反编译插件都一样,为什么我这找不到那个Register,以为题主提到的Register在.dll文件里面,其实是在下图路径下面
破解方法如下图
另存为之后再打开,就已经编译生效了如下图:
上述相关工具
核心逻辑如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25/* 数据解析线程 */ static void ZIGBEE_data_parsing(void) { char rx_temp = 0, rx_len = 0; char data_buf[30] = {0}; while (!ota_flag)//升级中不接收除ota数据外的串口数据 升级失败后在ymodem_ota_uart4()函数中置0 { rx_temp = uart_ZIGBEE_get_char(); if(rx_temp != 'n') { data_buf[(rx_len++) % 30] = rx_temp; } else //开始处理一帧数据 { rx_len = 0; if(!strncmp(data_buf, "ymodem_ota_uart4", 16)) { ota_flag = 1; rt_kprintf("uart4 received data is %sn", data_buf); ymodem_ota_uart4();//复制的ymodem_ota函数 修改一下 } memset(data_buf, 0, sizeof(data_buf)); } } }
其它串口配置代码见
第二个思路就是正常的官方提供的从服务器上通过websocket拉取升级文件的方法
未完待续·······
最后
以上就是冷傲芒果最近收集整理的关于基于RTT对STM32L476进行OTA(下)的全部内容,更多相关基于RTT对STM32L476进行OTA(下)内容请搜索靠谱客的其他文章。
发表评论 取消回复