发新帖本帖赏金 30.00元(功能说明)我要提问
返回列表
打印
[GW低功耗蓝牙MCU]

GW3323常见报错

[复制链接]
2632|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Lana636|  楼主 | 2024-4-30 11:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Lana636 于 2025-5-9 17:14 编辑

#申请原创# GW3323开发时常见报错代码:1.0 程序烧录不进去,提示“错误 芯片不支持功能请求”

原因1:芯片供电不足。测试Vbat输入是否有3.3V,输出的电压Vddio是否有3.3V?
原因2:软件有没有开芯片不支持的功能,用downloader复核;
原因3:上个版本程序把芯片改写了,即使全擦芯片,仍显示“错误 芯片不支持功能请求”;让主板完全断电,等待十分钟后,再烧录试试。



1.1、ERR: 2, EPC: 13e原因:指令跑飞异常。

1.2、ERR: 4原因:RAM溢出异常(野指针、空指针)。ERR:4 ,EPC:87302

原因:升级完固件后,wav文件地址放生了变化,导致升级重启后调用相同地址文件出现错误。
解决方法:启用20250327及以后的libplatform.a、res_user.xm、ui.xm、prebulid.bat及路径设置等文件。
此版本固件可以通过setresmode设置音频文件的位置。

$compiler $options $includes -E -P -x c -c "$(PROJECT_DIR)output\bin\res.xm" -o "$(PROJECT_DIR)output\bin\res.bat"
$compiler $options $includes -E -P -x c -c "$(PROJECT_DIR)output\bin\res_user.xm" -o "$(PROJECT_DIR)output\bin\res_user.bat"


1.3、ERR: 20原因:除0异常。


2、ERROR ======> GIE-DIS in Flash: 1, EPC=19602 MISS=1005a452
原因:关中断临界区内调用flash函数产生异常,1005a452是调用的位置。

内存报错,变量非法访问,函数调用异常,解决方法:
2.1、中断中的打印函数要用printk函数,里面的全局变量要用volatile申明,中断函数要放到com_text区域;即添加AT(.com_text.isr)。以下为示例:
AT(.com_rodata.isr)
const char str_1[] = "Tim3 done\r\n ";
AT(.com_rodata.isr)
const char str_2[] = "Tim3 %d\r\n ";
volatile u32 duty_n;
AT(.com_text.isr)
void timer3_isq(void)
{
    if (tmr_get_flag(TMR3, TMR_FLAG_UPDATE2) != RESET)
    {
        tmr_clear_flag(TMR3, TMR_FLAG_UPDATE2);
         func_A();//例如:gpio_toggle_bits(GPIOB_REG, GPIO_PIN_2);
        printk(str_1);
         printk(str_2,TMR3CON);
    }
}
例如func_A()中调用了func_B(),那么func_B()也要放入AT(.com_text.isr)区。

2.2、关中断程序及其在开中断前的操作都要放到flash中执行,否则会报此类错误。
备注:u32 isq_ALL;
void ARMDisableInt(void)
{
    isq_ALL = PICEN;
    PICEN = 0;
}

void ARMEnableInt(void)
{
    PICEN = isq_ALL;
}

2.3、
函数内某些变量没有初始化,导致运行时读到的是随机地址数据,也会出现ERROR异常

2.4、强制执行非对齐访问可能导致硬件错误中断,异常区域在.ld中添加. = ALIGN(512)或. = ALIGN(4);

3、ERROR ======> thread suspend: thread disorder, 2
原因:中断问题导致线程挂起
解决方法:中断中的打印函数要用printk函数,里面的全局变量要用volatile申明,中断函数要放到com_text区域;即添加AT(.com_text.isr)

4、“ERROR ======> timer_thread miss: 178a2, 4c624”
原因:系统timer函数中调用了flash函数,在.map文件中找到“178a2”即可定位发生异常的函数。
解决方法:把timer函数中flash函数加AT(.com_text),改到公共区。中断里面建议少跑点东西。

5、ERROR ======> CRC: 5085 c29f
原因1:读取地址内容CRC检验结果不一样就报错。
解决方法1:可能是你操作的时候把flash原来的程序破坏了,不然就是load flash的配置被改了"config.h"中更改#define FLASH_SIZE  FSIZE_1M
ERROR ======> CRC: db5c acd5
原因2:执行fot_write()函数(函数地址0x10005726)时,仍在执行wav_res_play_user_kick()函数(函数地址0x1920a,comm区).
解决方法2:把PICEN=0x47832e改成PICEN=0x47802e,暂时关掉音频播放功能;因为wav_res_isplay()返回0,实际上有可能还在处理音频,要把当前8ms音频处理完后才不会继续处理。
ERROR ======> CRC  
原因3:在app.xm中执行setfotaddr(FLASH_CODE2_OFFSET);但是未起作用.
解决方法3:把工程的header.bin换成2024.02.28的及以后得版本。查看strong_symbol.c文件中是否添加了以下函数。
#if FOT_EN
u8 is_fot_update_en(void)
{
    return 1;
}
#endif

