从UART启动DA14585

了解更多常见问题解答教程

2个帖子/ 0新
最后一篇
柳銮
离线
最后一次露面:1年4个月前
加入:2018-11-12 08:27
从UART启动DA14585

嗨对话框,

我想从UART启动到我的DA14585设备。但是,我只发现了关于DA14580 / 581/583从串行接口启动的DOC。

您是否有DA14585引导序列的特定文档?

谢谢!

最好的祝福!

莱昂内尔

设备:
cyibin.
离线
最后一次露面:4个月5天前
职员
加入:2017-12-14 02:48
嗨柳叫,

嗨柳叫,

启动序列为585与580相同,因此DOC也适用于585。

有关更好的参考,您可以在efferic_bootoader项目中找到585从UART接收引导数据的代码(da14585_sdk_6.0.10.511_0 \ da14585_sdk \ 6.0.10.511 \ utmities \ secondard_bootloader)。

以下是相关代码:

/ ** **************************************************************************************** * @brief download firmware from UART interface **************************************************************************************** */ int FwDownload(void) { int fw_size; int i; char *code; char crc_code; char recv_byte; uart_send_byte(STX); // send start TX char if (0 == uart_receive_byte(&recv_byte)) return -1; // receive SOH if (recv_byte != SOH) return -2; if (0 == uart_receive_byte(&recv_byte)) return -3; // receive FW length LSB fw_size = recv_byte; if (0 == uart_receive_byte(&recv_byte)) return -4; // receive FW length MSB fw_size += (recv_byte << 8); // Support the extended length protocol if (fw_size == 0) { if (0 == uart_receive_byte(&recv_byte)) return -3; // receive FW length LSB fw_size = recv_byte; if (0 == uart_receive_byte(&recv_byte)) return -4; // receive FW length MiddleSB fw_size += (recv_byte << 8); if (0 == uart_receive_byte(&recv_byte)) return -9; // receive FW length MSB fw_size += (recv_byte << 16); } if ((fw_size == 0) || fw_size > MAX_CODE_LENGTH) // check if the program fits into memory { uart_send_byte(NAK); // if it does not fit send ACK return -5; } else { uart_send_byte(ACK); // if it fits send ACK } crc_code = 0; code = (char*) (SYSRAM_COPY_BASE_ADDRESS); // set pointer to SYSRAM for (i = 0; i < fw_size; i++) // copy code from UART to RAM { if (0 == uart_receive_byte(&recv_byte)) return -6; // receive code byte crc_code ^= recv_byte; // update CRC *code = recv_byte; // write to RAM code++; // increase RAM pointer } uart_send_byte(crc_code); // send CRC byte if (0 == uart_receive_byte(&recv_byte)) return -7; // receive ACK if (recv_byte != ACK) return -8; return fw_size; }