你好,
我按照芯片的文章,通讯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
执行下:
根@ 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码,是的。
设备:
你好,
你的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;
}
你是不是UART引导的CRC计算,AN-B-001A文库里的
CRC通过以前值xoring每次连续字节进行计算。初始CRC值为0x00。
这个宾文件和值在别的项目里经过验证是正当的。
你好,
可从sdk目录下的第二次启动工程中,找到585接收uart启动的传统程度。工程现出为:
\ DA14585_SDK_6.0.10.511_0 \ DA14585_SDK \ 6.0.10.511 \ Utilities \ Seferfore_Bootloader
打开着工程后,可在主数函中间找到下饰物:
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(reset_freeeze_reg,frz_wdog);//启动wdog.
start_run_user_application();
}
}
#万一