Bee项目文档规范 RTL8762C SDK User Guide CN
User Manual:
Open the PDF directly: View PDF .
Page Count: 47
Download | |
Open PDF In Browser | View PDF |
RTL8762C SDK User Guide ek alt Re Co 2018/09/07 al nti de nfi V1.1 RTL8762C SDK User Guide 修订历史(Revision History) 日期 版本 修改 作者 2018/06/06 Draft v1.0 初稿 Lory 2018/09/07 V1.1 更新第 8 章和 9.1 小节 Lory Reviewer ek alt Re Co al nti de nfi Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 2 RTL8762C SDK User Guide 目录 修订历史(Revision History) ........................................................................................................................ 2 图目录 ............................................................................................................................................................... 6 表目录 ............................................................................................................................................................... 7 1 概述 ........................................................................................................................................................... 8 2 用户指南 ................................................................................................................................................... 9 2.1 开发环境 ............................................................................................................................................ 9 Keil ............................................................................................................................................. 9 2.1.2 J-Link .......................................................................................................................................... 9 2.1.3 SDK .......................................................................................................................................... 10 2.1.4 EVB Kit .................................................................................................................................... 10 alt Re 2.1.1 平台设置 .......................................................................................................................................... 10 2.3 EVB 安装 ......................................................................................................................................... 11 2.4 IDE 安装 ......................................................................................................................................... 11 ek 2.2 Keil 工程 ................................................................................................................................. 11 2.4.2 Keil 设置 ................................................................................................................................. 11 Co 2.4.1 硬件架构 ................................................................................................................................................. 15 4 软件架构 ................................................................................................................................................. 16 de 4.1 系统架构 .......................................................................................................................................... 16 4.2 操作系统 .......................................................................................................................................... 16 4.3 OS 接口 ........................................................................................................................................... 17 4.4 任务和优先级 .................................................................................................................................. 17 al nti 5 nfi 3 4.4.1 任务 .......................................................................................................................................... 17 4.4.2 优先级 ...................................................................................................................................... 19 应用程序 ................................................................................................................................................. 20 5.1 SDK 目录 ........................................................................................................................................ 20 5.2 示例工程 .......................................................................................................................................... 21 5.3 流程图 .............................................................................................................................................. 22 5.4 消息和事件处理流程 ...................................................................................................................... 23 5.5 IO 消息............................................................................................................................................ 24 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 3 RTL8762C SDK User Guide 6 5.5.1 消息格式 .................................................................................................................................. 24 5.5.2 消息类型定义 .......................................................................................................................... 24 5.5.3 消息子类型定义 ...................................................................................................................... 25 5.5.4 用户自定义消息 ...................................................................................................................... 25 5.6 Pin 设置........................................................................................................................................... 25 5.7 DLPS 设置 ...................................................................................................................................... 25 存储 ......................................................................................................................................................... 27 6.1 存储映射 .......................................................................................................................................... 27 6.2 ROM ................................................................................................................................................. 27 6.3 RAM ................................................................................................................................................. 27 Data Ram .................................................................................................................................. 28 6.3.2 Buffer Ram ............................................................................................................................... 28 alt Cache ................................................................................................................................................ 29 6.5 Flash ................................................................................................................................................. 29 ek 6.4 Flash APIs................................................................................................................................. 29 6.5.2 FTL ........................................................................................................................................... 30 Co 6.5.1 6.6 eFuse ................................................................................................................................................ 30 nfi 7 Re 6.3.1 中断 ......................................................................................................................................................... 31 Nested Vectored Interrupt Controller (NVIC) ................................................................................. 31 7.2 中断向量表 ...................................................................................................................................... 31 7.3 中断优先级 ...................................................................................................................................... 34 al nti de 7.1 8 电量管理 ................................................................................................................................................. 35 9 烧录 ......................................................................................................................................................... 37 9.1 Images 相关 ..................................................................................................................................... 37 9.2 Image 处理工具 .............................................................................................................................. 37 9.2.1 fromelf ...................................................................................................................................... 37 9.2.2 CheckSum_Gen ........................................................................................................................ 37 9.2.3 md5 ........................................................................................................................................... 39 9.3 10 烧录方式 .......................................................................................................................................... 39 调试...................................................................................................................................................... 39 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 4 RTL8762C SDK User Guide 10.1 Log 机制 ......................................................................................................................................... 39 10.1.1 Debug analyzer ......................................................................................................................... 40 10.1.2 Log 打印基本接口 .................................................................................................................. 42 10.1.3 Log 打印封装接口 .................................................................................................................. 42 10.1.4 辅助打印接口 ...................................................................................................................... 43 10.1.5 Log 打印示例 .......................................................................................................................... 43 10.1.6 Log 控制接口 .......................................................................................................................... 44 10.1.7 DBG_DIRECT ......................................................................................................................... 45 10.2 SWD 调试 ........................................................................................................................................ 45 SWD 调试接口 ....................................................................................................................... 46 10.2.2 DWT 监视接口 ........................................................................................................................ 47 ek alt Re 10.2.1 Co al nti de nfi Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 5 RTL8762C SDK User Guide 图目录 图 10-1 Debug Analyzer 主页面 ............................................................................................................................ 40 图 10-2 Debug Analyzer 设置页面 ....................................................................................................................... 41 ek alt Re Co al nti de nfi Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 6 RTL8762C SDK User Guide 表目录 表 表 表 表 表 表 表 表 表 表 表 5-1 APP 初始化 ................................................................................................................................................ 23 7-1 中断向量表 ................................................................................................................................................ 31 7-2 Timer 4~7 ISR ............................................................................................................................................. 32 7-3 Peripheral ISR ............................................................................................................................................. 33 7-4 GPIO Group3 ISR ....................................................................................................................................... 33 7-5 GPIO Group2 ISR ....................................................................................................................................... 33 7-6 GPIO Group1 ISR ....................................................................................................................................... 34 7-7 GPIO Group0 ISR ....................................................................................................................................... 34 7-8 中断优先级 ................................................................................................................................................ 34 9-1 Images 可用烧录方式 ................................................................................................................................ 39 10-2 调试等级 .................................................................................................................................................. 42 ek alt Re Co al nti de nfi Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 7 RTL8762C SDK User Guide 1 概述 本文旨在说明如何使用 RTL8762C 软件开发包(SDK)来开发蓝牙低功耗应用。 ek alt Re Co al nti de nfi Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 8 RTL8762C SDK User Guide 2 用户指南 2.1 开发环境 以下是在开发过程中需要的软件和硬件: 1. Keil MDK-ARM Lite V5 或者更新版本 2. J-Link Software v5.02d 或者更新版本 3. RTL8762C SDK 4. EVB Kit Re 2.1.1 Keil SDK 中所有的应用能够通过 Keil Microcontroller Development Kit(MDK)编译以及使用。所以在进行软 alt 件开发之前,要先取得并且安装 Keil。有关 Keil 的更多信息请访问 www.keil.com。 Realtek 使用的工具链版本信息如下所示。为避免产生 ROM 可执行程序和应用之间的兼容性问题,建 ek 议使用以下版本或者更新的版本。 Co al nti de nfi 图 2-1 keil 2.1.2 J-Link 如 果 想 要 有 比 打 印 log 机 制 更 全 面 的 调 试 方 法 , J-link 是 另 一 个 必 须 要 具 备 的 工 具 。 访 问 www.segger.com 来下载相关的软件和文档,安装 SEGGER J-Link 软件。设备的驱动应该被正确地安装,才 能搭配 Keil MDK 使用 J-Link 调试器。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 9 RTL8762C SDK User Guide 2.1.3 SDK SDK 包括示例工程,文档以及必要的工具。 2.1.4 EVB Kit EVB 是针对 RTL8762C 的硬件评估,开发和应用调试设计的。 2.2 平台设置 图 2-2 展示了硬件部分和软件组件之间的关系。通过 Keil 开发的应用程序能够通过 J-Link 下载到 RTL8762C,并且通过 SWD 接口调试。 Re RTL8762C SDK ek alt Co al nti de nfi 图 2-2 平台设置 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 10 RTL8762C SDK User Guide EVB 安装 2.3 EVB 套件由一块母板和一块子板组成,详细请参考 RTL8762C Evaluation Board User Guide。 IDE 安装 2.4 2.4.1 Keil 工程 一般来说不建议新建工程开发,而是直接打开现有的示例工程,然后在此基础上增加功能代码。 如果安装的是 Keil V5 或者更新的版本,以 PXP 工程为例(工程目录在 bee2_sdk_ xxxx \board\evb\pxp), 打开方式如图 2-3 所示。 ek alt Re Co nfi 图 2-3 Keil 工程 de 2.4.2 Keil 设置 1. al nti 下面是对 Debugger 设定和 Keil 使用的 Flash 下载算法的描述: 把 sdk\tool\flash 目录下的 RTL876x_SPI_FLASH.FLM 和 RTL876x_LOG_TRACE.FLM 文件拷贝到 Keil 安装目录:Keil_installed_dir\ARM\Flash\,如下所示: 图 2-4 Keil Flash 算法 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 11 RTL8762C SDK User Guide 2. 点击工具栏上的 , 或者在菜单中进入 Project > Options, 点击 Debug 页面。选择 J-LINK/J-TRACE Cortex,然后点击“Settings”: ek alt Re 3. Co 图 2-5 Keil 设置 J-Link Port 选择 SW。如果硬件连接是正确的,CPU 就能在 SW Device 列表中识别出来。 al nti de nfi 图 2-6 Keil 调试设置 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 12 RTL8762C SDK User Guide 4. 选择“Flash Download”页面,如果已经有下载算法就先删除。点击“Add”添加 RTL8763Bx_FLASH_8MB.FLM 和 RTL876x_LOG_TRACE_16MB。修改“RAM for Algorithm” 的 起始地址为 0x00200000,大小为 0x4000。 ek alt Re Co 点击图标 编译工程。如果有任何编译或者链接的错误,在解决完后就可以把应用程序下载到 RTL8762C 来做进一步的验证和调试。 al nti 6. de 5. nfi 图 2-7 Flash 下载算法 如果 Flash 算法有成功的安装,就可以通过点击下载图标 来进行下载。在下载过程中,预期 是不会产生任何出错的信息。当应用程序被成功下载到 RTL8762C 后,重启 RTL8762C 来运行程 序。可以通过 Debug Analyzer 工具上的日志信息来检查应用程序是否按照预期运行。 图 2-8 编译和运行 7. 通过点击调试图标 ,利用 J-Link 来调试和追踪应用程序。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 13 RTL8762C SDK User Guide 注意:如果 DLPS 模式是打开的,那么一旦系统进入 DLPS 模式,调试就不能继续进行。所以想要在 开发早期利用 Keil 来调试程序时,要先关闭 DLPS 模式。DLPS 打开和关闭方式: 打开:lps_mode_set (LPM_DLPS_MODE) 关闭:lps_mode_set (LPM_ACTIVE_MODE) ek alt Re Co al nti de nfi Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 14 RTL8762C SDK User Guide 3 硬件架构 RTL8762C 的硬件模块如图 3-1 所示: 丰富的外设 灵活的 RAM 配置 电源管理单元 时钟管理单元 蓝牙模块 RTL8762C LX 32kHz RC OSC PMU Switching regulator Modem ek Co RFIO APB *only in RTL8762CKF IR RC IO PINMUX UART x2 keyscan I2C x2 SPI x2 al nti de Low power comparator Log UART nfi Timers GPIOs 32kHz Crystal OSC AUXADC MIC Bias RF tranceiver LE APB 40MHz Crystal OSC PGA+SDM_ ADC 32K_XO 32K_XI RAM Retention RAM VD12_PA VD12_RTX VD12_SYN MIC_BIAS OCP Bus VDIGI XO XI ROM alt VDDCORE SPI flash controller ARM CM4 Re VBAT *VDDIO *HVD Pm_n m=0,1..4 n=0,1..7 图 3-1 RTL8762C 硬件架构 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 15 RTL8762C SDK User Guide 4 软件架构 4.1 系统架构 如图 4-1 所示,软件架构包括几个主要的部分: GAP: 应用程序和 BLE 协议栈交互的抽象层。 GAP 接口的详细信息见 GAP Interfaces User Manual; Platform:包括 OTA,flash,FTL 等; IO Drivers:提供应用层访问 RTL8762C 外设的接口,无需直接访问寄存器; OSIF:实时操作系统的抽象层。 Application LE Profiles/Serivices ek FreeRTOS alt Re OSIF GAP Peripheral driver Co Platform features nfi CMSIS-Core Bluetooth LE Stack Hardware Modules al nti de ARM Cortex-M4 Peripherals 3rd Party Library Bluetooth BB, BF Realtek Implemented Vendor Implemented 图 4-1 RTL8762C 软件架构 4.2 操作系统 RTL8762C 上使用的是操作系统是 FreeRTOS V8.2, 该系统是运行在 ROM 上, 并且包括以下几个模块: 1. 任务管理 2. 队列管理 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 16 RTL8762C SDK User Guide 4.3 3. 中断管理 4. 资源管理 5. 内存管理 6. 时间管理 OS 接口 OSIF 是实现在 RealBlueTM 工程的。因为项目需求可能会更新到特定的 RTOS 版本,甚至换成一个不 同的 RTOS,所以需要提供 OSIF 层来清理不同 RTOS 间特定接口带来的不兼容问题。 如图 4-2 所示,OSIF 层通过封装特定的 RTOS 接口来提供一层统一的接口。使用 OSIF 的软件组件 能够在 RealBlueTM 工程的演进中更好地移植。开发者可以基于 OSIF 层提供自定义的 RTOS 实现,而不 需要在上层的软件做任何修改。所以,强烈推荐在软件开发中使用 OSIF 接口,而不是直接访问特定 RTOS Re 的接口,比如 FreeRTOS。 ek alt Co al nti de nfi 图 4-2 OSIF 架构 4.4 任务和优先级 4.4.1 任务 如图 4-3 所示,应用程序创建了 5 个任务: Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 17 RTL8762C SDK User Guide ek alt Re Co nfi 图 4-3 RTL8762C 任务 Description al nti de Task Priority timer FreeRTOS 实现的软件定时器 lower stack 蓝牙 HCI 层以下的协议栈实现 upper stack 蓝牙 HCI 层以上的协议栈实现 app 应用层功能的实现 1 Idle 后台空闲任务,包括低功耗的处理 0 4 4 3 说明: 可以创建多个 APP 任务,同时内存资源也会被相应地分配; Idle 任务和 Timer 任务是 FreeRTOS 创建的; 任务是配置成根据优先级抢占式的; 硬件中断服务例程(ISR)是由 Vendor 来实现的。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 18 RTL8762C SDK User Guide 4.4.2 优先级 任务分 4 种优先级:Priority SW Timer = Priority lower stack > Priority upper stack > Priority app> Priority Idle。 Task Priorities SW Timer LowerStack Upper Stack Application Lower Re Idle ek alt Co 图 4-4 任务优先级 al nti de nfi Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 19 RTL8762C SDK User Guide 5 应用程序 5.1 SDK 目录 SDK 目录如下所示: sdk bin doc board evb Sample project Re inc app alt bluetooth ek os peripheral Co nfi 图 5-1 SDK 目录 al nti tool board stack de src Directory platform Description 配置好可直接使用的 Keil 示例工程 doc 文档 inc 提供除了 ROM 符号以外的接口定义的头文件 bin 应用程序链接的二进制文件 src 应用程序的源码文件 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 20 RTL8762C SDK User Guide tool 工具集 5.2 示例工程 为了帮助创建应用程序,SDK 中已经创建好了许多示例工程,例如 PXP 以及一些 BLE 相关的示例工 程。通过学习示例工程,开发者可以很容易地熟悉 SDK。所有的示例工程已经配置好,并且根据 RTL8762C SOC 划分好内存。 下面以 PXP 为例,展示如何通过示例工程来开发客制化应用程序。下面的图摘自当前 SDK,实际可 能会随着 SDK 的更新而变化。 ek alt Re Co 图 5-2 PXP 工程示例 nfi PXP 工程中的文件分为以下几个类别: Include 目录主要是用来导出 UUID,而 UUID 是任何在 RTL8762C 运行的应用所必须的。应用开 de 发者不能修改此目录; Lib 目录包括应用程序使用的所有二进制文件; CMSIS 目录存放启动代码; APP 目录包括 PXP 应用的实现; Profile 目录包括应用使用的 BLE profiles 或者服务; Peripheral 目录包括应用使用的所有外设驱动和模块代码。 al nti 应用中的一些公共文件说明如下: File name Description rom_uuid.h UUID 头文件是 SDK 用来识别 ROM 的,无需更改 ROM.lib gap_utils.lib ROM 符号库,是应用程序链接 ROM 中的符号的 实现 BLE 功能的 Gap 库 startup_rtl8762c.s RTL8762C 应用程序启动的汇编文件 system_rtl8762c.c RTL8762C 应用程序启动的 C 文件 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 21 RTL8762C SDK User Guide board.h 配置引脚和 DLPS 的头文件 flash_map.h Flash layout 文件,此文件由 FlashMapGenerateTool 工具生成 mem_config.h Memory 配置相关的文件 示例工程可能会随着 SDK 一起更新。为了更好地使用最新的示例代码,建议把新增的用户代码组织 起来模块化。 每个示例工程的详细信息请参考对应示例工程的使用手册。 5.3 流程图 Start Stack Co Profile Init Realtek Handlers APP Queue Init ek Gap Init alt Board Init Vendor Handlers APP Task Entry Re Boot Code Driver Init nfi While(true) de Power Manager Init SW Timer Init Is there any messages for APP? al nti No Yes Task init Message Distribution BT Stack Handler OS Scheduler APP Handler 图 5-3 APP 流程 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 22 RTL8762C SDK User Guide 表 5-1 APP 初始化 Action board init gap init Description PINMUX 和 PAD 初始化设定 GAP 相关参数的初始化 profile init BLE Profiles 的初始化 power manager init 电源管理相关的初始化 SW timer init 软件定时器的初始化 app queue init APP Queue 的初始化 driver init 外设的初始化 系统是在 main()函数中初始化,包括:Board、Peripherals、BT Stack、Profile、Power 和 Task 等。 BT Stack,Profiles 和外设驱动是在应用层任务中初始化,并且实现了 IO 消息机制。所有的功能都被 Re 封装成 IO 事件,这些事件是在相关的消息处理器中处理。 BT Stack 消息也是被封装成 BT IO 事件,跟外设事件处理的方式一样。 ek alt Co de nfi al nti 图 5-4 IO 消息处理流程 5.4 消息和事件处理流程 原始 MSG 的来源有通用 Peripherals 的 ISR 和 BT Stack,处理流程如下: 1. 来自通用 Peripherals 的 MSG 会被 MSG 分发器转发给 IOMSG Handler 处理; 2. 来自蓝牙协议栈的 MSG 会被 MSG 分发器转发给 BT 状态机,BT 状态机处理完 MSG 后,会封装 成 BT IOMSG 发出,MSG 分发器收到 BT IO MSG 后再转发给 IO MSG Handler 处理; 3. IO MSG Handler 收到 MSG 后再判断 Event 类别,进而调用对应的 Event Handler 处理。 用户程序负责: 1. 实现 Peripheral ISR,在 ISR 中完成初步处理,如果需要进一步处理则封装 MSG 发给 APP; 2. 维护 IO MSG Handler,以便接收和处理用户定义的 ISR MSG; Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 23 RTL8762C SDK User Guide 3. 实现应用层相关的 Event Handler。 底层通知上层是通过 MSG 和 Event 机制,而上层可以直接调用底层的 APIs。 IO 消息 5.5 5.5.1 消息格式 typedef struct { uint16_tIoType; uint16_tsubType; uint32_tparm; alt Re union{ void *pBuf; }; ek }BEE_IO_MSG; Co 5.5.2 消息类型定义 { BT_STATUS_UPDATE, IO_KEYSCAN_MSG_TYPE, al nti de nfi enum IO_QDECODE_MSG_TYPE, IO_UART_MSG_TYPE, IO_KEYPAD_MSG_TYPE, IO_IR_MSG_TYPE, IO_GDMA_MSG_TYPE, IO_ADC_MSG_TYPE, IO_D3DG_MSG_TYPE, IO_SPI_MSG_TYPE, IO_MOUSE_BUTTON_MSG_TYPE, IO_GPIO_MSG_TYPE, MOUSE_SENSOR_MSG, APP_TIMER_MSG, Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 24 RTL8762C SDK User Guide IO_WRISTBNAD_MSG_TYPE }; 5.5.3 消息子类型定义 以 MOUSE_BUTTON_SubType 为例,定义 MOUSE BUTTON 的子类型: typedef enum { MOUSE_BTN_LEFT_PRESS, MOUSE_BTN_LEFT_RELEASE, MOUSE_BTN_RIGHT_PRESS, Re MOUSE_BTN_RIGHT_RELEASE, MOUSE_BTN_MIDDLE_PRESS, } MOUSE_BUTTON_SubType; 5.5.4 用户自定义消息 ek alt MOUSE_BTN_MIDDLE_RELEASE Co APP 开发者可以根据需求扩充定义 Message Type 以及自定义 Subtype Message。 nfi 5.6 Pin 设置 de 引脚的定义在 board.h 中定义: P4_0 #define BEEP P4_1 #define LED_0 P2_1 #define LED_1 P2_4 al nti #define KEY_0 5.7 DLPS 设置 DLPS 的配置是在 board.h 中,如下所示: 1. DLPS 功能开关: #define CONFIG_DLPS_EN 1 2. 用户自定义的 DLPS CB,在进入 DLPS 或者退出 DLPS 时调用这两个 CB。 #define USE_USER_DEFINE_DLPS_EXIT_CB 1 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 25 RTL8762C SDK User Guide #define USE_USER_DEFINE_DLPS_ENTER_CB 3. 1 外设功能开关,需要使用的外设必须对应打开,这样在进入 DLPS 的时候才会保存外设的寄存器 设定,退出 DLPS 的时候恢复外设的寄存器设定。没有使用的外设请关闭(0 表示关闭,1 表示打开) #define USE_I2C0_DLPS 0 #define USE_I2C1_DLPS 0 #define USE_TIM_DLPS 0 #define USE_QDECODER_DLPS 0 … ek alt Re Co al nti de nfi Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 26 RTL8762C SDK User Guide 6 存储 6.1 存储映射 RTL8762C 内存包括 ROM,RAM,external SPI Flash 和 eFuse。 Cache 有专用的 RAM,并且这块专 用的 RAM 也能配置成通用 RAM 来使用, 如 Figure 6-1 所示。细节请参考文档 RTL8762C Memory User Guide。 0x0100_0000 Ext Flash (8kk) 0x0080_0000 Re 0x0028_8000 Buffer RAM (32kB) alt 0x0028_0000 0x0022_0000 Cache ek (16kB) 0x0021_C000 Data RAM Co (112kB) 0x0020_0000 nfi 0x0005_FFFF de ROM (384kB) al nti 0x0000_0000 Figure 6-1 Memory Map 6.2 ROM ROM 代码位于地址[0x0, 0x60000),其中包括 Boot loader、RTOS、BT Stack、Flash Driver 以及别的平 台模块。 6.3 RAM RTL8762C 有两块 RAM:Data RAM 的位置在[0x00200000, 0x0021C000),而 Buffer RAM 的位置在 [0x00280000, 0x00288000)。Cache 可以被配置成 Data RAM,它的地址是在 [0x0021C000, 0x00220000)。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 27 RTL8762C SDK User Guide 6.3.1 Data Ram SDK 中 Data RAM 默认是分成了 6 部分,如 Figure 6-2 所示。APP RAM 和 Data RAM Heap 的总大小 是 65K,不可更改,但是每个模块的大小是可以通过 mem_config.h 调整的。 Patch RAM2 (16 KB) Data RAM Heap (30 KB*) Re ek alt APP RAM (35 KB*) Patch RAM1 (17 KB) Co Main Stack (2KB) Rom Data (12KB) nfi 0x00200000 de * means the size is adjustable Figure 6-2 Data ram layout al nti 6.3.2 Buffer Ram SDK 中 Buffer RAM 默认是分成了 2 部分,如 Figure 6-3 所示。 Buffer RAM Heap (30 KB) 0x280000 Rom Data (2KB) Figure 6-3 Buffer RAM Layout Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 28 RTL8762C SDK User Guide 6.4 Cache RTL8762C 有一块 16K 字节的 cache,它是和 SPIC (SPI Flash Controller)一起工作来加快 SPI Flash 读操 作。Cache 也可以当成 Data RAM 使用,如果 Cache 被配置成 Data RAM,它可以用作数据存储也可以用作 代码执行,并且它的地址范围是[0x0021C000, 0x0022C000),该地址范围是在 data RAM 的最后。 6.5 Flash RTL8762C 支持最大 16M 字节大小的 external SPI Flash。在 SDK 中,external Flash 默认是分成 7 份, 如图 6-4 所示: Starting Starting Address: Address: 0x800000 0x800000 Reserved Re Starting Starting Address: Address: 0x801000 0x801000 OEM Header alt OTA Bank 0 ek OTA Bank 1 FLASH Transport Layer Co OTA Temp Area APP Defined Section nfi 图 6-4 External Flash Layout de al nti 6.5.1 Flash APIs Flash 操作的 APIs 如下所列,详细请查阅 BEE2-SDK.chm: void flash_read(uint32_t start_addr, uint32_t data_len, uint8_t *data) uint32_t flash_split_read(uint32_t start_addr, uint32_t data_len, uint8_t *data); uint32_t flash_auto_read(uint32_t addr); bool flash_read_locked(uint32_t start_addr, uint32_t data_len, uint8_t *data); bool flash_split_read_locked(uint32_t start_addr, uint32_t data_len, uint8_t *data, uint32_t *counter); bool flash_auto_read_locked(uint32_t addr, uint32_t *data); void flash_write(uint32_t start_addr, uint32_t data_len, uint8_t *data); void flash_auto_write(uint32_t start_addr, uint32_t data); Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 29 RTL8762C SDK User Guide void flash_auto_write_buffer(uint32_t start_addr, uint32_t *data, uint32_t len); bool flash_write_locked(uint32_t start_addr, uint32_t data_len, uint8_t *data); bool flash_auto_write_locked(uint32_t start_addr, uint32_t data); bool flash_auto_write_buffer_locked(uint32_t start_addr, uint32_t *data, uint32_t len); void flash_erase(T_ERASE_TYPE type, uint32_t addr); 6.5.2 FTL FTL(flash transport layer)是 BT Stack 和用户程序读写 flash 数据的抽象层。FTL 的逻辑地址范围是[0, 0x17f0)。 1. Re • 地址范围:[0x0000, 0x0C00); • 此范围是用于存储 BT 信息,例如设备地址,link key 等; • 详细请参考 RTL8762C BLE Stack User Manual。 APP 存储空间 ek alt 2. BT 存储空间 地址范围:[0x0C00, 0x17f0); • 此范围是用于存储 APP 的信息; • 可以用下面的 APIs 在此范围内读/写数据,详细请参考 BEE2-SDK.chm: Co • eFuse de 6.6 nfi static uint32_t ftl_save(void * p_data, uint16_t offset, uint16_t size) static uint32_t ftl_load(void * p_data, uint16_t offset, uint16_t size) al nti eFuse 是一次编程的存储体,用来存储重要且固定的信息,例如:UUID,security key 以及其它的只会 配置一次的信息。 eFuse 中每个 bit 不能从 0 改成 1,并且也没有擦除的操作,所以更新 eFuse 要十分小心。 Realtek 提供 MP Tool 更新 eFuse。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 30 RTL8762C SDK User Guide 7 中断 7.1 Nested Vectored Interrupt Controller (NVIC) NVIC 特性: 16 个 Cortex-M4 异常,32 条可屏蔽的中断通道 8 个可编程的中断优先级 支持向量表的重映射 低延迟异常和中断处理 系统控制寄存器(System Control Registers)的实现 NVIC 和处理器内核接口紧密耦合,使得低延迟中断处理和高效处理晚抵达中断成为可能。所有的中 7.2 中断向量表 alt Re 断包括内核异常都由 NVIC 管理。 Exception Number NVIC Number ek 表 7-1 中断向量表 Exception Type Description Co 2 NMI 3 Hard Fault Reset Nonmaskable interrupt. The WDG is linked to the NMI vector de Reset nfi 1 All fault conditions if the corresponding fault handler is not enabled al nti Memory management fault; Memory 4 MemManage Protection Unit (MPU) violation or access to illegal locations 5 BusFault Bus error; 6 Usage fault Exceptions resulting from program error 7 ~ 10 RSVD 11 SVC 12 Debug Monitor 13 RSVD 14 PendSV Pendable Service Call 15 SYSTICK System Tick Timer Supervisor Call Debug monitor (breakpoints, watch points, or external debug requests) Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 31 RTL8762C SDK User Guide [0] System_ISR System interrupt 17 [1] WDG Watch dog global interrupt 18 [2] BTMAC_ISR BT MAC interrupt 19 [3] Timer3 Timer3 global interrupt 20 [4] Timer2 Timer2 global interrupt 21 [5] Platform Platform interrupt 22 [6] I2S_0 TX I2S_0 TX interrupt 23 [7] I2S_0 RX I2S_0 RX interrupt 24* [8] Timer[4:7] Timer4-7 interrupt(refer to 错误!未找到引用源。) 25 [9] GPIO4 GPIO interrupt, P0_4 26 [10] GPIO5 GPIO interrupt, P0_5 27 [11] RTK_UART1 RTK_UART1 interrupt 28 [12] RTK_UART0 RTK_UART0 interrupt 29 [13] RTC Real time counter interrupt 30 [14] 31 [15] 32 [16] 33 alt Re 16 SPI_0 interrupt SPI_1 SPI_1 interrupt I2C_0 I2C_0 interrupt [17] I2C_1 I2C_1 interrupt 34 [18] ADC ADC global interrupt 35* [19] Peripheral_ISR Peripheral interrupt(refer to 错误!未找到引用源。) 36 [20] GDMA0_Channel0 37 [21] GDMA0_Channel1 38 [22] GDMA0_Channel2 39 [23] GDMA0_Channel3 40 [24] GDMA0_Channel4 41 [25] GDMA0_Channel5 42 [26] GPIO_Group3 GPIO group3 interrupt(refer to 错误!未找到引用源。) 43 [27] GPIO_Group2 GPIO group2 interrupt(refer to 错误!未找到引用源。) 44 [28] IR IR module global interrupt 45 [29] GPIO_Group1 GPIO group1 interrupt(refer to 错误!未找到引用源。) 46 [30] GPIO_Group0 GPIO group0 interrupt(refer to 错误!未找到引用源。) 47 [31] RTK_UART2 RTK_UART2 interrupt ek SPI_0 Co RTK-DMA0 channel 1 global interrupt de nfi RTK-DMA0 channel 0 global interrupt RTK-DMA0 channel 2 global interrupt al nti RTK-DMA0 channel 3 global interrupt RTK-DMA0 channel 4 global interrupt RTK-DMA0 channel 5 global interrupt 表 7-2 Timer 4~7 ISR Exception Number NVIC Number Exception Type Description Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 32 RTL8762C SDK User Guide 48 [8] Timer4 Timer4 interrupt 49 [8] Timer5 Timer5 interrupt 50 [8] Timer6 Timer6 interrupt 51 [8] Timer7 Timer7 interrupt 表 7-3 Peripheral ISR Exception Number NVIC Number Exception Type Description [19] SPI_Flash SPI_Flash interrupt 53 [19] qdecode qdecode global interrupt 54 [19] keyscan keyscan global interrupt 55 [19] 2-wire SPI 2-wire/3-wire SPI interrupt [19] analog comparator analog comparator interrupt [19] MailBox MailBox interrupt [19] I2S_1 TX I2S_1 TX interrupt [19] I2S_1 RX I2S_1 RX interrupt 56 57 alt 58 Re 52 59 ek 60 [19] LCD LCD interrupt NVIC Number Co 表 7-4 GPIO Group3 ISR Exception Type Description GPIO3 [26] GPIO7 [26] GPIO11 [26] GPIO15 [26] GPIO19 [26] GPIO23 [26] GPIO27 al nti nfi [26] GPIO3 interrupt [26] GPIO31 GPIO31 interrupt GPIO7 interrupt de GPIO11 interrupt GPIO15 interrupt GPIO19 interrupt GPIO23 interrupt GPIO27 interrupt 表 7-5 GPIO Group2 ISR NVIC Number Exception Type Description [27] GPIO2 GPIO2 interrupt [27] GPIO6 GPIO6 interrupt [27] GPIO10 GPIO10 interrupt [27] GPIO14 GPIO14 interrupt Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 33 RTL8762C SDK User Guide [27] GPIO18 GPIO18 interrupt [27] GPIO22 GPIO22 interrupt [27] GPIO26 GPIO26 interrupt [27] GPIO30 GPIO30 interrupt 表 7-6 GPIO Group1 ISR NVIC Number Exception Type Description GPIO1 [29] GPIO9 GPIO9 interrupt [29] GPIO13 GPIO13 interrupt [29] GPIO17 GPIO17 interrupt [29] GPIO21 GPIO21 interrupt [29] GPIO25 GPIO25 interrupt GPIO29 GPIO29 interrupt [29] GPIO1 interrupt alt Re [29] NVIC Number ek 表 7-7 GPIO Group0 ISR Exception Type Description Co GPIO8 [30] GPIO12 [30] GPIO16 [30] GPIO20 [30] GPIO24 [30] GPIO28 GPIO8 interrupt GPIO12 interrupt GPIO16 interrupt GPIO20 interrupt GPIO24 interrupt al nti [30] GPIO0 interrupt de GPIO0 nfi [30] GPIO28 interrupt 7.3 中断优先级 RTL8762C 中断支持 3 个固定最高优先级和 8 个可编程优先级。 表 7-8 中断优先级 Priority Usage -3 Reset Handler -2 NMI -1 Hard Fault 0 用于实时性要求非常高的中断。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 34 RTL8762C SDK User Guide 此优先级的中断不会被 FreeRTOS 的临界区屏蔽,但是中断处理函数内不能调用任何 FreeRTOS 的 1 APIs。 BT 相关的中断 2 3 4 通用的中断 5 6 SysTick 和 PendSV 7 8 电量管理 Low Power State。 Re RTL8762C 会在某些条件满足时进入 DLPS,在需要正常工作时唤醒。详细请参考文档 RTL8762C Deep alt 以下是要进入 DLPS 满足的条件: Idle task 在执行,即其余的 task 都处于 block 状态或者 suspend 状态,且没有 ISR 执行; 2. 所有 OS 的消息已经被处理; 3. BT Stack,peripherals 和 application 等注册的 Check Callback 执行返回 true; 4. 软件定时器超时时间大于 20ms; 5. BT 在如下的某个状态,并且参数满足要求: ek 1. Co Standby State 2) BT Advertising State, Advertising Interval*0.625ms >=20ms 3) BT Scan State, (Scan Interval – Scan Window)*0.625ms >= 15ms 4) BT connection as Master role, Connection interval * 1.25ms >= 12.5ms 5) BT connection as Slave role, Connection interval* (1+ Slave latency)*1.25ms >= 12.5ms RTL8762C 可以由以下事件从 DLPS 唤醒: 1. PAD 唤醒信号 al nti de nfi 1) 2. 下列场景下产生的 BT 中断 1) 处于 BT advertising,advertising anchor 到来; 2) 处于 BT connection,connection interval anchor 到来; 3) 有 BT 事件发生,如远端连接请求或者收到数据。 3. RTC 中断 该功能需要调用以下 API 使能: void RTC_EnableSystemWakeup(void) 4. SW Timer 超时 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 35 RTL8762C SDK User Guide Application 中 DLPS 模式的示例代码 1.注册 CHECK Callback 函数:系统会调用 Callback 函数来决定是否能进 DLPS。 if (false == dlps_check_cb_reg(DLPS_PxpCheck)) { DBG_DIRECT("Error: dlps_check_cb_reg(DLPS_PxpCheck) failed!\n"); } 2.实现 CHECK Callback 函数:如果返回 True,允许进入 DLPS;如果返回 False,不允许进入 DLPS。以 PXP 应用为例: bool DLPS_PxpCheck(void) { return allowedPxpEnterDlps; Re } 3.注册 Callback 函数来保存和恢复外设寄存器: 外设在进入 DLPS 时会掉电,所以在进 DLPS 时要保存外设寄存器状态,在退出 DLPS 时恢复外设寄存器状态。 alt 外设寄存器值应该在 DLPS_IO_EnterDlpsCb 函数中保存,在 DLPS_IO_ExitDlpsCb 函数中恢复。 ek dlps_hw_control_cb_reg(DLPS_IO_EnterDlpsCb, DLPS_ENTER); dlps_hw_control_cb_reg(DLPS_IO_ExitDlpsCb, DLPS_EXIT4_BT_READY); 4.使能 DLPS 模式: Co lps_mode_set(LPM_DLPS_MODE); al nti de nfi Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 36 RTL8762C SDK User Guide 9 烧录 Images 相关 9.1 RTL8762C BLE 应用要 5 个 images:Patch Image、App Image、System Configuration File、OTA Header File 和 Secure Boot Loader Image。 1. Patch Image:Realtek 发布,ROM code 中保留了 Patch 函数入口,通过 Patch 可以修改 ROM code 原有行为、扩充 ROM code 功能等; 2. Configuration file 记录 IC 硬件配置和蓝牙配置等信息,例如:配置 BT 地址,修改 Link 数目等。 可通过 MP Tool 配置生成; App Image:开发者开发的 BLE 应用程序。由 Keil 工程编译生成,并经过 fromelf 等工具处理; 4. OTA Header File:定义 Flash Bank layout 的文件,由 MPPackTool 生成; 5. Secure Boot Loader Image:Realtek 发布,优化 Boot Flow。如果是不切 bank 的 OTA 方式升级, Re 3. Image 处理工具 9.2 ek alt 必须要烧录;如果是切 bank 的 OTA 方式升级,不需要烧录。 Co Keil 编译直接生成的 application image 是 ELF 格式的,为了便于烧录以及支持 OTA 功能,需要将 ELF 格式的 application image 转换为二进制格式的 bin 文件,并作相应处理。 nfi Demo 工程中使用了 3 个 Command 来处理 application image,分别是 fromelf, CheckSum_Gen 以及 md5.exe。 al nti de 9.2.1 fromelf Fromelf 来自 Keil(默认安装路径:C:\Keil_v5\ARM\ARMCC\bin\),具体用法可参考 Keil 帮助文档中 的《Using the fromelf Image Converter》一节。 使用该工具产生烧录的 bin 文件以及反汇编文件。 9.2.2 CheckSum_Gen 1. 用法:CheckSum_Gen.exe [Input Binary Filename] [Output Binary Filename] 2. 作用:为支持 OTA 功能,需要在 bin 文件添加校验以及长度信息。 对于 Application Image,其最开始 1024 字节是 image Header,详细请查看 system_rtl8762c.c 中定义的 T_IMG_HEADER_FORMAT 结构。 Application Image 的 Checksum 可以是 crc16 或者 sha256,分别记录在 T_IMG_HEADER_FORMAT 结 构体中的 crc16 和 sha256 成员,payload 长度记录在 payload_len 成员。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 37 RTL8762C SDK User Guide typedef struct _IMG_CTRL_HEADER_FORMAT { uint8_t ic_type; uint8_t secure_version; union { uint16_t value; struct { uint16_t xip: 1; // payload is executed on flash uint16_t enc: 1; // all the payload is encrypted Re uint16_t load_when_boot: 1; // load image when boot uint16_t enc_load: 1; // encrypt load part or not uint16_t enc_key_select: 3; // referenced to ENC_KEY_SELECT alt uint16_t not_ready : 1; //for copy image in ota ek uint16_t not_obsolete : 1; //for copy image in ota uint16_t integrity_check_en_in_boot : 1; // enable image integrity check in boot flow uint16_t rsvd: 6; Co }; } ctrl_flag; uint16_t crc16; de nfi uint16_t image_id; uint32_t payload_len; al nti } T_IMG_CTRL_HEADER_FORMAT; typedef struct _IMG_HEADER_FORMAT { T_IMG_CTRL_HEADER_FORMAT ctrl_header; uint8_t uuid[16]; uint32_t exe_base; uint32_t load_base; uint32_t load_len; uint8_t rsvd0[8]; uint32_t magic_pattern; uint8_t dec_key[16]; Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 38 RTL8762C SDK User Guide uint8_t rsvd1[28]; T_VERSION_FORMAT git_ver; RSA_PUBLIC_KEY rsaPubKey; uint8_t sha256[32]; uint8_t rsvd2[76]; } T_IMG_HEADER_FORMAT; 9.2.3 md5 1. 用法:md5.exe [Input Binary Filename]; 2. 作用: 计算 bin 文件的 MD5, 并且加到 bin 文件中, 用于 MP Tool 烧录时验证。 后缀形式为:[Original File Name]-[MD5].bin; Re MP Tool 采用 MD5 作为烧录文件的校验值,并要求将 MD5 值加入到待烧录文件的文件名后缀中。比 如 原 始 文 件 名 为 App_ver1.1.0 .bin , 经 md5.exe 处 理 后 , 带 后 缀 的 文 件 名 为 : alt App_ver1.1.0-d77dd83cb2848d3e9ac04c7dd9367e69.bin, will be created in the same directory。 ek 9.3 烧录方式 Co Patch Image,Config File 和 App Image 分别支持的下载的方式如错误!未找到引用源。: 表 9-1 Images 可用烧录方式 × SWDTool √ MPTool √ Config File APP Image × √ √ √ √ √ al nti de Keil nfi Patch Image 10 调试 有两种方式可以调试应用程序: 1. 使用 log 机制跟踪代码的执行和数据; 2. 使用 Keil MDK 和 SWD 进行 running control,增加/删除 breakpoints 以及访问/追踪 memory 等。 10.1 Log 机制 Debug analyzer 是用来通过打印 log 的方式来追踪应用程序的执行情况,以及抓取 BT 的数据并进一步 通过第三方 BT 分析工具来分析。参考 Debug analyzer user manual 来获取详细的信息。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 39 RTL8762C SDK User Guide P0_3 是默认作为 Log UART 的输出引脚(也可以将 Log 功能重新配置到其它引脚),经 UART-to-USB 连接到 PC,在 PC 端 COM 口接收 Log 数据。 10.1.1 Debug analyzer 使用 Debug analyzer 的步骤: 1. 打开 DebugAnalyzer.exe,点击“Settings”,之后点击“Start”即可。 ek alt Re Co nfi 图 10-1 Debug Analyzer 主页面 “Settings”界面中,“Serial Port”要选择 LOG 对应的 COM 口; 3. “App Trace File”要选择对应的 App.trace。 App.trace 是在 APP 程序编译后和 App.bin 生成在同一 al nti 个目录位置。 de 2. Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 40 RTL8762C SDK User Guide ek alt Re Co de nfi Debug analyzer 提供的一些高级功能: 1. al nti 图 10-2 Debug Analyzer 设置页面 “Save Raw File” (建议勾选):保存 Log 到 xxx.bin 文件,此文件可以提供给 Realtek 做进一步的分 析; 2. “Log Filter”:过滤显示。弹出新窗口,只显示满足过滤条件的 Log; 3. “keyword search”:在 Log 打印窗口高亮显示关键字; 4. “Clear Trace”:清空显示框中的 Log。 Debug analyzer 会 自 动 保 存 Log 文 件 , 并 按 照 端 口 号 和 生 成 时 间 命 名 , 如 COM 5_2015-06 -12_18-05-00.log。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 41 RTL8762C SDK User Guide 10.1.2 Log 打印基本接口 硬件有实现特定的 GDMA 通道来打印 Log,log 接口声明: DBG_BUFFER(T_LOG_TYPE type, T_LOG_SUBTYPE sub_type, T_MODULE_ID module, uint8_t level, char* fmt, unit8_t param_num,...). 参数 type 固定是 TYPE_BEE2,sub_type 固定是 SUBTYPE_FORMAT。只要关心参数 module 和 level。 T_MODULE_ID 类型中有预定义好几种 module,这些 module 用于将 log 分类别。Debug Analyzer 能 够识别这些 module,在每条打印的 log 前自动加到 module 名称。 还有一个概念是 Debug Level,表示 log 要打印的级别。定义了 4 种类别: 表 10-1 调试等级 Debug Level Usage Scenario LEVEL_ERROR Fatal, Procedure Cannot Advance (Log Token !!!) LEVEL_INFO Abnormal Condition Occurred, But Procedure Can Advance (Log Token !!*) Important Notification (Log Token !**) Verbose Debug alt LEVEL_TRACE Re LEVE_WARN ek DBG_BUFFER() 接口虽然灵活、功能丰富,但是也会有一点不容易使用。RTL8762C SDK 有包装此 接口,在 trace.h 中提供了一些易读性更强的 APIs。 Co 10.1.3 Log 打印封装接口 nfi 有提供一些封装的 APIs 来打印 Log,这些 APIs 有一个通用的语法: de {MODULE}_PRINT_{LEVEL}_{PARAMNUM}(...) {MODULE} 可以用定义在 trace.h 中的 module 名称代替,例如 APP/GAP/USB/FLASH... • {LEVEL} 可以用这四种 level 代替:ERROR/WARN/INFO/TRACE。 • {PARAMNUM} 可以用数字 0 到 8 代替,意味着这条 log 会打印参数的个数。 al nti • 例如,如果想要打印一条含 2 个参数的 log,可以像这样写: APP_PRINT_WARN2("Test app: ID = %d, data = 0x%x", id, data); Debug Analyzer 会如下显示这条 Log: 00494 10-13#17:06:45.994 087 02145 [APP] !!*Test app: ID = 3, data = 0xF0 说明: 1. 不要超过 8 个参数 (如果使用 DBG_BUFFER()接口,最多允许 20 个参数); 2. 单条 log 中不要超过 128 个字符串; 3. 如果可能,尽量把所有的参数放到一条打印语句中。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 42 RTL8762C SDK User Guide 10.1.4 辅助打印接口 DBG_BUFFER()接口只能打印诸如(d,i,u,o,x)的整型、字符和指针类型,但是有时候可能需要 打印 string,binary array 或者 BT 地址,那么需要用到几个辅助的打印接口: 1. TRACE_STRING(char* data) 直接打印字符串,转换符%s。 2. TRACE_BINARY(uint16_t length, uint8_t* data) 以 16 进制格式打印二进制字符串,转换符%b。 3. TRACE_BDADDR(char* bd_addr) 以 BT 地址格式打印二进制字符串,例如: Hex Array: 0xaa 0xbb 0xcc 0xdd 0xee 0xff –> Literal String: FF::EE::DD::CC::BB::AA 10.1.5 Log 打印示例 alt Re 说明:单条 Log 中最多能有 4 个地址,转换符%s。 Log 打印代码: ek 下面的例子展示了 log APIs 的一般用法,以及在 Debug Analyzer 上对应的输出: Co uint32_t n = 77777; uint8_t m = 0x5A; uint8_t bd1[6] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55}; uint8_t bd2[6] = {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}; char c1[10] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'}; char c2[8] = {'a', 'b', 'C', 'd', 'E', 'F', 'g', 'H'}; char *s1 = "Hello world!"; char *s2 = "Log Test"; ADC_PRINT_TRACE1("ADC value is %d", n); UART_PRINT_INFO3("Serial data: 0x%x, c1[%b], s1[%s]", m, TRACE_BINARY(10, c1), TRACE_STRING(s1)); GAP_PRINT_WARN6("n[%d], m[%c] bd1[%s], bd2[%s], c2[%b], s2[%s]", n, m, TRACE_BDADDR(bd1), TRACE_BDADDR(bd2), TRACE_BINARY(8, c2), TRACE_STRING(s2)); APP_PRINT_ERROR0("APP ERROR OCCURED..."); al nti de nfi Debug Analyzer 上对应的输出结果: 00252 10-25#17:12:02.021 132 10241 [ADC] ADC value is 77777 00253 10-25#17:12:02.021 133 10241 [UART] !**Serial data: 0x5a, c1[31-32-33-34-35-36-37-38-39-30], s1[Hello world!] 00254 10-25#17:12:02.022 134 10241 [GAP] !!*n[77777], m[Z] bd1[55::44::33::22::11::00], bd2[FF::EE::DD::CC::BB::AA], c2[61-62-43-64-45-46-67-48], s2[Log Test] 00255 10-25#17:12:02.022 135 10241 [APP] !!!APP ERROR OCCURED... Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 43 RTL8762C SDK User Guide 10.1.6 Log 控制接口 有时候可能需要控制某些 log 的打开和关闭。 一种方式是通过设定 MP Tool 中的 Config File,再将 Config File 烧录到 RTL8762C,然而如果想要频繁改变 log 打印 level,那么这种方式可能就不够灵活了,因为要 每次重烧 Config File 也不方便。所以 SDK 中有提供 3 个 APIs 来控制特定 module 的特定 level。 1. log_module_trace_init() 2. log_module_trace_set() 3. log_module_bitmap_trace_set() 查阅 SDK API 文档获取详细的参数信息。 这里通过一些场景来帮助你理解如何在应用程序中使用 log 控制的 APIs。假设 log 打印功能已经打开, 并且 Config File 中将所有的 log trace mask 置成 1,意味着所有 module 的所有 level 的 log 都会打印出来。 Re 场景 1:关闭 APP module 的所有 trace 和 info 级别的 log。 ek alt int main(void) { log_module_trace_set(MODULE_APP, LEVEL_INFO, false); log_module_trace_set(MODULE_APP, LEVEL_TRACE, false); ... } 场景 2:只打开 PROFILE module 的 log。 Co de nfi int main(void) { uint64_t mask[LEVEL_NUM]; memset(mask, 0, sizeof(mask)); log_module_trace_init(mask); al nti log_module_trace_set(MODULE_PROFILE, LEVEL_ERROR, true); log_module_trace_set(MODULE_PROFILE, LEVEL_WARN, true); log_module_trace_set(MODULE_PROFILE, LEVEL_INFO, true); log_module_trace_set(MODULE_PROFILE, LEVEL_TRACE, true); ... } 场景 3:关闭 PROFILE/PROTOCOL/GAP/APP module 的 trace 级别 log。 int main(void) { log_module_bitmap_trace_set(MODULE_BIT_PROFILE | MODULE_BIT_PROTOCOL | MODULE_BIT_GAP |MODULE_BIT_APP, LEVEL_TRACE, false); ... } 场景 4:关闭除了 APP module 以外的所有 trace 和 info 级别的 log,包括关闭 BT Snoop log。 int main(void) Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 44 RTL8762C SDK User Guide { for (uint8_t i = 0; i < MODULE_NUM; i++) { log_module_trace_set((T_MODULE_ID)i, LEVEL_TRACE, false); log_module_trace_set((T_MODULE_ID)i, LEVEL_INFO, false); } log_module_trace_set(MODULE_APP, LEVEL_INFO, true); log_module_trace_set(MODULE_APP, LEVEL_TRACE, true); log_module_trace_set(MODULE_SNOOP, LEVEL_ERROR, false); ... } 说明:如果 MODULE_SNOOP 的 LEVEL_ERROR log 打开,那么 Debug Analyzer 能产生 BT Snoop 的 log 文件(*.cfa) 。换句话说,如果关闭 MODULE_SNOOP 的 log,那么就不会产生 BT Snoop log,如上 面场景 2 和场景 4。 alt Re 10.1.7 DBG_DIRECT 通过调用基于 DBG_BUFFER 接口的函数打印 log 对系统性能的影响比较小,但是打印实时性不高, ek 因为通过这些 APIs 打印的 log 会被缓存到 buffer 中,在系统空闲的时候发送给 Log Uart。 DBG_DIRECT 用来打印实时 log。这个 API 打印 log 对系统的影响比较大,因为会直接发送数据给 Log Co Uart,在 Log 打印完之前系统不能继续执行,所以强烈建议只在以下一些特定的情况下使用该 API: 在系统重启前 2. 实时性要求高的场景 3. 在 DLPS exit callback 中 de nfi 1. 打印 Log 的示例代码: DBG_DIRECT("Bee2 ROM version: %s %s", __DATE__, __TIME__); al nti Debug Analyzer 上对应的输出结果: 00002 12-22#19:19:32.573 004 00000 Bee2 ROM version: Dec 22 2017 14:54:04 10.2 SWD 调试 如图 10-1 所示,Bee2 实现了以下 3 个基本的调试接口:run control,breakpoint 和 memory access,还 有一个 trace 口:DWT。JTAG 在 Bee2 不支持,支持 SWD。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 45 RTL8762C SDK User Guide alt Re Co 10.2.1SWD 调试接口 ek 图 10-1 Bee2 调试接口 在使用 SWD 之前,应该确保已经安装和配置好 Keil MDK-ARM 和 SWD debugger。 • Breakpoints 按钮:Add/Delete/Conditional • 一些调试的功能窗口: 1. Core registers 窗口:监视/修改 MCU 寄存器值; al nti Running control 按钮:Running/Reset/Step de • nfi Bee2 支持的主要的调试特性如 UI 上展示的: 2. Disassembly 窗口:查看反汇编代码,支持断点和 mixed 模式(显示 C 代码) ; 3. Source code 窗口:查看 C 代码,支持断点以及变量的实时显示; 4. Variable watch window:查看加入监视的变量值; 5. Memory window:显示/修改待查的内存,支持直接的地址输入和可变的地址输入;. 6. Call stack and local variable window:显示当前的调用栈,以及 local 变量(即 stack 上的变量)。 有时候可能会遇到 image 无法成功下载到 Bee2 flash 上,或者即使 Bee2 有正确和 J-link 连接,但是依 旧找不到 SWD,这时检查下如下的配置可能会有帮助: • 更改 debug clock 到一个较小的值(例如,从 2MHz 降到 1 MHz),或者换用更短的 SWD 调试线; • Bee2 可能已经进入了 DLPS 模式,reset Bee2,这样系统会保持处于 active 状态 5 秒钟。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 46 RTL8762C SDK User Guide 10.2.2DWT 监视接口 Bee2 提供一种使用 DWT 追踪 memory 的方式。一组共 4 个 API 用来监视最多 4 块 memory 区域: watch_point_0_setting() watch_point_1_setting() watch_point_2_setting() watch_point_3_setting() 更多细节请查阅 debug_monitor.h。 下面的示例展示了如何使用 debug monitor API: void debug_monitor_enable(void) { //set debug monitor priority NVIC_SetPriority(DebugMonitor_IRQn, 3); Re //enable exception and monitor control register CoreDebug->DEMCR |= CoreDebug_DEMCR_MON_EN_Msk | CoreDebug_DEMCR_TRCENA_Msk; alt ek //comment: set appropriate parameter and enable watch point to specific address if desired //set DWT compare registers (max 4 comparators) watch_point_0_setting(0x1000180C, DWT_DATAVSIZE_WORD, DWT_FUNCTION_WRITE); watch_point_1_setting(0x10000004,DWT_DATAVSIZE_WORD,DWT_FUNCTION_READ_OR_WRITE); watch_point_2_setting(0x10000008,DWT_DATAVSIZE_WORD,DWT_FUNCTION_READ_OR_WRITE); watch_point_3_setting(0x1000000C,DWT_DATAVSIZE_WORD,DWT_FUNCTION_READ_OR_WRITE); Co al nti de } nfi //enable DWT control register DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; return; 如果被监视的内存被访问了,那么会通过 Log Uart 打印出来,就能通过 Debug Analyzer 来分析了。 Copyright 2018 Realtek Semiconductor Corporation. All Rights Reserved. 47
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.5 Linearized : No Encryption : Standard V2.3 (128-bit) User Access : (none) Creator : Microsoft® Word 2016 Title : Bee项目文档规范 Author : Chuanguo Xue Producer : Microsoft® Word 2016; modified using iTextSharp 5.0.5 (c) 1T3XT BVBA Subject : V1.2 Modify Date : 2018:09:21 11:34:53+08:00 Create Date : 2018:09:21 11:23:14+08:00 Tagged PDF : Yes Language : zh-CN Page Count : 47EXIF Metadata provided by EXIF.tools