FR8016HD芯片



  • @zr 之前我问了芯片代理商,群里有一个技术支持说(不支持)。他只会一个劲得发SDK里面得文件给我,但是这些文件并不能解决我得问题。现在看你的意思是能支持我去这么做?如果你愿意回答一下我遇到得具体信息,那么我将会很快能适配成功,并且产品全面替换成这个芯片了。



  • @zr 1:目前Flash布局是BOOT放在0x01000000占128KB用来做DFU,需要跑我司协议,APP放在0x01020000占256KB,APP链接地址也是0x01000000,靠remap映射过去。
    2:正常启动流程:ROM加载我的BOOT → BOOT校验APP → 跳转到APP运行。OTA升级流程:APP通过BLE把新固件下载到备份区 → 重启 → ROM加载BOOT → BOOT把备份区覆盖到APP区 → 再重启 → ROM加载BOOT → BOOT跳转到APP完成升级。
    3:目前现在卡在"BOOT跳APP"这一步,搞了快二十轮了,核心问题两个:
    第一个,remap设完之后不管怎么复位都被清掉了。platform_reset_patch试了、WDT试了、ARM的VECTRESET也试了,remap_length复位完都是0。我还往port_pull(0x50000020)写了个固定值0xA5A50001,复位完读回来是0xFFFFFFFF,确认整个system_regs都被硬件清了。SDK注释里说"remap在warm reset后保持",但我实测不是这样,不知道是我理解错了还是跟芯片版本有关。
    第二个,我试过不复位直接软件跳转到ROM的Reset_Handler(0x00000821),remap确实能保持,但ROM只打印一个"freqchip"就卡死了,正常上电是两三个然后进应用。中断、定时器、BLE基带复位、EM清零、UART FIFO、FPB、VTOR、时钟寄存器我都恢复了,还是不行。
    有个有意思的现象:用VECTRESET的时候,上电后第一次ROM能正常跑起来(两个freqchip然后正常加载了BOOT),但紧接着第二次就一个freqchip卡死了。我怀疑ROM在SRAM里有内部变量,跑了两轮BOOT之后SRAM被污染了ROM就起不来。
    如果可以希望回答我得问题

    1. remap到底能不能跨复位保持?什么条件下能保持?
    2. SDK的OTA做完platform_reset_patch复位之后,ROM是怎么知道要切到另一个bank的?是靠remap还是PMU寄存器还是flash里的什么标志?
    3. ROM启动的时候SRAM里有没有什么保留区域不能碰的?我scatter文件用了整个0x20000000开始的SRAM,是不是覆盖了ROM自己的东西。
    4. 我这种独立Bootloader的需求(自定义DFU协议、防盗版校验),在FR8016HD上有推荐的做法吗?还是说这个芯片不支持独立Boot,必须用SDK内置OTA?
    5. 我BOOT的image_size是0x20000,APP的是0x40000,大小不一样,ROM的双bank能处理吗。让ROM得BOOT来实现开机进入我得BOOT还是我得APP。当然如果
      能不需要复位,ROM 中得BOOT 。跳转到我得BOOT。然后我得BOOT跳转到 APP 这样更好了,


  • @zr 我会同步去看看GPIO得例程。同时等待你具体回答我得问题。十分感谢



  • @zr 我手头的SDK文件夹是 fr801xh_SDK_1043bb7。我没找到这个GPIO例程。我得芯片是fr8016HD.是你们内部的另一版SDK吗。你能给我链接下载吗。
    我看你们图片 好像不需要 remap,不需要重进 ROM,不需要任何复位。直接跳,太棒了,我要想看 app_boot_retarget 怎么用的,BOOT 和 APP 两边的 scatter 文件怎么配的。




  • Global Moderator

    @romai 直接用从机例程也行,APP的sct文件中需要设置好代码在ROM中的起始位置



  • @zr 能直接给我SDK,还有告诉我例程名字路径吗。事实上,我已经遍历了我手头这个fr801xh_SDK_1043bb7 sdk 的所有例程了。



  • @zr 我们有了成熟的产品了。只是量大之后考虑到降本,NOR芯片替换成这款,之前板子没到的时候已经看着手册驱动,蓝牙部分代码都更换好了,配置好了。只是没想到板子到了跑起来并不顺利



  • @felix-yang你这边有例程吗



  • 有人能给予我一些回复么,你们说存在这种例程能实现功能。给我SDK和对应DEMO文件目录地址,或者告诉我官方这个芯片SDK目录下DEMO的文件项目名字(我是遍历了没找到)。


  • Global Moderator

    @romai 很早之前支持过,不过已经找不到当时的代码了

    boot还是用从机例程来做

    逻辑:你自己的boot也要预留好A区和B区,假设你A区image_size设置成10K,那么B区也要预留出来10K,空出来,因为我们的boot要读AB区的信息

    然后APP的代码就放在B区的后面

    跳转的逻辑还是,重定向中断向量表+堆栈指针,没其他的,sct文件重新定义代码存储地址,你再试一下



  • @zr 我已经尝试十几轮了。你可以看看上面我得尝试记录。1:既然有从机例程,我能拿到这个例程吗。。2:关于你提到的。A;B 区域。所以我看了例程,所以问了 两个区域是否要相等,,如果这样,我应该a:boot +app . b :boot2+ appbak 吗。还是a: boo1+ .b:boot2 ,b后面app app-bak这样的划分.十分感谢你的回答。如果你能回答我2个问题,我就能再次尝试了


  • Global Moderator

    @romai
    1、0_1775037260564_f86e33eb-09a7-4661-be55-30ef86b25e0a-图片.png

    2、
    A(10k):boot1
    B(10K):空着

    后面:APP



  • @zr 好的,十分感谢你的回答,我去尝试一下。