本帖最后由 Argent 于 2025-2-13 01:15 编辑

一、概述
FR306x-C系列芯片是低功耗,高安全性的高性能无线MCU,内置了蓝牙BR/EDR/BLE的收发器和控制器,以及CAN FD总线控制器,适合应用在工业和汽车电子等广泛领域。 符合AEC-Q100-Grade2车规级别。FR306x-C符合蓝牙V5.3标准,支持BR 1Mbps GFSK, EDR 2Mbps π/4-DQPSK, 3Mbps 8DPSK; BLE 1M/2Mbps GFSK, 125K/500K多种模式,支持单独打开和关闭不同的模式,支持蓝牙多主多从多连接。FR306x-C支持AUTOSAR软件框架;FR306x-C内置最多2个独立的CAN FD控制器,向下兼容CAN2.0 A/B部分。
二、系统框图
系统框图.png
三、芯片架构与资源
①、FR3068E-C芯片架构属于双核架构, 包括一颗独立的蓝牙核做蓝牙通讯以 及另外一颗主核MCU,双核之间通过串口做HCI通讯,蓝牙核一般不对外开放,用户无需关注。
②、内置128KB CRAM+512KB SRAM,2MB flash(根据芯片型号有不同大小配置) 。
③、需外挂24MHZ晶体时钟,系统主频最高可倍频至156MHz。
④、工作温度为工业级-40°~105°。
⑤、有57个可编程IO(不同型号/封装会有所不同)。
⑥、支持两路CAN总线,支持CAN FD。
⑦、支持丰富的外设总线如:SPI/UART/USB等。
⑧、支持双模蓝牙BLE+BT/EDR。
芯片架构与资源.png
四、工程环境构建说明
官方文档指明使用MDK5.36以上版本,这里笔者使用的MDK5.38版本,开发板采用的MC1(CM33)处理器是一个32位处理器,具有低中断延迟和低调试成本的特点。处理器基于ARMv8架构,支持硬件浮点运算(FPU)。适用于需要高性能和低功耗的微控制器市场产品。关于该开发板的详细资料,可通过https://www.freqchip.com/sjds获取。开发板基于MDK的pack支持包并没有提供,在Keil的Device中选择“ARMCM33_DSP_FP”,ARM Compiler选择“Use default compiler version 6”,工程中FR306x采用分散加载机制实现。通过“fr30xxc_sdk__202411”中的“lvgl_demo”工程可知。
分散加载.png
笔者这里也是参考了qinyunti坛友移植的micropython工程,其分散加载sct文件如下:
<pre>; *************************************************************
  • ; *** Scatter-Loading Description File generated by uVision ***
  • ; *************************************************************

  • LR_IROM1 0x08002000 0x000FE000  {    ; load region size_region
  •   ER_IROM1 0x08002000 0x000FE000  {  ; load address = execution address
  •    *.o (RESET, +First)
  •    *(InRoot$Sections)
  •    .ANY (+RO)
  •    .ANY (+XO)
  •   }
  •   RW_RAM_CODE_FRONT 0x1FFE0000  {
  •     *(ram_code_front)
  •   }
  •   RW_RAM_CODE +0 {
  •    *(ram_code)
  •    rpmsg.o
  •    rpmsg_lite.o
  •    rpmsg_queue.o
  •    llist.o
  •    virtqueue.o
  •    rpmsg_env_freertos.o
  •    rpmsg_platform.o
  •    list.o
  •    queue.o
  •    tasks.o
  •    timers.o
  •    port.o
  •    portasm.o
  •    heap_6.o
  •    ke_mem.o
  •    audio_decoder.o
  •    audio_encoder.o
  •    audio_hw.o
  •    audio_scene.o
  •    algorithm.o
  •    codec.o
  •    resample.o
  •     *(dram_sec)
  • }
  •   RW_IRAM1 0x20000000 0x00028d00  {  ; RW data
  •    .ANY (+RW +ZI)
  •   }

  •   RW_PSRAM 0x30000000 UNINIT 0x10000000 {  ; RW data
  •    .ANY (NoInit)
  •   }    ScatterAssert((ImageLength(RW_RAM_CODE_FRONT)+ImageLength(RW_RAM_CODE)) <= 0x20000)
  • }</pre>

  • 复制代码
    为了节省更多的空间,将原“lvgl_demo”工程中lvgl显示组件全部屏蔽掉,移植进micropython与shell组件。工程中采用freertos系统,多个任务依照任务优先级来调度执行,而各任务间的通信是通过消息队列进行发送的。消息队列是一种RTOS提供的服务接口,用于在任务或中断服务子程序之间传递数据。在FreeRTOS中,消息队列允许任务或中断服务子程序将消息放入队列,并且一个或多个任务可以通过RTOS内核服务从队列中获取消息。关于RTOS系统编程这里不做过多介绍,qinyunti坛友使用DAC-PWM方式产生音频信号,为了数据传输中不断流,引入了两个fifo缓存机制,这样无需借助音频编解码芯片就能实现音频文件的高效播放。
    五、烧录说明
    由于开发板的引脚资源复用,使用SWD方式下载程序不可取,需要借助官方提供的“FreqChip_Download”工具进行串口烧录,这里需要注意将板上的PB5-RX、PB4-TX通过跳线帽连接。工程编译后,会经过"..\..\..\..\components\tools\keil\post_process.bat" "@L" "#L" "$J"指定脚本文件的处理,生成对应的bin文件,具体的烧录方法,《FR306x开发环境说明书V1.1.pdf》文档中有详细的介绍,这里就不再赘述。
    烧录中....png
    烧录程序.png
    正如上面图示,更新程序就采用“FreqChip_Download V1.3.8.7”工具串口下载。
    六、音频文件准备
    我们将自备的mp3文件放在一个不含中文字符,且路径相对比较简短的文件夹中,打开“Windows PowerShell”终端,切换到音频文件所在的路径,通过指令调用ffmpeg工具,进行音频文件格式的转换。这里笔者采用了3首歌,转换指令如下:
    <pre>ffmpeg/ffmpeg.exe -i horizon.mp3 -ac 1 -ar 16000 -acodec pcm_s16le -ss 00:00:00 -t 00:02:00 horizon.wav
  • ffmpeg/ffmpeg.exe -i onlyloveyou.mp3 -ac 1 -ar 16000 -acodec pcm_s16le -ss 00:00:00 -t 00:01:30 onlyloveyou.wav
  • ffmpeg/ffmpeg.exe -i qifengle.mp3 -ac 1 -ar 16000 -acodec pcm_s16le -ss 00:00:00 -t 00:01:00 qifengle.wav</pre>
  • 复制代码
    mp3转wav音频1.png
    mp3转wav音频2.png
    mp3转wav音频3.png
    以上完成了音频文件格式的转化,然后使用“rxfile+xx文件名”,并通过SecureCRT的串口传输“发送Xmodem(N)”端口进行音频文件的拷贝。
    拷贝wav音频文件.png
    虽然串口传输速度比较慢,但比较稳定,内存可通过free指令查询,存储空间大概14MB左右,完全够存这3个wav音频文件。
    六、Shell与MicroPython下的音频播放演示
    IMG_20250212_161227.jpg
    SecureCRT工具中,通过指令可控制各本地音频文件的播放、停止、静音、音量大小设定,详情见哔哩哔哩链接:
    富芮坤FR3068x-C基于REPL MicroPython实现本地音乐播放