Hi,
我按照芯片的文档,通过p0_0/1和外接的mcu通讯,实现uart启动.
MCU侧在uart接收到0x6后上传fw,然后读回1byte的CRC码,但这个CRC码和我程序计算的不一致.
我的CRC计算如下,
size_msb = (unsigned char)(file_size / 256);
size_lsb = (file_size % 256);
char checksum_bin = 0;
for(ret=0;ret
执行如下:
root@OpenWrt:/# ./ble-loadfw ble_app_barebone_585.bin
file_size=16475(0x405b),size_lsb=0x5b,size_msb=0x40
sh: write error: Resource busy
read data:0x0
read data:0x2
Detected DA1458x
read data:0x6
Uploading. Please wait...
checksum_bin = 0x54, checksum_da = 0xb4
其中checksum_da是我蓝牙芯片发出的CRC码,是错误的.
Device:
你好,
你的 crc 的计算方式有问题,SDK 中有一个工程(SDK 5.0.4\DA1458x_SDK\5.0.4\projects\host_apps\da1458x\proximity\reporter),包含了 spi boot 的过程。可参考其计算 CRC 的方式,如下:
/**{
****************************************************************************************
* @brief Used to calculate the boot image CRC
* @param[in] length: Length of the image in 32-bit words
* @return CRC checksum (1 byte)
****************************************************************************************
*/
uint8_t calc_crc(uint32_t length)
{
uint32_t i;
uint32_t temp;
uint8_t crc;
crc=0xFF;
for(i=0;i
temp=GetWord32(program_t+4*i);
crc^=(0xFF&(temp>>24));
crc^=(0xFF&(temp>>16));
crc^=(0xFF&(temp>>8 ));
crc^=(0xFF&(temp ));
}
return crc;
}
你这个不是uart boot的CRC计算,AN-B-001A文档里这么说的
CRC is calculated by XORing every successive byte with the previous value. Initial CRC value is 0x00.
这个bin文件和值在别的项目里经过验证是正确的.
你好,
可从 SDK 目录下的 second boot 工程中,找到 585 接收 UART BOOT 的过程。工程所在目录为:
\DA14585_SDK_6.0.10.511_0\DA14585_SDK\6.0.10.511\utilities\secondary_bootloader
打开该工程后,可在 main 函数中找到以下处理:
if (GPIO_GetPinStatus(UART_GPIO_PORT, UART_RX_PIN)) {
uart_initialization(); // initialize UART and UART pins
fw_size = FwDownload(); // download FW
uart_release(); // release UART and reset UART pins
if (fw_size>0){
from=(char*) (SYSRAM_COPY_BASE_ADDRESS);
to=(char*) (SYSRAM_BASE_ADDRESS);
for(i=0;i
SetWord16(RESET_FREEZE_REG, FRZ_WDOG); // Start WDOG
Start_run_user_application();
}
}
#endif