前言
非常感谢面包板社区和富芮坤,申请通过并收到了FR3068E-C开发板。
特性
- 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
硬件资源
- 2x PDM 数字音频接口
- 2x 32位宽的I2S接口
- 3x I2C
- 6x UART 带流控
- 2x SPI 主接口,支持QSPI, OSPI
- 2x SPI 从接口,一路是单线的,一路支持四线
- USB 2.0 OTG
- 最多支持 2x16 channel PWM,支持输入捕获,可以做PWM DAC输出
- 最多支持 9 通道 12bit SAR-DAC,支持普通模式、队列模式
- 最多可配置57个可配置GPIO
- CAN FD控制器,符合CAN总线协议 V2.0 part A, B 符合 ISO 11898-1
- Display 显示接口 8080/6080/RGB/SPI
- 6x 32bit Timer
- 2x DMA
- SDIO 3.0
- 硬件加密单元 AES-128, AES-192, AES-256
- 支持 FPU
- 真随机数发生器 TRNG
- 像素编码转换器 YUV2RGB
从上面可以看出这款芯片除了支持蓝牙,它的显示接口、音频接口、通讯接口非常丰富,可以做影音相关的应用,非常不错。
开箱
![](https://static.assets-stash.eet-china.com/album/202502/12/17393328108895120009dqvqvts84tm28330.jpeg)
- 一个开发板,FR3068E-C DEV1.3 版本
- 大屏幕,分辨率是 480x272
- 一根USB Type-C 线,长0.5米,给开发板供电,但是这个线支持数据传输、慢充;
- 一根 USB Mini 线,长0.5米,接板子上调试口;
上电,运行出厂程序
切记,USB Type-C 只给开发板供电,而 USB mini 才是调试口,插上之后电脑新增一个串口和一个 CMSIS-DAP 调试器驱动。
串口16,波特率921600,打印上电信息如下:
![](https://static.assets-stash.eet-china.com/album/202502/12/173933281061583120010efwfb7kzndf09yff.png)
![](https://static.assets-stash.eet-china.com/album/202502/12/173933281130302120010m6xzqewkx0jzwyhx.jpeg)
运行一段时间黑屏
如果长时间没有和开发板交互,开发板会进入休眠模式,屏幕熄灭,按下K1键/K2键/K3键可以点亮屏幕。
板载调试器
参考文档《5)FR3068E_DEV1.3开发板使用说明.pdf》
![](https://static.assets-stash.eet-china.com/album/202502/12/173933282217504120022ohjxdknd8hggk8vu.png)
![](https://static.assets-stash.eet-china.com/album/202502/12/173933282283841120022zh4vov77c734l77h.png)
![](https://static.assets-stash.eet-china.com/album/202502/12/173933282268363120022cfn3ctu3cq43q6kq.png)
PDF文档和开发板出厂设置只把调试器转的 UART 跳线接上了,没有把 SWD 跳线接上。只有把 SWD 跳线也接上,Keil MDK 才能正确识别芯片。
SWD 接通的 BUG
- 只要把 PB10/PB11 两个跳线帽接上,即 SWD 口联通,开发板的屏幕显示就不正常:
- 屏幕背景色不正常,可能是大片的红色;
- 屏幕多出了红色的线条;
![](https://static.assets-stash.eet-china.com/album/202502/12/173933283675306120036i8ub1u7w1zxgtl8u.png)
的确如此,烧录一个不带显示屏的程序,再接上 PB10/PB11 跳线帽,SWD 成功识别。
![](https://static.assets-stash.eet-china.com/album/202502/12/173933283630276120036t3q56p5d5p3q5wdh.png)
串口烧录 bin 文件
参考文档 《FR306x 开发环境说明书v1.1.pdf》
首先,要确保工程 User Action 调用 python 脚本,编译输出 Project_burn.bin 文件,这个才是串口烧录使用的 bin 文件。
参考 examples/evb_demo/lvgl_demo 工程,User Action 命令如下:(别的工程需要生成 Project_burn.bin,直接拷贝这个命令过去,注意 bat 脚本相对路径位置)
Shell "..\..\..\..\components\tools\keil\post_process.bat" "@L" "#L" "$J" |
![](https://static.assets-stash.eet-china.com/album/202502/12/173933284079033120040blmpp0relnr1lm1z.png)
![](https://static.assets-stash.eet-china.com/album/202502/12/173933284015942120040jecq9gwj1e3c4s97.png)
Keil MDK 烧录、调试
不论烧录的是 Project_burn.bin 还是 Project.bin 文件,理应都能调试。
确认链接脚本,代码放在 Flash 上
GUI 配置 链接地址--废弃
例如 example/peripheral_demo/gpio 工程,链接选项如下,没有使用链接脚本,而是通过GUI配置链接地址。
![](https://static.assets-stash.eet-china.com/album/202502/12/173933284044875120040f7qxwikv85x4uf4g.png)
代码放在 Flash 上,起始地址 0x08002000,容量 0x200000 = 2MB
![](https://static.assets-stash.eet-china.com/album/202502/12/173933284919544120049mhamcmlhmhvmsnha.png)
链接脚本--推荐
有多个可选的链接脚本,如下,存在于 sdk/components/tools/keil 目录下
![](https://static.assets-stash.eet-china.com/album/202502/12/173933284974843120049yg8mqt2x952wx09s.png)
- psram_ft_3092e.sct
- xip_flash_add_psram.sct
- xip_flash_fr3066d.sct
- xip_flash_fr3068e.sct 【推荐】
- xip_flash_turn_key.sct
把链接脚本拷贝 Keil MDK 工程目录下,然后在工程选项中选择这个链接脚本,取消GUI配置链接地址的那个选项。
![](https://static.assets-stash.eet-china.com/album/202502/12/173933284977014120049zgpdpb5pvevifgpu.png)
为什么推荐用链接脚本呢?
因为工程中某些函数有 __RAM_CODE 属性,即把代码放在 ram_code 段中,放在 SRAM 中,加快访问速度。如果是 GUI 配置链接地址,那么 __RAM_CODE 未定义,函数都放在 Flash 上,速度会慢一些。
![](https://static.assets-stash.eet-china.com/album/202502/12/173933285585708120055x615f8i85v56ih6a.png)
而且有一些操作 Flash 的代码,还只能放在 RAM 上。
![](https://static.assets-stash.eet-china.com/album/202502/12/173933285521835120055t3g3jjosogwnowso.png)
xip_flash_fr3068e.sct 文件内容
Shell ; ************************************************************* ; *** 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 0x1FFE0000 0x20000 { *(ram_code) list.o queue.o tasks.o timers.o port.o portasm.o heap_6.o ke_mem.o } RW_IRAM1 0x20000000 0x00080000 { ; RW data .ANY (+RW +ZI) } }
|
配置 Keil MDK 烧录算法
算法文件路径
sdk\components\tools\keil\
两个算法文件
将两个算法文件拷贝到 Keil MDK 算法文件目录下
![](https://static.assets-stash.eet-china.com/album/202502/12/173933285634495120056y78pm791hu87mz7i.png)
Keil 工程配置算法文件
第一步,选择算法文件
![](https://static.assets-stash.eet-china.com/album/202502/12/173933285984212120059t7w6bww2ka7fpwak.png)
第二步修改下载地址
修改算法写入Flash 起始地址为 0x08002000 ,符合算法描述 08002000H~09001FFFH 地址范围
![](https://static.assets-stash.eet-china.com/album/202502/12/173933286028942120100twn6jc08lu5z05w0.png)
xip 调试配置文件 ini
文件路径 sdk\components\tools\keil\debug_xip_flash.ini
如果 Keil 工程需要调试,需要在 Debug 选项中加载这个文件,最好把这个文件拷贝到对应的工程目录下。
如下所示,当前工程是 sdk/examples/peripheral_demo/gpio 工程,把 debug_xip_flash.ini 文件拷贝到此工程下。
![](https://static.assets-stash.eet-china.com/album/202502/12/17393328604401120100pxmlx1ml28s41m1y.png)
debug_xip_flash.ini 文件内容
Shell /* 使用说明 1,使用xip_flash.sct作为链接文件; 2,工程选项的Debug标签页中,初始化文件(Initialization File)选择:debug_xip_flash.ini 3,【重要】Utilities标签页中,取消选择:Update Target before Debugging */ /*---------------------------------------------------------------------------- * Name: debug_xip_flash.ini * Purpose: XIP Debug Initialization File *----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Setup() configure PC & SP for RAM Debug *----------------------------------------------------------------------------*/ FUNC void Setup (void) { _WDWORD(0xE0050020, 0xffffffff); _WDWORD(0xE0050024, 0xffffffff); _WDWORD(0xE0050028, 0xffffffff); _WDWORD(0xE005002c, 0xffffffff); _WDWORD(0xE0050030, 0xffffffff); _WDWORD(0xE0050034, 0xffffffff); _WDWORD(0xE0050038, 0xffffffff); _WDWORD(0xE005003c, 0xffffffff); _WDWORD(0xE0050040, 0xffffffff); _WDWORD(0xE0050044, 0xffffffff); SP = _RDWORD(0x08002000); // Setup Stack Pointer PC = _RDWORD(0x08002004); // Setup Program Counter _WDWORD(0xE000ED08, 0x08002000); // Setup Vector Table Offset Register
// Enable Cache if ((_RDWORD(0xE00B0004) & 0x03) == 0x00) { _WDWORD(0xE00B0000, 0x00000038); _WDWORD(0xE00B0000, 0x0000003C); _WDWORD(0x20000000, 0x12345678); _WDWORD(0x20000004, 0x12345678); _WDWORD(0x20000008, 0x12345678); _WDWORD(0x2000000c, 0x12345678); _WDWORD(0x20000010, 0x12345678); _WDWORD(0x20000014, 0x12345678); _WDWORD(0x20000018, 0x12345678); _WDWORD(0x2000001c, 0x12345678); _WDWORD(0xE00B0000, 0x0000003E); _WDWORD(0x20000000, _RDWORD(0x20000000)); _WDWORD(0x20000000, _RDWORD(0x20000000)); _WDWORD(0x20000000, _RDWORD(0x20000000)); _WDWORD(0x20000000, _RDWORD(0x20000000)); _WDWORD(0x20000000, _RDWORD(0x20000000)); _WDWORD(0x20000000, _RDWORD(0x20000000)); _WDWORD(0x20000000, _RDWORD(0x20000000)); _WDWORD(0x20000000, _RDWORD(0x20000000)); _WDWORD(0xE00B0000, 0x0000003D); } }
FUNC void OnResetExec (void) { // executes upon software RESET Setup(); // Setup for Running }
load %L incremental Setup(); // Setup for Running //g, main |
调试注意事项
如果工程用到了显示屏那么SWD管脚会被占用导致 CMSIS-DAP 识别失败,那么可以通过串口烧录工具下载固件,然后Keil MDK 就可以调试。但是屏幕初始化之后导致 SWD 管脚又被占用, Keil MDK 就会退出调试。
如果工程没有用到显示屏,那么就可以直接在 Keil MDK 中下载固件并开始调试。
文章评论(0条评论)
登录后参与讨论