IWRL6432AOP: SBL loading Main App exception

Part Number: IWRL6432AOP
Other Parts Discussed in Thread: IWRL6432

Hi TI.Team:

After burning the sbl program, I started the machine and it entered sbl upgrade Main App mode. My computer transferred the appimage through XMODEM, but after the transfer was complete, I couldn't start the Main App properly,I checked that the address to which sbl is redirected is # define M-META_SMAGE ((uint322-t) M-META_SBL+(uint322-t) (x8000U)),But I don't know how to set the burning address for the Main App,Can you tell me how to set it up?

22.jpg

 

SDK:MMWAVE_L_SDK_05_05_04_02

DEMO: motion_and_presence_detection

Please assist me in organizing the process to see if it is correct,
1: Start sbl from address 0 and jump to the Main app startup address if no upgrade is required
2: Main App needs to set startup address offset
3: When burning Uinflash, simply burn the compiled sbl.appimage and main'app.app_image

 

 

11.jpg

 

 

 

Thanks

Cole

  • Hello,
    We have received your post and the investigation will take some time.
    Thanks for your patience.

  • Hello,

        Please refer to EXAMPLES_DRIVERS_SBL.html, there are steps.

  • Hi Alice:

    Can the log output of sbl be switched to another p-pin? Because the UART that we transmit data to is also in this group, some logs of sbl cannot be seen during the upgrade. Currently, we have seen that the data has been received and the upgrade has not been successful

    Thanks

    Cole

  • Hello,

          In IWRL6432AOPEVM , “XDS110 Class Application/User UART” connect to G2 and H4 pin of chip.

         You can change to K3 and J3  if your hardware is available.

  • Hi Alice:

    Thank you very much for your support,

    Currently, I am upgrading iwrl6432 through UART on CYW55913,

    I see that all data has been transmitted, but the upgrade was unsuccessful. The attachments are my code and logs. Can you help me check if there are any errors there?

    **I followed your SOP and successfully upgraded using the Tera Term computer

    **But if we use SecureCRTPortable, it's the same phenomenon as I encountered

    **I have seen that SBL_imageFlasher has successfully loaded

    This problem has been stuck for a few days, and I really hope to get your help

    Thanks

    Cole

    /*******************************************************************************
    * Copyright 2025  ShenZhen FuLian FuGui Precision Ind. Co. Ltd.
    * All Rights Reserved.
    * No portions of this material shall be reproduced in any form without
    * the written permission of ShenZhen FuLian FuGui Precision Ind. Co.
    * Ltd.
    *
    * All information contained in this document is ShenZhen FuLian FuGui
    * Precision Ind. Co. Ltd. company private, proprietary, and trade secret
    * property and are protected by international intellectual property laws
    * and treaties.
    * File name :
    * Author : Mascot             Version :1.0               Date :
    * Description : 
    * 
    * Others : 
    * Functions List : 
    *   1. 
    * 
    * History : 
    *    <author>    <date>    <version>    <desc>
    *    Mascot     2025/3/26    1.0        build this module
    ******************************************************************************/
    #include "app_header.h"
    
    #define SOH  				0x01
    #define STX  				0x02
    #define EOT  				0x04
    #define ACK  				0x06
    #define NAK  				0x15
    #define CAN  				0x18
    #define CTRL_Z 				0x1A
    #define DLY_1S				1000
    #define MAXRETRANS 			10
    
    // 返回码
    #define XMODEM_OK       	0
    #define XMODEM_CANCEL   	-1
    #define XMODEM_NOSYNC   	-2
    #define XMODEM_ERROR    	-4
    #define XMODEM_EOT_FAIL 	-5
    
    
    // CRC16-CCITT 查表(256个预计算值)
    static const uint16_t crc16_ccitt_table[256] = 
    {
        0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
        0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
        0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
        0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
        0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
        0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
        0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
        0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
        0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
        0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
        0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
        0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
        0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
        0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
        0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
        0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
        0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
        0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
        0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
        0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
        0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
        0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
        0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
        0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
        0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
        0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
        0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
        0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
        0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
        0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
        0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
        0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
    };
    
    uint16_t crc16_ccitt(const uint8_t *data, int len)
    {
        uint16_t crc = 0x0000;  // 初始值
        for (int i = 0; i < len; i++) 
    	{
            crc = (crc << 8) ^ crc16_ccitt_table[((crc >> 8) ^ data[i]) & 0xFF];
        }
        return crc;
    }
    
    // 校验和
    static uint8_t calc_checksum(uint8_t *data, int len)
    {
        uint8_t sum = 0;
        for (int i = 0; i < len; i++) 
    	{
            sum += data[i];
        }
        return sum;
    }
    
    void uart_flush(void)
    {
        uint8_t dummy;
        while (cyhal_uart_getc(&radar_uart, &dummy, 10) == CY_RSLT_SUCCESS);
    }
    
    int uart_recv_byte(int timeout_ms)
    {
        uint8_t data;
        if (cyhal_uart_getc(&radar_uart, &data, timeout_ms) == CY_RSLT_SUCCESS) 
    	{
            return data;
        }
        return -1;
    }
    
    void uart_send_byte(uint8_t c)
    {
        cyhal_uart_putc(&radar_uart, c);
    }
    
    // 发送一个数据包
    static int send_packet(uint8_t *data, int data_len, uint8_t packet_id, int use_crc)
    {
        uint8_t xbuff[1029];  // 1024 + 3 + 2
        int packet_len;
        
        // 包头:STX(1K) 或 SOH(128)
        xbuff[0] = (data_len == 1024) ? STX : SOH;
        xbuff[1] = packet_id;
        xbuff[2] = ~packet_id;
        
        // 数据区
        memcpy(&xbuff[3], data, data_len);
        
        // 校验
        if (use_crc) 
    	{
            uint16_t crc = crc16_ccitt(data, data_len);
            xbuff[3 + data_len] = (crc >> 8) & 0xFF;
            xbuff[4 + data_len] = crc & 0xFF;
            packet_len = 3 + data_len + 2;
        } 
    	else 
    	{
            uint8_t cks = calc_checksum(data, data_len);
            xbuff[3 + data_len] = cks;
            packet_len = 3 + data_len + 1;
        }
        printf("2->:%d,%d\n",packet_id,packet_len);
        // 发送
        for (int i = 0; i < packet_len; i++) 
    	{
            uart_send_byte(xbuff[i]);
        }
    
        // 等待 ACK/NAK
        int resp = uart_recv_byte(DLY_1S);
    	printf("2-2:%d\n",resp);
        return (resp == ACK) ? 1 : 0;
    }
    
    int xmodemTransmit(unsigned char *src, int srcsz)
    {
    	cyhal_uart_clear(&radar_uart);
    	int block_size = 1024;	   // 使用 1K 模式(接收端支持 STX)
    	uint8_t packet_id = 1;
    	int sent = 0;
    	int retry;
    	printf("Xmodem Eenter ...\n");
    	// ========== 阶段1:等待接收端启动信号 ==========
    	while (1) 
    	{
    		//uart_send_byte(STX);
    		int resp = uart_recv_byte(DLY_1S);
    		if (resp < 0) 
    			continue;
    		printf("1:%x\n",resp);
    		if (resp == 'C') 
    		{
    			break;
    		}
    		else if (resp == NAK) 
    		{
    			break;
    		} 
    		else if (resp == CAN) 
    		{
    			if (uart_recv_byte(DLY_1S) == CAN) 
    			{
    				uart_send_byte(ACK);
    				return XMODEM_CANCEL;
    			}
    		}
    	}
    	printf("2:\n");
    	// ========== 阶段2:主传输循环 ==========
    	while (sent < srcsz) 
    	{
    		cyhal_uart_clear(&radar_uart);
    		int remaining = srcsz - sent;
    		int chunk = (remaining > block_size) ? block_size : remaining;
    		uint8_t data_buf[1024];
    		
    		// 准备数据块
    		memcpy(data_buf, &src[sent], chunk);
    		if (chunk < block_size) 
    		{
    			memset(&data_buf[chunk], CTRL_Z, block_size - chunk);
    		}
    		printf("\n2-1:\n");
    		// 发送数据包(带重试)
    		int success = 0;
    		for (retry = 0; retry < MAXRETRANS && !success; retry++) 
    		{
    			success = send_packet(data_buf, block_size, packet_id,1);
    
    #if 1
    		for (size_t k = 0; k < block_size; k++) 
    		{
    			if (k % 16 == 0) 
    			{
    				if (k > 0) 
    					printf("\n");
    			}
    			printf("0x%02X ", data_buf[k]);
    		}
    		printf("\n--block--end-- %d \n",success);
    
    #endif 
    
    
    			
    		}
    		printf("2-4:%d,%d,%d\n",success,sent+chunk,packet_id);
    		if (!success) 
    		{
    			// 发送失败
    			uart_send_byte(CAN);
    			uart_send_byte(CAN);
    			uart_send_byte(CAN);
    			printf("2-5:\n");
    			return XMODEM_ERROR;
    		}
    		packet_id++;
    		//if (packet_id == 0) packet_id = 1;	// 序号回绕
    		sent += chunk;
    	}
    
    	printf("3:\n");
    	// ========== 阶段3:发送 EOT 结束 ==========
    	for (retry = 0; retry < 50; retry++) 
    	{
    		cyhal_uart_clear(&radar_uart);
    		printf("3-3:\n");
    		uart_send_byte(EOT);
    		int resp = uart_recv_byte(DLY_1S * 2);
    		if (resp == ACK) 
    		{
    			printf("3-4:\n");
    			return XMODEM_OK;
    		}
    	}
    	return XMODEM_EOT_FAIL;
    }
    
    int hdl_uart_xmodem(void)
    {
    	xmodemTransmit(radar_appimage,radar_appimage_len);
    	return Success;
    }
    
    
    
    log.log

  • Hello,

          Do you mean it update successful via Tera Term but fail via SecureCRTPortable with same iwrl6432 hardware and software ?

          It is unbelievable since they are serial debug tool , maybe you can check the difference between the configure in tool.

  • Hi Alice
    Yes, using different computer software will result in different outcomes. I only see options for configuring 1K or 128, so I can't really check where the problem lies. Have you all sent demonstrations of the data?

    Thanks

    Cole