常见问题

  • Q.

    极海GW3323蓝牙芯片开发时常见有哪些代码报错?怎么解决

    A.

      一、极海GW3323程序烧录失败,提示“错误芯片不支持功能请求”

      原因

      芯片供电异常:检查Vbat输入、Vddio输出电压是否均为3.3V

      软件开启芯片不支持的功能:使用downloader工具复核配置

      上一版程序改写芯片配置:全擦芯片无效,需主板完全断电静置10分钟后重新烧录


      二、GW3323ERR类报错

      ERR:2,EPC:13e

      原因:指令跑飞异常

      ERR:4,EPC:87302

             1 (1)

      原因:RAM溢出(野指针、空指针);固件升级后wav文件地址变更,调用原地址触发异常

      解决:使用20250327及以后版本的libplatform.a、res_user.xm、ui.xm、prebulid.bat等文件,通过setresmode配置音频文件位置

              2

      ERR:20

      原因:除0运算异常


      三、ERROR======>;GIE-DIS in Flash:1,EPC=19602 MISS=1005a452

      原因

      关中断临界区内调用Flash函数引发异常,1005a452为异常调用位置。

      解决方法

      中断内打印使用printk函数,全局变量添加volatile修饰,中断函数添加AT(.com_text.isr)指定存放区域;中断内嵌套调用的函数,也需放入该区域

      关中断程序及开中断前的操作,必须在Flash中执行

      函数内变量未初始化会读取随机地址数据,需完成变量初始化

      非对齐访问触发硬件错误中断,在.ld文件添加.=ALIGN(512)或.=ALIGN(4)


      四、ERROR======>;thread suspend:thread disorder,2

      原因

      中断配置异常导致线程挂起

      解决方法

      中断内打印用printk、全局变量加volatile修饰、中断函数添加AT(.com_text.isr)


      五、ERROR======>;timer_thread miss:178a2,4c624

      原因

      系统timer函数中调用Flash函数,通过.map文件搜索178a2可定位异常函数

      解决方法

      将timer内的Flash函数添加AT(.com_text)放入公共区,减少中断内执行逻辑


      六、ERROR======>;CRC报错

      原因与解决

      CRC:5085 c29f

      原因:Flash读取地址内容CRC校验不匹配,原程序被破坏或Flash配置被修改

      解决:在config.h中修改#define FLASH_SIZE FSIZE_1M

      CRC:db5c acd5

      原因:执行fot_write()时,音频播放函数wav_res_play_user_kick()仍在运行

      解决:将PICEN=0x47832e改为PICEN=0x47802e临时关闭音频,等待8ms音频处理完成

      app.xm中setfotaddr未生效

      解决:替换2024.02.28及以后版本header.bin,在strong_symbol.c添加FOT使能函数

      变量被非法改写

      解决:调用前打印变量排查,规范变量使用与代码编写


      七、编译链接报错

      riscv32-elf-ld.exe:Outputobjram.o:1:syntax error

      原因:工程路径包含中文或括号

      解决:修改工程路径为纯英文、无特殊符号

      appxm.o unrecognize function"setfotaddr"

      解决:app.xm中setflash后添加setfotaddr(addr),编译链更新至RV32-Toolchain-Setup v1.3.9及以上


      八、delay_ms()函数异常

      程序卡死在delay_ms()

      原因:TMR0CON寄存器值从0x85变为0x10,延时功能失效

      解决:打印异常前TMR0CON值定位改写位置(如未插USB调用ude_rx_ack())

      delay_ms()无效果

      解决:使用系统库函数delay_5ms()


      九、烧录工具与设备报错

      错误不支持的目标设备型号

      解决:使用downloader_V3.3.0及以上版本

      报“FOT_ERR_CRC_VERIFY”

      解决:确认header.bin为2024.02.28及以后版本(大小4KB),生成fot文件工程添加setuserbin、setfotaddr函数

      错误无效的存储设备

      原因:供电正常但芯片损坏

      解决:更换芯片

      PB3与Vbat/Vusb同时上电无法烧录

      解决:先接PB3,点击烧录开始后再插Vbat/Vusb(芯片上电约125ms后接收烧录指令)

             4

      十、内存与函数功能异常

      内存溢出(section重叠、data区域溢出)

      解决:调整ram.ld中__data_ram_size,同步修改__comm_vma、__comm_ram_size

      memcpy函数失效

      原因:SPI1等时钟未开启、is_fot_update_en函数未添加

      setresmode等函数报错

      原因:libdrivers.a、libbtstack.a、libplatform库版本低于20241030

      setuserbin多次调用

      规则:仅最后一次调用生效,仅保留一处配置

      升级fot_get_err()报11(CRC错误)

      解决:排查数据断包、跳包、重复包,fot_write前校验数据连续性

      程序卡在fot_write()

      原因:CLKGAT1的bit5(SBCEC)、bit12(SPI1)未置1,Flash通信时钟未开启

      解决:置位对应时钟位


      十一、其他通用解决方法

      将工程编译警告清零,避免因变量地址不一致导致逻辑执行异常。

    我们将竭诚为您提供产品选型支持,助力您选到满意的产品

    联系我们
  • Q.

    极海MCU烧录调试常见问题如何排查?

    A.

      在极海MCU调试过程中,常会遇到无法烧录、无法调试等问题,本文整理了J‑Link未知设备、Keil识别不到IDCODE两类高频问题的排查方法,保持原有操作逻辑与图片不变。

      一、J‑Link弹窗提示“未知设备”

    1 (1)

      问题原因

      使用版本较老的J‑Link驱动,未内置Geehy(极海)芯片型号,导致弹出设备未知提示。

      临时解决方法

      点击弹窗OK,手动选择芯片对应的ARM内核即可正常使用:

      APM32E030系列→Cortex‑M0+

      APM32F402系列→Cortex‑M4

    2

      彻底解决方法

      安装最新版J‑Link驱动:J‑Link从V7.70a版本起正式支持极海芯片,版本越新支持型号越全。

      ⚠️注意:市面大量盗版J‑Link,使用高版本驱动易触发警告。

      ![J-Link V7.70a版本说明](Version V7.70a_(2022-08-10))

    3

      二、Keil上识别不到IDCODE

      前提检查

      确保驱动环境正常;若使用其他烧录器,需先确认驱动安装完整。正常情况下,接线无误、芯片工作正常时,Keil选择对应烧录器可直接读到芯片IDCODE。

      ![Keil J-Link调试设置界面](Cortex JLink/JTrace Target Driver Setup)

    4

          排查步骤

      1.核对烧录接口接线

      确保烧录器与板子的SWD引脚一一对应、接线正确。

    5

    6

      2.排除低功耗/禁用SWD问题

      芯片进入低功耗、或软件禁用SWD引脚,会导致无法识别。

      快速排查方法:

      用镊子短接复位电容,让芯片保持复位状态

      复位状态下引脚为默认态,烧录器可正常读到ID

      读到ID说明芯片与接线正常,松开复位即可烧录


      3.松开复位又识别不到ID

      尝试松开复位的瞬间点击烧录,趁芯片未退出复位时完成烧录,多试几次通常可成功。

      能读ID但烧录失败

      若提示Flash Download failed/No Algorithm found,说明缺少Flash编程算法文件。解决:检查工程是否正确添加对应型号的.FLM算法文件。

      ![Keil烧录报错界面](Build Output)

    7

      ![Keil Flash算法配置](Cortex JLink/JTrace Target Driver Setup)

    8

    我们将竭诚为您提供产品选型支持,助力您选到满意的产品

    联系我们
  • Q.

    为什么国产MCU的Demo例程跑不通?

    A.

      为什么你的国产MCU Demo总是跑不通?


      根据一线FAE反馈:新手跑不通Demo,绝大多数时候不是芯片本身的问题,而是栽在三个看起来基础、实则暗藏门槛的地方。


      这份新年“开发排雷指南”,不妨对照一下,看看你有没有中过招。


      第一个坑:对时钟树的理解不够


      不少工程师从成熟的生态(比如STM32)切换过来时,习惯动作是:复制一份参考例程,改几个外设参数,然后就直接烧录上板。


      问题往往出在这里。时钟配置,常常被当作一个“自动生成、无需深究”的黑盒对待。比如,把一个基于8 MHz外部晶振的工程,直接跑在一块只焊了25 MHz晶振的板子上,却没有仔细核对时钟源和PLL倍频参数;或者默认把内部RC振荡器的值当作实际运行频率,然后拿着这个值去算串口波特率、定时器周期,结果所有外设的时序都偏差了。



    ad0bf6db065f5a130a9fe60ac54b5f30.png


      以极海APM32F103为例——


      FAE讲得很直白:很多人一遇到问题,第一反应是怀疑HAL库或者国产芯片“兼容性不好”,但其实根因往往是没摸透这颗芯片的时钟树长什么样。不同厂商的32位MCU虽然内核都是Cortex-M,但时钟域怎么划分、总线怎么分频、外设挂在哪条总线上,差别可以很大。有的把APB总线再拆成多个域,有的在时钟路径里多了一层可选的PLL或分频模块。只要没把“系统时钟—总线时钟—外设时钟”这条链路在纸上画明白,就很容易出现“代码明明没动,串口却全是乱码”的局面。


      第二个坑:藏在外设初始化顺序里的细节


      大多数入门教程会告诉你:开时钟、配GPIO、初始化外设、开中断。但真到了国产MCU上手时,很多人实际做的是:打开厂商的配置工具,生成代码,然后只盯着波特率、SPI模式、I2C速率这些参数反复调。至于初始化顺序——那是工具生成的“黑箱代码”,很少有人愿意一行行看。


      但在FAE眼里,这恰恰是Demo跑不通的高频雷区。


      拿常见的串口收发来说,有些国产MCU从时钟开启到外设真正就绪,中间需要几个周期的同步延迟;有的厂商在GPIO复用功能的配置顺序上有隐含要求——先配模式再配复用,和先配复用再配模式,结果可能完全不同。如果工程师只习惯在代码里搜寄存器名字,却不理解“这个外设依赖哪些前置资源已经准备好”,就很容易在“时序敏感”的地方翻车。


      更复杂的外设更是如此。比如带以太网、CAN-FD、高级定时器的型号,初始化往往涉及多个模块协同:时钟、GPIO、复用功能、DMA、中断控制器。这些模块如果跨越不同电源域或时钟域,官方例程里通常会给出明确的启停顺序。FAE发现,新手常犯的一个错误是:只盯着“参数配置”那部分代码,却把一些“看起来没啥用”的初始化步骤删了或重排了,结果Demo的表现就是和参考板对不上。


      第三个坑:只看例程,不看手册


      这几年国产MCU厂商在生态上进步很快的一点,就是用开发板和例程降低上手门槛。比如极海APM32系列,提供了大量外设Demo和评估板,配合主流IDE和RTOS,让工程师几乎可以不看手册,先把灯点亮、把串口打印出来。

      但这也埋下了一个习惯问题:很多人把“例程”当成唯一文档,把“参考手册”当成备胎,只有遇到寄存器名字看不懂时才翻一下。

      问题在于,复杂外设的关键约束,往往只写在手册里,而不会在例程注释里全部告诉你。比如ADC的采样时间和输入阻抗要怎么匹配、串口和DMA联动时有哪些限制、某些PWM模式下死区时间和计数模式的配合关系。这些细节,不看时序图、不看寄存器字段说明,光靠复制粘贴例程,很难真正搞明白。等到项目调试到后期,波形上冒出偶发毛刺,或者数据偶尔丢包时,才发现问题根源早在最开始就没吃透。

    我们将竭诚为您提供产品选型支持,助力您选到满意的产品

    联系我们

还没选到心仪的产品吗?

联系我们
icon_up
close_white