请教在UART下载FW的时代为返回crc码不正式

4个帖子/ 0新
最后一篇
唐杰龙
离线
最后一次露面:1年8个月前
加入:2019-02-12 07:54
请教在UART下载FW的时代为返回crc码不正式

你好,
我按照芯片的文章,通讯P0_0 / 1和外接的MCU通气,实现UART动画。
MCU侧在UART接收到0x6后上传fw,然后然后1byte的crc码,但这个crc码和我程序序的不一致。
我的crc计算如下,
size_msb =(无符号char)(file_size / 256);
size_lsb =(file_size%256);

char checksum_bin = 0;
for(Ret = 0; ret checksum_bin = checksum_bin ^ myfile [ret];

执行下:
根@ OpenWrt.:/ #./ble-loadfw ble_app_barebone_585.bin
file_size = 16475(0x405b),size_lsb = 0x5b,size_msb = 0x40
SH:写错误:资源繁忙
读取数据:0x0
读取数据:0x2
检测到DA1458x.
读取数据:0x6
上传。请稍等...
checksum_bin = 0x54,checksum_da = 0xb4
其中期核实库 - 是我蓝牙芯片发离的的crc码,是的。

设备:
cyibin.
离线
最后一次露面:3个月1周前
职员
加入:2017-12-14 02:48
你好,

你好,

你的CRC的计算方向有问题,SDK中有一个工程(SDK 5.0.4 \ da1458x_sdk \ 5.0.4 \ projects \ host_apps \ da1458x \ proximity \ eporter),包含包含spi靴子的程度。可参考其计算crc的方式,下载:

/ **
****************************************************************************************
* @brief用于计算启动图像CRC
* @param [in]长度:32位字中的图像的长度
* @return crc校验和(1字节)
****************************************************************************************
* /
UINT8_T CALC_CRC(UINT32_T长度)
{
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));
}
返回crc;
}

唐杰龙
离线
最后一次露面:1年8个月前
加入:2019-02-12 07:54
你是不是uart引导的crc计算,an-b

你是不是UART引导的CRC计算,AN-B-001A文库里的
CRC通过以前值xoring每次连续字节进行计算。初始CRC值为0x00。

这个宾文件和值在别的项目里经过验证是正当的。

cyibin.
离线
最后一次露面:3个月1周前
职员
加入:2017-12-14 02:48
你好,

你好,

可从sdk目录下的第二次启动工程中,找到585接收uart启动的传统程度。工程现出为:

\ DA14585_SDK_6.0.10.511_0 \ DA14585_SDK \ 6.0.10.511 \ Utilities \ Seferfore_Bootloader

打开着工程后,可在主数函中间找到下饰物:

#ifdef uart_supported.
if(gpio_getpinstatus(uart_gpio_port,uart_rx_pin){
uart_initialization();//初始化UART和UART引脚
fw_size = fwdownload();//下载FW.
UART_RELEASE();//发布UART并重置UART引脚
if(fw_size> 0){
来自=(char *)(sysram_copy_base_address);
to =(char *)(sysram_base_address);
for(i = 0; i
setword16(WatchDog_reg,0xC8);// 200 * 10.24ms初始化的活动时间!
setword16(reset_freeeze_reg,frz_wdog);//启动wdog.
start_run_user_application();
}
}
#万一