原因4:变量在其他地方被调用,导致数据被改写。在调用前打印相关的所有变量,看看是否被改写
解决方法4:变量控制好,用良好的代码编写习惯。



6、riscv32-elf-ld.exe:Output\obj\ram.o:1: syntax error
原因:工程路径中含括号()或中文
解决方法:检查路径名称并修改

7、appxm.o    unrecognize function"setfotaddr"
解决方法:在app.xm添加地址设置setfotaddr(addr); 注意,此命令需在setflash后进行设置,且在make命令之前,此时第二份代码实际存放的地址为 0x2000 + addr。举个例子,如果要将第二份代码存放在1M的位置,设置如下:setfotaddr(0xFE000); 若设置后编译报错,请将编译链(RV32-Toolchain-Setup)更新到最新版本(v1.3.9及以上)。

8、程序卡死在delay_ms()这个函数中
原因:TMR0CON寄存器由0x85变成0x10,故无法正常执行延时的功能。
解决方法:打印异常前TMR0CON的值,找到出现变化的位置,即可定位问题。例如未插入USB,就调用ude_rx_ack(),会造成TMR0CON的值被改写。

8.2程序调用delay_ms(),查看串口时间戳看没有起作用
原因:delay_ms()不起作用。
解决方法:delay_5ms()是系统库,起作用。

9、错误 不支持的目标设备型号
原因:SDK有其他设置
解决方法:用downloader_V3.3.0及以上的版本

10、报“FOT_ERR_CRC_VERIFY”错误解决方法:header.bin是否是2024.02.28及以后版本,文件大小是否是4KB.有些公司有加密系统,会把header.bin文件加密。生成fot文件的工程,要有setuserbin和setfotaddr函数。

11、其他报错解决方法:把工程中的warning变成0,因为有可能是用户代码问题,造成变量不是同一个变量(地址不同),导致逻辑并不按照用户的逻辑来。

12、 memcpy(fot_data,pMsg->data,pMsg->package_len);//这个函数不起作用了。原因:spi1等时钟未打开,is_fot_update_en未添加。

13、setresmode、register_spi_read_function、nanos_var_init函数报错,皆是因为libdrivers.a,libbtstack.a,libplatform库不是20241030日之后的版本。
此类函数是用于设置音频地址,音频数据和代码数据分开,音频算作了数据区,而非代码区。对升级固件,升级音频文件有用。

14、setuserbin仅能有一个起作用,多次调用时,以最后一次调用的参数实现。

15、升级时最后一包fot_get_err()报11,说明CRC不正确。
解决方法:检查是否中间数据出现了断包、跳包、重复包的现象?
例程中蓝牙或USB升级,都是处理完1包后写下1包。不会出现重复包的现象。
但是wifi等网络执行时,会ack后网络有延时,导致云端以为网络有问题,又重复的现象,所以执行fot_write前要检查收到的数据是否连续或者重发了。

16、程序卡在fot_write()原因:CLKGAT1的bit5(SBCEC)和bit12(SPI1)未置1.因为芯片的SPI1和内部合封的flash进行通信,升级代码会对flash地址数据进行操作,所以要打开相关的时钟。

17、“错误 无效的存储设备”,Vbat电压正常,VDDIO也能输出3.2V,仅擦除也报“错误 无效的存储设备”
解决方法:芯片坏了,换个芯片。

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 30.00 元 2025-03-25
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
21小跑堂 2025-3-25 16:11 回复TA
GW3323开发记录,介绍开发时常见的报错现象并给出相应解决方法。 
沙发
Lana636|  楼主 | 2024-5-7 09:40 | 只看该作者
本帖最后由 Lana636 于 2024-11-1 09:48 编辑

6666

使用特权

评论回复
板凳
Lana636|  楼主 | 2024-8-7 16:32 | 只看该作者
函数内某些变量没有初始化,导致运行时读到的是随机地址数据,也会出现ERROR异常

使用特权

评论回复
地板
Lana636|  楼主 | 2024-8-27 09:19 | 只看该作者
6、riscv32-elf-ld.exe:Output\obj\ram.o:1: syntax error
原因:工程路径中含括号()或中文
解决方法:检查路径名称并修改

使用特权

评论回复
5
21小跑堂| | 2025-3-25 16:12 | 只看该作者
大佬下次申请原创也请 @21小跑堂 哦,以便更快更及时地审核您的文章~~

使用特权

评论回复
发新帖 本帖赏金 30.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

12

帖子

0

粉丝