Other Parts Discussed in Thread: AWR1642, MMWAVE-SDK
Hi team,
SDK: mmwave_sdk_02_00_00_04
HW: AWR 1642BOOST ES2.0
Application: Secondary bootloader (CAN Downloader and Flash downloader)
We got attached document and secondary bootloader example code.
But we met a problem when we boot-up from flash by secondary bootloader.
After debug the code, we found the problem is on parsing BSS_SUBSYSTEM.
We tested the Secondary bootloader with SDK 1.0(01_02_00_05)/SDK2.0 fw image.
With SDK 1.0 FW, we can see the "Parsing completed".
With SDK 2.0 FW, we got halt-down.
The section length seems doesn't match between SDK 1.0 and SDK 2.0.
Do you have any idea that we can solve this issue on SDK 2.0?
SDK 2.0 xwr16xx_mmw_demo.bin
BSS_SUBSYSTEM(calculateImageOffset())
s_ImageParams.sectionPrms.secLen: 40/0 (readRPRCSecContent())
size: 40 (readRPRCSecContent()) <= The last debug message and got system halt.
SDK 1.0 (xwr16xx_mmw_demo.bin)
BSS_SUBSYSTEM
s_ImageParams.sectionPrms.secLen: 72/0
size: 72
uint32_t readRPRCSecContent(uint32_t* bufferPtr,uint32_t bufferLenIp) { uint32_t bufferLen = bufferLenIp; uint32_t bytesRead = 0U; uint32_t *ptrLcl = bufferPtr; void *p_memAddRet; uint32_t size; uint32_t retVal; /*For downloading the section content*/ System_printf("s_ImageParams.sectionPrms.secLen: %d/%d\n", s_ImageParams.sectionPrms.secLen, s_ImageParams.sectionPrms.writtenLen); if (s_ImageParams.sectionPrms.secLen > s_ImageParams.sectionPrms.writtenLen) { if ((bufferLen - bytesRead) >= (s_ImageParams.sectionPrms.secLen - \ s_ImageParams.sectionPrms.writtenLen)) { size = (s_ImageParams.sectionPrms.secLen - s_ImageParams.sectionPrms.writtenLen); } else { size = (bufferLen - bytesRead); } if(s_ImageParams.sectionPrms.sectionPtr != 0) { System_printf("size: %d\n", size); p_memAddRet = memcpy((void*)s_ImageParams.sectionPrms.sectionPtr, \ (const void*)ptrLcl, size); } else { System_printf("app_int_vec_table\n"); memcpy((void*)&app_int_vec_table[0], (const void*)ptrLcl, 64); p_memAddRet = 0; } s_ImageParams.sectionPrms.writtenLen += size; System_printf("s_ImageParams.sectionPrms.writtenLen: %d\n", s_ImageParams.sectionPrms.writtenLen); M_ASSERT(p_memAddRet == (void*)s_ImageParams.sectionPrms.sectionPtr); s_ImageParams.sectionPrms.sectionPtr += size/4U; ptrLcl += (size / 4U); bytesRead += size; s_ImageParams.imageSizeRead += bytesRead; } if (s_ImageParams.sectionPrms.secLen == s_ImageParams.sectionPrms.writtenLen) { retVal = handleSectionDwldComplete(); if (retVal == 0U) { bytesRead = bufferLen; } } System_printf("bytesRead: %d\n", bytesRead); return(bytesRead); }