NXP Designs Knowledge Base

cancel
Showing results for 
Search instead for 
Did you mean: 

NXP Designs Knowledge Base

Discussions

Sort by:
         随着近年来人们对日常出行品质的提高,电动自行车(包括共享类)市场得到了飞速发展,其功能日趋复杂智能。作为电控部分的“三大件”,电驱,主控和仪表也在不断升级迭代,其中电驱发展经历了最早期的直流有刷电机驱动到直流无刷方波驱动再到如今的 FOC 正弦波驱动,主控从以前附属在电驱或者仪表里的边缘化概念到如今独立出来的中心化,仪表则从普通的段式 LED 显示到如今尺寸越来越大功能越来越丰富的彩屏显示,而相对应的负责沟通互联“三大件”的通信总线也从传统的单总线到 TTL UART 到 RS485 再到如今逐渐展露头脚的 CAN 总线。对于电动自行车这种大众型消费市场来说,这些电控部分的升级换代给MCU 带来新的机遇的同时也对其性能,外设资源和价格带来了极大挑战。基于此, 针对三大件之一的仪表市场,NXP 开发了一套基于高性价比 LPC5506 系列 MCU 的 E-Bike 迈速表中低端显示屏方案。 系统框图:   主要特性: 4.5v~85v 宽范围电压输入,支持 24v , 36v 和 48v 锂电池组电源直接接入; 主控 LPC5506 支持 CAN 通信, 8080 16bit/8bit LCD 接口,且封装为 LQFP 10*10mm ,利于仪表小型化; 支持 3.5 寸 320*480 16bit 及以下尺寸的 TFT LCD 显示屏,预留 I2C 接口的电阻屏触摸控制芯片; 支持开源免费的 ZLG AWTK GUI 和 LittleVgl GUI 框架; 板载光敏传感器,可用于根据环境光自动调节 LCD 背光亮度; 板载六轴 Motion Sensor ( MPU6050 ),可用于转把方向检测,防盗检测和自行车摔倒检测等; 板载 GPS 和 BLE 模块,可用于定位,精确授时校准,行车轨迹离线存储或者与手机蓝牙通信; 板载 4MB SPI Flash ,用于图片和字体资源, GPS 坐标轨迹存储和其他重要信息存储; 预留了 USB Type-C 电源供电端口和调试串口,方便工程师调试。 软件环境:        当前版本的软件代码工程有两份,一份为基于 ZLG AWTK GUI 的完整 E-Bike 迈速表工程,可显示车速仪表盘,里程,档位和电池电压等行车参数,也可以进入简单的功能设置界面浏览当前系统信息,且支持通过指定的 CAN 帧格式更新当前 GUI 界面的参数信息,另外一份为移植到本参考设计上的 LittleVgl 的官方 Demo 例程,里面包含了配置好的 EZH 驱动库和 LittleVgl 基本的设备输入输出框架,用户可以基于此例程开发自己的 LittleVgl based E-Bike GUI 应用, NXP 官方基于 LittleVgl 的 E-Bike GUI 应用框架正在开发中(预计2022年7月之前会release第一版)。        目前基于 ZLG AWTK GUI 的 E-Bike 迈速表显示屏方案在经过优化之后对主控 MCU 的资源的占用以及 GUI 整体刷新性能如下表 1 ,留给客户可用的 flash 空间为 ~50KB , RAM 空间为 ~30KB ,且帧率可以达到 22fps ,可以满足大部分客户的应用需求( >15fps )。如果将显示屏的分辨率降低到 320*240 及以下小尺寸的情况下,整个系统的资源占用会相应的减小,刷新性能也会得到更大的提升。 表 1 方案资源占用及GUI刷新性能(分辨率320*480 16bit) Flash RAM 刷新帧率 202KB 61KB 22fps 写在最后:        本参考设计的初衷是针对 E-Bike 中低端仪表显示屏市场提供一个高性价比的选择,同时也可以作为一个对于显示, CAN 通信和小封装有类似需求的平台性的参考方案推广,比如电摩,带显示屏的便携式医疗设备和工业 IoT 设备等,希望此方案能给市场带来更好的用户体验和高性价比的选择。 注:由于代码工程超过25M,不能上传到该Community,如有需要请联系NXP销售或FAE索取。
View full article
This doc explain our Linux BSP driver and how to custom them. Contests as follows: include bsp30/32 目录 1 S32G Linux文档说明 ................................................. 2 2 创建S32G RDB2 Linux板级开发包编译环境 .............. 2 2.1 创建yocto编译环境: ................................................ 2 2.2 独立编译 ................................................................. 8 3 Device Tree ............................................................. 11 3.1 恩智浦的device Tree结构 ..................................... 11 3.2 device Tree的由来(no updates) ............................ 13 3.3 device Tree的基础与语法(no updates) ................. 15 3.4 device Tree的代码分析(no updates) .................... 37 4 恩智浦S32G BSP 包文件目录结构 .......................... 70 5 恩智浦Linux BSP的编译(no updates) ...................... 72 5.1 需要编译哪些文件 ................................................ 72 5.2 如何编译这些文件 ................................................ 73 5.3 如何链接为目标文件及链接顺序 ........................... 74 5.4 kernel Kconfig ...................................................... 76 6 恩智浦BSP的内核初始化过程(no updates) .............. 76 6.1 初始化的汇编代码 ................................................ 78 6.2 初始化的C代码 ..................................................... 82 6.3 init_machine ......................................................... 94 7 恩智浦BSP的内核定制 ............................................. 97 7.1 DDR修改 .............................................................. 98 7.2 IO管脚配置与Pinctrl驱动 .................................... 100 7.3 新板bringup ........................................................ 121 7.4 更改调试串口 ...................................................... 125 7.5 uSDHC设备定制(eMMC flash,SDcard, SDIOcard) 129 7.6 GPIO驱动 ........................................................... 137 7.7 GPIO_Key 驱动定制 .......................................... 145 7.8 GPIO_LED 驱动定制 ......................................... 150 7.9 芯片内thermal驱动 ............................................. 155 7.10 CAN接口驱动 ..................................................... 157 7.11 I2C及外设驱动 .................................................... 162 7.12 SPI与SPI Slave驱动 ........................................... 183 7.13 Watchdog test. ................................................... 190 7.14 汽车级以太网驱动定制 (未验证) (未完成) ........... 191
View full article
目录 1 S32G Linux文档说明 .................................................. 3 2 创建S32G RDB2 Linux板级开发包编译环境 .............. 4 2.1 创建yocto编译环境: ................................................. 4 2.2 独立编译 ................................................................. 9 3 FSL Uboot 定制 ........................................................ 14 3.1 FDT支持 ............................................................... 14 3.2 DM(driver model)支持 ........................................... 20 3.3 Uboot目录结构 ...................................................... 31 3.4 Uboot编译 ............................................................. 34 3.5 Uboot初始化流程 .................................................. 35 3.6 使能了ATF后对Uboot初始化流程的影响 ............... 40 4 Uboot 定制 ............................................................... 41 4.1 修改 DDR大小 ....................................................... 41 4.2 修改调试串口与IOMUX说明 .................................. 44 4.3 DM I2C与PMIC初始化 .......................................... 53 4.4 通用GPIO ............................................................. 59 4.5 启动eMMC定制 ..................................................... 69 4.6 Ethernet定制 ......................................................... 78 5 Uboot debug信息 ..................................................... 89 5.1 Print env ............................................................... 89 5.2 dm - Driver model low level access ...................... 92 5.3 fdt .......................................................................... 95 5.4 I2C测试 ................................................................. 95 5.5 芯片寄存器访问 ..................................................... 98 updated to V5
View full article
  本文说明S32G  RDB2板Linux板级开发包BSP32 的ATF细节,以帮助客户了解S32G的ATF是如何运行的,以及如何修改到客户的新板上。   从BSP32开始,默认启动需要ATF支持,所以部分定制需要移动到ATF中,Uboot会简单很多。 请注意本文为培训和辅助文档,本文不是官方文档的替代,请一切以官方文档为准。   目录如下: 目录 1    S32G Linux文档说明... 2 2    创建S32G RDB2 Linux板级开发包编译环境... 3 2.1  创建yocto编译环境: 3 2.2  独立编译... 8 3    NXP ATF 原理... 13 3.1  AArch64 Exception Leve: 13 3.2  ATF原理... 14 3.3  ATF目录 结构... 16 3.4  ATF初始化流程... 25 3.5  NXP ATF的SCMI支持... 28 3.6  NXP ATF的PSCI支持... 32 3.7  NXP ATF OPTEE接口(未来增加)... 36 4    ATF 定制... 36 4.1  修改 DDR配置... 36 4.2  修改调试串口与IOMUX定制说明... 39 4.3  启动eMMC定制说明... 48 4.4  I2C与PMIC定制说明... 58
View full article
This doc explain how to configure a new LPDDR4 and test it on S32G, contents as follows: 目录 1    硬件资源,文档及工具下载... 2 1.1    硬件资源... 2 1.2    内存配置测试相关的文档... 2 1.3    内存配置与压力测试工具. 3 2    内存设计要求... 3 3    LPDDR4基础... 3 3.1    基本知识... 3 3.2    Inline ECC.. 4 4    硬件连接... 6 5    S32G+LPDDR4内存配置与测试步骤... 8 5.1    配置LPDDR4初始化寄存器设置... 9 5.2    使用内存测试工具初始化PHY及生成DDRC配置Uboot源代码    11 5.3    生成DDRC配置ATF源代码(从BSP32开始) 14 5.4    测试内存... 18 5.5    其它尺寸的LPDDR4配置... 19 6    测试失败的DEBUG.. 24 7    内存参数应用到Uboot中... 25 8    内存参数应用到ATF中... 25 9    附录... 25 9.1    一个重要的DDR TOOL bug Fix. 25 9.2    Uboot DDR测试工具... 26 9.3    Kernel DDR测试工具... 27 9.4    附DDR tool测试项截图... 28   Contents 1    Hardware Materials, Docs and Tools Needed. 2 1.1    Hardware resource. 2 1.2    Related docs of memory configuration and test 2 1.3    Memory configuration and test tools. 3 2    Memory Hardware Design Requirement 3 3    LPDDR4 Basics. 3 3.1    Basic Knowledge. 3 3.2    Inline ECC.. 5 4    Hardware Design. 7 5    S32G+LPDDR4 Memory Configuration and Test Steps. 8 5.1    Configure LPDDR4 DDRC Register Settings. 9 5.2    Use the Memory Test Tool to Initialize the PHY and Generate the DDRC Configuration Uboot Source Code  12 5.3    Generate ddrc configuration ATF source code (starting from bsp32) 15 5.4    Memory Test 19 5.5    Other size LPDDR4 configurations. 20 6    Debug of the Fails of Test 25 7    Modify the DDRC register settings in Uboot 26 8    Modify the DDRC register settings in ATF. 26 9    Appendix. 26 9.1    A importance DDR TOOL bug Fix. 26 9.2    Uboot DDR Test Tools. 27 9.3    Kernel DDR Test Tool 28 9.4    Attached Screenshot of DDR Tool Test Items. 29
View full article
This project include the codes and doc to support optimize the EMI of S32G by frequency changing and SSC. Contents as follows: 目录 1 展频的基本概念 ......................................................... 2 2 获取测试用uboot源代码 ............................................. 5 3 DDR_PLL的改频 ........................................................ 5 4 DDR_PLL的展频 ........................................................ 9 5 总结修改后的源代码 ................................................ 17
View full article
This doc explain how to optimize the Linux boot time, Contents as follows: 目录 1 默认BSP28 Linux内核的启动时间分析和优化方向 ..... 2 2 UBoot的优化 .............................................................. 3 2.1 缩小Uboot的DTS尺寸 ............................................ 3 2.2 缩小Uboot的尺寸 .................................................... 4 2.3 去掉等待3S输入时间 .............................................. 4 2.4 配合内核修改的Uboot参数 ..................................... 4 2.5 关闭串口调试信息 .................................................. 5 2.6 MMC read的方法来读取内核和DTB ....................... 5 3 Kernal的优化 ............................................................. 5 3.1 DTB中去掉不用的驱动和代码 ................................. 5 3.2 内核中去掉不用的平台与驱动及相关代码 ............... 6 3.3 内核中去掉不用功能,缩小内核大小 ...................... 7 3.4 去掉initramfs支持 ................................................... 7 3.5 关闭调试信息 .......................................................... 7 3.6 提前eMMC驱动加载时间 ........................................ 7 3.7 将Kernel与DTB打包在一起..................................... 8 4 Rootfs+应用程序的优化 ............................................. 8 5 最终全部启动时间比较 ............................................. 12
View full article
This doc expain how to use eMMC from user space, contents as follows: 目录 1 eMMC的分区情况 ...................................................... 2 2 S32G+BSP29上默认的eMMC启动 ............................ 3 2.1 eMMC硬件设计 .................................................. 3 2.2 eMMC的镜像烧写办法与启动 ............................. 6 2.3 增加MMC内核测试工具 .................................... 10 3 eMMC GP功能的测试 .............................................. 10 3.1 eMMC GP功能的说明 ....................................... 10 3.2 eMMC GP功能的测试 ....................................... 11 4 eMMC RPMB功能的测试 ......................................... 13 4.1 eMMC RPMB功能的说明 ................................. 13 4.2 eMMC RPMB功能的测试 ................................. 15
View full article
        S32G just support serial download a M7 image to run by internal rom codes, our S32G DS IDE have a flash tools to use this feature to burn the image to external device. So current image burn method will divide into 2 step: 1: burn a uboot into the external device by S32G DS flash tools. 2: reboot the codes with uboot and run with network to burn the linux image into external device.      which need two working place on manufacture line, and customer wish to have a one time on-line tools, which means we need use serial port to boot uboot directly but S32G rom codes do not support it.       We have a reference tools of S32V but which IP difference is big between on S32V and S32G, So we can not reuse it and have to develop a new one.       The development working include: 序号 开发工作 说明 开发者 1 开发 根据S32G的serial boot协议要求,开发PC端的串口工具来下载M7镜像 John.Li 2 开发 根据自定义协议要求,开发PC端的串口工具来下载A核Bootloader到SRAM中 John.Li 3 开发 根据自定义协议要求,开发M7镜像的串口接收与Checksum逻辑 John.Li 4 开发 修改M7镜像支持串口0 John.Li 5 开发 开发实现M7镜像的串口单字节同步收发函数 John.Li 6 开发 开发实现A53启动功能 John.Li 7 调试与Debug 调试解决串口接收乱码问题(Serial boot rom codes仍然在回送消息串口) John.Li 8 调试与Debug 提供 解决A核启动串口halt思路(Serial boot rom codes仍然占用串口) John.Li 9 调试与Debug 优化M7镜像,缩小大小 Tony.Zhang 10 调试与Debug 根据M7镜像和A核 Uboot 在SRAM中的内存分配要求,重排M7镜像位置,避免冲突 Tony.Zhang 11 调试与Debug 在M7中初始化SRAM空间 Tony.Zhang 12 调试与Debug 在M7中设置SRAM可执行空间 Tony.Zhang 13 调试与Debug 调试解决由于cache没有及时回写导致的下载镜像错误的问题 Tony.Zhang 14 调试与Debug 集成,调优与文档 John.Li   Pls check the attachment for the doc/codes/binary release which include:     Release      |->M7: Linflexd_Uart_Ip_Example_S32G274A_M7: S32DS M7工程。      |->PC: s32gSerialBoot_Csharp: PC端的Visual Studio的C#的串口工具工程。      |->Test:      |    |-> 115200_bootloader.bin: S32DS M7工程编译出来的bin文件,波特率为115200      |    |-> 921600_bootloader.bin: S32DS M7工程编译出来的bin文件,波特率为921600      |    |->load_uboot.bat: 运行工具的批处理文件,运行成功后打开串口可以看到Uboot执行,默认使用的波特率是115299         |    |->readme.txt:其它测试命令 |    |->s32gSerialBoot.exe:编译出来的PC端串口工具 |    |->u-boot.bin: BSP29默认编译出来的u-boot.bin.      Product Category NXP Part Number URL Auto MPU     S32G274     https://www.nxp.com/s32g    
View full article
本文说明在S32G2 RDB2板上实现LLCE to PFE Demo的搭建过程。本Demo目前包括:  CANtoEth:CAN0发送,用硬件回环到 CAN1接收,然后通过PFE_EMAC1, 再通过RGMII接口发出。  CANtoEth:CAN0发送,用硬件回环到 CAN1接收,然后通过PFE_EMAC1, 再通过SGMII接口发出。  EthtoCAN:PC通过PFE_EMAC1的 RGMII发出,接收到CAN1,再硬件 回环到CAN0  CANtoCAN Logging to Eth: CAN0发 送,用硬件回环到CAN1接收,然后 通过PFE_EMAC1,再通过SGMII接 口发出,同时LLCE内部硬件把CAN1 再发送到CAN15_TX,再用硬件回环 到CAN14_RX 软件版本为 RTD3.0.0+LLCE1.0.3+PFE0.9.6/0.9.5。
View full article
This doc explain how to install S32G design studio& RTD SDK. contributed by Tony.Zhang
View full article
This doc explain how to support a new QSPI nor for boot, SDK and Linux, Contents as follows: 目录 1 硬件设计 .................................................................... 2 2 所需工具和相关资料 .................................................. 5 3 ROM Code的启动流程 ............................................... 5 4 S32G QSPI NOR flash配置表头定制 ......................... 7 4.1 S32G QSPI NOR启动配置表信息 .......................... 7 4.2 目前支持的配置表头分析说明 ............................... 10 4.3 LUT构成与Flash write Data说明 ........................... 16 4.4 具体分析已有的配置表头的LUT与Flash write Data的 配置方法 ...................................................................... 22 4.5 支持一款新的QSPI NOR Flash示例1:Micron........ 28 4.6 支持一款新的QSPI NOR Flash示例2:Winbond .... 31 5 使用IVT打包配置头 .................................................. 33 6 使用IVT工具中的flash image工具烧写镜像到QSPI NOR 中 34 7 软件定制M7 ............................................................. 35 8 软件定制uboot ......................................................... 37 9 软件定制Linux Kernel .............................................. 40 9.1 支持美光8bit DDR 模式(未验证) .......................... 44 9.2 支持1bit SDR fast read 模式 ............................... 46 10 Debug过程中需要注意的几点 .................................. 49 10.1 启动时ROM Code读取QSPI NOR时钟仅有12Mhz左 右 49 10.2 比较大的镜像如果不加参数头,无法从QSPI-NOR上启 动 55
View full article
This doc explain our Mcal driver and how to custome them. contents as follows: 目录 1 AutoSAR MCAL基本概念 .......................................... 2 1.1 AutoSAR目标 ......................................................... 2 1.2 AutoSAR概念 ......................................................... 2 1.3 AutoSAR基本方法 .................................................. 2 1.4 BSW(Basic Software) ............................................. 4 1.5 NXP Basic AutoSAR软件 ....................................... 4 1.6 RTE与BSW的配置 ................................................. 5 1.7 BSW的配置流程 ..................................................... 6 1.8 MCAL驱动 .............................................................. 7 2 MCAL工具 ................................................................. 7 3 MCAL说明 ................................................................. 8 3.1 MCAL的下载与说明 ................................................ 8 3.2 EB Tresos的下载,安装 ....................................... 13 3.3 RTD-MCAL安装 ................................................... 16 3.4 Trace32的下载与安装 .......................................... 18 3.5 样例工程的编译,运行 ......................................... 20 4 MCAL驱动配置与定制 ............................................. 40 4.1 MCU ..................................................................... 45 4.2 PORT ................................................................... 59 4.3 DIO ....................................................................... 69 4.4 FlexCAN ............................................................... 71 4.5 FlexLin ................................................................. 87 4.6 GMAC .................................................................. 93 4.7 I2C ..................................................................... 101 4.8 PMIC .................................................................. 108 4.9 PMIC WDOG ...................................................... 127 4.10 WDOG ............................................................... 137 4.11 UART ................................................................. 144 4.12 SPI ..................................................................... 149 4.13 PWM .................................................................. 165 4.14 ADC ................................................................... 171 4.15 Thermal .............................................................. 177
View full article
This doc explain how to use S32G design studio and SDK, contributed by Gary.Yuan yuan.yuan@nxp.com.
View full article
This doc explain  where is the design resource and what they are of S32G in Chinese,  Contents as follows: 目录 1 www.nxp.com 官网资源 ............................................. 2 1.1 www.nxp.com Documentation ................................ 4 1.2 www.nxp.com Tools&Software ............................. 10 2 Flexera资源 ............................................................. 18 2.1 Automotive HW-S32G Evaluation Board .............. 21 2.2 Automotive HW-S32G GoldBox ........................... 22 2.3 Automotive HW-S32G RDB2(RDB不再说明) ....... 22 2.4 Automotive SW-S32G2 Standard Software.......... 23 2.5 Automotive SW-S32G2 reference Software ......... 28 2.6 Automotive SW-S32G2 Tools .............................. 30 3 Docstore资源 ........................................................... 31
View full article
第一章 简介 MCU 闪存加载器是一个可配置的闪存烧写实用程序,可通过 MCU 上的串行通讯进行操作。 它可以在整个产品生命周期(包括应用程序开发和最终产品制造等)中对 MCU 进行快速轻 松编程。 MCU 闪存加载器将以高度可配置的二进制或完整源代码形式提供。主机端命令行 和 GUI 工具可用于与闪存加载器进行通信。用户可以利用主机工具通过闪存加载器上传和 / 或下载应用程序代码。 第二章 闪存加载器协议 本节介绍主机和 MCU 闪存加载器之间数据包传输的通用协议。介绍包括不同事务的数据包 传输,例如无数据阶段的命令以及带传入或传出数据阶段的命令。 第三章 闪存加载器数据包类型 MCU 闪存加载器设备以从机模式工作。所有数据通信均由主机发起,该主机可以是 PC 主 机,也可以是嵌入式主机。 MCU 闪存加载器设备是接收命令或数据包的目标机。主机和目 标机之间的所有数据通信均采用分包形式。 第四章 MCU闪存加载器API 所有 MCU 闪存加载器命令 API 均遵循由成帧数据包打包的命令数据包格式,如前几小节所 述。 第五章 支持的外设 本小节介绍 MCU 闪存加载器支持的外设。 第六章 外部存储器的支持 本小节介绍 MCU 闪存加载器支持的外部存储器设备。要正确使用外部存储器设备,必须使 用相应的配置文件启用该设备。闪存加载器无法访问未启用的外部存储设备。 MCU 闪存加 载器使用存储器标识符启用特定的外部存储设备,如下所示。 第七章 安全实用程序 MCU 闪存加载器支持某些安全实用程序,用于轻松生成与安全性相关的块。请注意,必须 首先对闪存加载器本身进行签名才能正确启用安全实用程序。
View full article
         LittleVgl作为一款开源免费的嵌入式 GUI 得到越来越多工程师的厚爱,我们可以看到很多小型 HMI 项目或者一些开源社区都在使用它作为 GUI 的框架,同时也受益于用户群的不断扩大以及一些半导体原厂的青睐(通俗点就是说有赞助有钱儿了), LittleVgl 本身也在快速的不断更新迭代,易用的组件和相关的辅助开发工具在不断的增加,而 RT1050/1060/1170 系列作为一款带有 LCD 控制器的平台,自然成为了 LittleVgl 最佳的载体之一了。         LittleVgl本身的组件已经很丰富了,但是遗憾的是一直没有加入对中文输入法 Keyboard 的支持(看了下它在 Github 上的 Contributor List 没有华人),这让它在我们国内的应用有了一些限制(注意在某组件上显示中文和真正的中文输入法是不同的概念),所以本项目旨在解决该问题,即把一个简单轻量的中文输入法框架嵌入到 LittleVgl 并跑在 RT1050 平台上,并把它开源开放出来,所以不要小看了我的“公益心”,哈哈。下图是该示例设计的UI界面        下面进入正题,首先把测试环境给出来,方便有兴趣有能力的朋友可以自行搭建(当然应一部分偷懒的强烈需求,我随本文档也附赠了完整的移植好的工程),然后我再一步一步地给出如何移植这套框架到用户自己的工程里,当然我已经把代码本身做了很多优化,尽量减小环境依赖,力求最少步骤的移植过程,理论上来讲不太会出现移植后编译出一堆 Error 的问题,咳咳。。。下面我们赶紧开整吧: 测试环境: SDK 版本: SDK_v2.9.1 SDK 参考例程: boards\evkbimxrt1050\littlevgl_examples\littlevgl_demo_widgets LittleVgl 版本: v7.4.0 IDE 工具: Keil_v5.31 开发板: MIMXRT1050-EVK + 480*272 RGB LCD 屏 软件说明: 我们先看下这套中文输入法所需的几个文件,如下图所示, .c 和 .h 文件加起来一共 7 个,其中 nxp_logo.c 只是我额外加的一个 NXP 的官方 logo 图标转成的 C 数组文件供 littleVgl 调用显示,属于锦上添花的东西,可有可无,真正跟输入法相关的是剩下的 6 个文件,下面我们逐一介绍下这几个文件的作用: 1. qwerty_py.c/.h:        实际上这两个文件才是这套全键盘拼音中文输入法的核心框架,实现了对输入的拼音字母进行索引匹配对应的汉字候选列表,这部分我是移植了如下链接中网友分享的代码,所以这两个文件我的角色只是一个大自然搬运工,不过说实话我是很感激该网友的无私分享的(这也是我一直推崇开源分享精神的源动力),之前对平时使用的各种输入法里面的算法原理一直充满好奇,直到看了这篇文章后才豁然开朗,“ So that is what it is! ”,让我获益匪浅(可能人的学习曲线和知识体系就是这样一点一滴的积累吧),而且更关键的是,如果让我继续往下开发诸如拼音联想和多汉字输入等功能的话,我更多关心的可能只是逻辑搭建的工作量问题,而不是纠结于 Yes or No 的问题了,因为咱已经了解了其最底层的工作原理了,所以很多复杂的事情,我们如果能抽丝剥茧的找到其最底层的本质(虽然这真的很难),那很多让人抓耳挠腮的问题很快就可以理清思路。说到这里我思维又发散了,呵呵,我想起让 Linus Torvalds 等一波老大神们一直头疼的 Linux 内核维护后继无人的问题,其实我的个人理解有很大一部分原因是如今的 Linux 太庞大了以至于几乎没有后辈的人对 Linux 的理解能赶上这些老辈大神,而这些老辈大神的最大优势是他们创建了 Linux 最早期的底层框架而且难能可贵的是一直在 follow Linux 每个版本的历史。总之,推荐大家看看如下这篇文章吧(实际上主要内容也都是代码),希望能各有所获; https://www.amobbs.com/thread-5668320-1-1.html?_dsign=0939dcbd 2. lv_chs_keyboard.c/.c 文件:        这部分就是我的工作了(咱也不能啥都搬运 … ,这是体现咱的 value 的东西不是),我把它当作 littleVgl 的一个补充组件来写的,里面的大多数 API 参考官方 littlevgl 的 lv_keyboard.c ,所谓的文章开头的嵌入中文输入法到 LittleVgl GUI 环境中实际上就是这两个文件干的活,即将上面提到 qwerty.c/.h 实现的拼音输入法与 LittleVgl 框架结合到一块,起到一个桥梁的作用,所以如果你想把这套中文输入法嵌入到其他 GUI 环境中的话(比如 emWin , GUIX , TouchGFX 等),那主要的工作就是参考这两个文件的内容了; 3. lv_font_NotoSansCJKsc_Regular.c 字体文件:        虽然 littleVgl 官方源码包里自带了一个中文字体文件( \lvgl\src\lv_font\lv_font_simsun_16_cjk.c ),但是它只包含了 1000 个左右最常用的字,我实际体验了下很多我们想用的字都找不到,所以这个时候就需要自己去做一个更全一点的字体库了。这里面涉及到两个问题需要考虑,第一是很多我们常见的中文字体是收费的(咱 PC 机的 Microsoft Office 套件里的中文字体都是微软付费买的,所以咱也理解下早年正版 Windows 为啥辣么贵了,那你问为啥现在便宜了?因为人家现在不靠这个赚钱了呗),第二个是字体转换工具的问题,我们网上找到的字体都是 TTF 或者 OTF 格式的,但 littleVgl 是不认的,需要转换成它支持的字体格式。        对于第一个问题,我网上搜了好久最终选择了目前用的比较多的 Google 开源免费的字体, Google 真乃金主也,它维护的网站里面字体各种各样啥都有且是开源免费的,如下链接,我选择的是 NotoSansCJKsc 字体(最后面的 sc 表示 simplified Chinese ,简体中文),然后它里面又包含了各种字形( regular, bold, light 等),可以根据需要自行选择,整个包很大( 100 多 MB ),拆分成不同字形的就小了(每个 14~16MB 左右); https://www.google.com/get/noto/        对于第二个字体转换工具的问题, LittleVgl 官方自带了一个字体转换工具( online font converter ) , 我个人觉着不太好用(对 OTF 字体支持的不行),这里推荐阿里大神自己做的一个 LittleVgl 字体转换工具( LvglFontTool ),非常方便好用,且支持加入 Awesome 图标; http://www.lfly.xyz/forum.php?mod=viewthread&tid=24&extra=page%3D1        关于字体这部分我需要再补充个问题,就是它占用的 memory 大小,毕竟我们是在嵌入式 MCU 平台 Flash 和 RAM 的资源是受限的,如下图所示,该字体文件占用大概 1Mbytes 的 rodata 空间(即可寻址的 Flash 空间,当然该大小可以通过在上图转换工具中增减一些文字来调 整),所以在移植本套输入法之前需要预留足够的 Flash 空间,当然对 RT 平台来说这部分还好,毕竟其本身就外扩至少几 MB 空间的 QSPI Flash 作为存储空间的。 4. lv_demo_chineseinput.c/.h 文件:        这两个文件属于应用层实现了,主要关注该文件中下图的 ta_event_cb 函数(即 textarea 事件的 callback ,点击文本框的输入时回调),在里面我们需要按照 1 , 2 , 3 去调用即可(这三步的 API 均在 lv_chs_keyboard.c/h 文件里实现);         至此,这套全键盘拼音中文输入法框架所需的几个文件就介绍完了,用户只需要把这几个文件放到自己的工程设置好文件搜索路径,并参考随本文档附带的代码工程示例,再结合自己产品的 GUI 样式,把这套中文输入法嵌入到自己应用当中。
View full article
KW36 - 32kHz RTC外部振荡器的微调调节 USL:https://community.nxp.com/docs/DOC-342672     引言 FRDM-KW36包含带有 32 kHz 晶体振荡器的 RTC 模块。 RTC 模块以极低功耗模式运行并为 MCU 提供 32 kHz 时钟源。该振荡器包括一组可编程调节的负载电容 C LOAD ,改变这些负载电容的值可以调整振荡器提供的频率。 此可配置电容的范围为 0 pF (禁用电容器组)至 30 pF ,步长为 2 pF 。 这些值是通过组合启用的电容器获得的。可用值为 2 pF , 4 pF , 8 pF 和 16 pF 。这四个数值可以任意组合。如果外部电容可用,建议禁用这些内部电容器(将 RTC 控制寄存器 SFR 中的 SC2P , SC4P , SCS8 和 SC16 位设置为 0 )。 要调整振荡器提供的频率,必须首先能够测量该频率。最好使用频率计数器测了频率,因为它提供了比示波器更精确的测量。另外还需要 KW36 通过 IO 输出振荡器频率。要输出振荡器频率,以任意一个低功耗蓝牙演示应用程序为例,执行以下操作: 调整频率示例 本示例将利用低功耗蓝牙演示应用程序的心率传感器演示( freertos 版本),并假定开发人员具有从 SDK 到 IDE 导入或打开项目的知识。 从 SDK 中打开或克隆“心率传感器”项目。       在工作区的 board 文件夹中找到 board.c 和 board.h 文件。 如下图所示在 board.h 文件中声明一个 void 函数。该函数将是为了把 RTC 时钟多路复用到 PTB3 ,以使其能够输出 32kHz 频率用于测量。 /* Function to mux PTB3 to RTC_CLKOUT */void BOARD_EnableRtcClkOut (void); 如下所示在 board.c 文件中添加 BOARD_EnableRtcClkOut 函数。    void BOARD_EnableRtcClkOut(void){/* Enable PORTB clock gating */CLOCK_EnableClock(kCLOCK_PortB);/* Mux the RTC_CLKOUT to PTB3 */PORT_SetPinMux(PORTB, 3u, kPORT_MuxAlt7);/* Select the 32kHz reference for RTC_CLKOUT signal */ SIM->SOPT1 |= SIM_SOPT1_OSC32KOUT(1); } 在 hardware_init 函数中( board.c 文件),在调用 BOARD_BootClockRUN 函数之后立即调用 BOARD_EnableRtcClkOut 函数。       在工作区的 board 文件夹中找到 clock_config.c 文件。 在文件顶部添加以下定义。 #define RTC_OSC_CAP_LOAD_0 0x0U /*!< RTC oscillator, capacitance 0pF */#define RTC_OSC_CAP_LOAD_2 0x2000U /*!< RTC oscillator, capacitance 2pF */#define RTC_OSC_CAP_LOAD_4 0x1000U /*!< RTC oscillator, capacitance 4pF */#define RTC_OSC_CAP_LOAD_6 0x3000U /*!< RTC oscillator, capacitance 6pF */#define RTC_OSC_CAP_LOAD_8 0x800U /*!< RTC oscillator, capacitance 8pF */#define RTC_OSC_CAP_LOAD_10 0x2800U /*!< RTC oscillator, capacitance 10pF */#define RTC_OSC_CAP_LOAD_12 0x1800U /*!< RTC oscillator, capacitance 12pF */#define RTC_OSC_CAP_LOAD_14 0x3800U /*!< RTC oscillator, capacitance 14pF */#define RTC_OSC_CAP_LOAD_16 0x400U /*!< RTC oscillator, capacitance 16pF */#define RTC_OSC_CAP_LOAD_18 0x2400U /*!< RTC oscillator, capacitance 18pF */#define RTC_OSC_CAP_LOAD_20 0x1400U /*!< RTC oscillator, capacitance 20pF */#define RTC_OSC_CAP_LOAD_22 0x3400U /*!< RTC oscillator, capacitance 22pF */#define RTC_OSC_CAP_LOAD_24 0xC00U /*!< RTC oscillator, capacitance 24pF */#define RTC_OSC_CAP_LOAD_26 0x2C00U /*!< RTC oscillator, capacitance 26pF */#define RTC_OSC_CAP_LOAD_28 0x1C00U /*!< RTC oscillator, capacitance 28pF */#define RTC_OSC_CAP_LOAD_30 0x3C00U /*!< RTC oscillator, capacitance 30pF */ 在 BOARD_BootClockRUN 函数内(也在 clock_config.c 文件中)找到对函数 CLOCK_CONFIG_EnableRtcOsc 的调用,然后通过上述任意定义来设置函数入参。 最后,在项目源文件夹中的“ app_preinclude.h ”文件中禁用低功耗选项和 LED Support : #define cPWR_UsePowerDownMode 0#define gLEDSupported_d 0     此时,可以用频率计数器测量 PTB3 输出的频率,并进行频率调整。每次对电路板进行编程时,都需要执行 POR 以获得正确的测量值。下表是从 FRDM-KW36 板 rev B 获得的,可用作调整频率的参考。 请注意,电容不仅由启用的内部电容组成,还包括封装、焊线、焊垫和 PCB 走线中的寄生电容。因此,尽管下面给出的参考测量值应接近实际值,但您还应该在电路板上进行测量,以确保频率是专门针对您的电路板和布局进行调整的。 启用的电容器 CLOAD 电容定义 频率 - 0pF RTC_OSC_CAP_LOAD_0 (bank disabled) 32772.980Hz SC2P 2pF RTC_OSC_CAP_LOAD_2 32771.330Hz SC4P 4pF RTC_OSC_CAP_LOAD_4 32770.050Hz SC2P, SC4P 6pF RTC_OSC_CAP_LOAD_6 32769.122Hz SC8P 8pF RTC_OSC_CAP_LOAD_8 32768.289Hz SC2P, SC8P 10pF RTC_OSC_CAP_LOAD_10 32767.701Hz SC4P, SC8P 12pF RTC_OSC_CAP_LOAD_12 32767.182Hz SC2P, SC4P, SC8P 14pF RTC_OSC_CAP_LOAD_14 32766.766Hz SC16P 16pF RTC_OSC_CAP_LOAD_16 32766.338Hz SC2P, SC16P 18pF RTC_OSC_CAP_LOAD_18 32766.038Hz SC4P, SC16P 20pF RTC_OSC_CAP_LOAD_20 32765.762Hz SC2P, SC4P, SC16P 22pF RTC_OSC_CAP_LOAD_22 32765.532Hz SC8P, SC16P 24pF RTC_OSC_CAP_LOAD_24 32765.297Hz SC2P, SC8P, SC16P 26pF RTC_OSC_CAP_LOAD_26 32765.117Hz SC4P, SC8P, SC16P 28pF RTC_OSC_CAP_LOAD_28 32764.940Hz SC2P, SC4P, SC8P, SC16P 30pF RTC_OSC_CAP_LOAD_30 32764.764Hz  
View full article
从 MKW36Z512VHT4 到 MKW36A512VFT4 的软件迁移指南 USL: https://community.nxp.com/docs/DOC-345487 由 Edgar Eduardo Lomeli Gonzalez 于 2020-09-14 创建的文档   引言 这篇文章将指导您如何从 MKW36Z512VHT4 迁移到 MKW36A512VFT4 MCU 。本示例将使用“信标( beacon )” SDK 例程 。 SDK下载和安装 1- 前往 MCUXpresso 网页: MCUXpresso网页 2- 使用您的注册帐户登录。 3- 搜索“ KW36A ”设备。 点击推荐 的处理器,然后单击“ Build MCUXpresso SDK ”。   4- 点击后将显示另一页面。在“ Toolchain / IDE ”框中选择“ All toolchains ”,并提供名称以标识软件包。然后点击“ Download SDK ”。   5- 接受许可协议。等待几分钟直到系统将软件包放入您的配置文件中。 单击“下载 SDK 存档”( Download SDK Archive ),下载 SDK ,如下图所示。   6- 如果使用 MCUXpresso IDE , ‘ 请 将 KW36A SDK 压缩文件夹 拖 放 到“Installed SDKs” 视图中 以安装软件包。   至此,您已经下载并安装 好 KW36A 设备的 SDK 软件包。 在 MCUXpresso IDE 中 进行 软件迁移 1- 在 MCUXpresso 工作区导入“信标( beacon )”示例。单击“ Import SDK examples(s) …”选项,将出现一个新窗口。然后选择“ MKW36Z512xxx4 ”,单击 FRDM-KW36 图像。点击“ Next > ”按钮。   2- 查找“ beacon( 信标) ” 例程并选择是否支持FreeRTOS 。   3- 转到 Project/Properties 。展开 C / C ++ Build / MCU 设置,然后选择 MKW36A512xxx4 MCU 。单击“ Apply and Close ”按钮以保存配置。   4- 通过 单击鼠标右键并选择“重命名” 将 以下 MKW36Z 文件夹重命名为 MKW36A ,            framework/DCDC/Interface -> MKW36Z framework/DCDC/Source -> MKW36Z framework/LowPower/Interface -> MKW36Z framework/LowPower/Source -> MKW36Z framework/XCVR -> MKW36Z4     5- 在 MCUXpresso IDE 中打开“ Project/Properties ”窗口。 转到 C / C ++ Build / Settings ,然后在 Tool Settings 窗口中选择 MCU C Compiler / Includes 文件夹。在创建之前,根据 MKW35 文件夹编辑与 MKW36 MCU 相关的所有路径。结果类似如下所示:   ../framework/LowPower/Interface/MKW36A ../framework/LowPower/Source/MKW36A ../framework/DCDC/Interface/MKW36A ../framework/XCVR/MKW36A4         6- 在工具设置中选择 MCU Assembler/General 文件夹。 编辑与 MKW36 MCU 相关的路径。结果类似如下所示: ../framework/LowPower/Interface/MKW36A ../framework/LowPower/Source/MKW36A ../framework/DCDC/Interface/MKW36A ../framework/XCVR/MKW36A4         7- 转到 Project/Properties 。展开 MCU CCompiler/Preprocessor 窗口。编辑“ CPU_MKW36Z512VHT4 ”和“ CPU_MKW36Z512VHT4_cm0plus ”符号,分别将其重命名为“ CPU_MKW36A512VFT4”和“ CPU_MKW36A512VFT4_cm0plus”。保存更改。   8- 转到工作区。删除位于 CMSIS 文件夹中的“ fsl_device_registers , MKW36Z4 , MKW36Z4_features , system_MKW36Z4.h 和 system_MKW36Z4.c ”文件。然后解压缩 MKW35Z SDK 软件包并在以下路径中搜索“ fsl_device_registers , MKW36A4 , MKW36A4_features , system_MKW36A4.h 和 system_MKW36A4.c ”文件 并复制 到 CMSIS 文件夹中: <SDK_folder_root>/devices/MKW36A4/fsl_device_registers.h <SDK_folder_root>/devices/MKW36A4/MKW36A4.h <SDK_folder_root>/devices/MKW36A4/MKW36A4_features.h <SDK_folder_root>/devices/MKW36A4/system_MKW36A4.h <SDK_folder_root>/devices/MKW36A4/system_MKW36A4.c     9-  将 位于路径 <SDK_folder_root> /devices/MKW36A4/mcuxpresso/startup_mkw36a4.c 中的“ startup_mkw36a4.c ”覆盖 ” startup” 文件夹中 的 “ startup_mkw36z4.c ”。 您可以简单的将文件拖放到“startup” 文件夹中,然后删除旧的文件 。   10- 在 CMSIS 文件夹中打开“ fsl_device_registers.h ”文件。在以下代码(文件的第 18 行)中添加“ defined ( CPU_MKW36A512VFT4 )”: /* * Include the cpu specific register header files. * * The CPU macro should be declared in the project or makefile. */#if (defined(CPU_MKW36A512VFP4) || defined(CPU_MKW36A512VFT4) || defined(CPU_MKW36A512VHT4) || defined(CPU_MKW36A512VFT4))‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍  11- 在 bluetooth->host->config 文件夹中打开“ ble_config.h ”文件。在以下代码中添加“ defined ( CPU_MKW36A512VFT4 )”(文件的第 146 行): /* The maximum number of BLE connection supported by platform */#if defined(CPU_QN9080C) #define MAX_PLATFORM_SUPPORTED_CONNECTIONS 16#elif (defined(CPU_MKW36Z512VFP4) || defined(CPU_MKW36Z512VHT4) || defined(CPU_MKW36A512VFP4) || defined(CPU_MKW36A512VHT4) || defined(CPU_MKW36A512VFT4) || \ defined(CPU_MKW35Z512VHT4) || defined(CPU_MKW35A512VFP4) || \ defined(CPU_K32W032S1M2CAx_cm0plus) || defined(CPU_K32W032S1M2VPJ_cm0plus) || \ defined(CPU_K32W032S1M2CAx_cm4) || defined(CPU_K32W032S1M2VPJ_cm4) || \ defined(CPU_MKW38A512VFT4) || defined (CPU_MKW38Z512VFT4) || defined(CPU_MKW39A512VFT4) || \ defined(CPU_MKW37A512VFT4) || defined(CPU_MKW37Z512VFT4))‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍  12- 在 source-> common 文件夹中打开“ ble_controller_task.c ”文件。在以下代码(文件的第 272 行)中添加“ defined ( CPU_MKW36A512VFT4 )”: #elif (defined(CPU_MKW35A512VFP4) || defined(CPU_MKW35Z512VHT4) || defined(CPU_MKW36A512VFP4) || defined(CPU_MKW36A512VFT4) ||\ defined(CPU_MKW36A512VHT4) || defined(CPU_MKW36Z512VFP4) || defined(CPU_MKW36Z512VHT4))/* Select BLE protocol on RADIO0_IRQ */ XCVR_MISC->XCVR_CTRL = (uint32_t)((XCVR_MISC->XCVR_CTRL & (uint32_t)~(uint32_t)( XCVR_CTRL_XCVR_CTRL_RADIO0_IRQ_SEL_MASK )) | (uint32_t)( (0UL << XCVR_CTRL_XCVR_CTRL_RADIO0_IRQ_SEL_SHIFT) )); 13-生成项目。 至此,该 工程项目已经迁移完成 。 在 IAR Embedded Workbench IDE 中 进行 软件迁移 1- 打开位于以下路径的信标 (Beacon) 项目: 2- 在工作区中选择项目,然后按 Alt + F7 打开项目选项。   3- 在 General Options/Target 窗口中,单击设备名称旁边的图标,再选择适当的 芯片 NXP / KinetisKW / KW3x / NXP MKW36A512xxx4 ,然后单击“确定”按钮。   4- 在以下路径中创建一个名为 MKW36A 的新文件夹: <SDK_root>/middleware/wireless/framework_5.4.6/DCDC/Interface <SDK_root>/middleware/wireless/framework_5.4.6/DCDC/Source <SDK_root>/middleware/wireless/framework_5.4.6/LowPower/Interface <SDK_root>/middleware/wireless/framework_5.4.6/LowPower/Source <SDK_root>/middleware/wireless/framework_5.4.6/XCVR     5- 复制位于上述路径的 MKW36Z 文件夹内的所有文件,然后粘贴到 MKW36A 文件夹中。   6- .在工作区中选择信标项目,然后按 Alt + F7 打开项目选项窗口。   在“ C/C++ Compiler/Preprocessor ”窗口中,将所有路径里 的 MKW36Z 文件夹的重命名为 MKW36A 文件夹。在已定义的符号文本框中,将 CPU_MKW36Z512VHT4 宏重命名为 CPU_MKW3 6A512VFT4。结果如下图所示: 然后 单击确定按钮。 $PROJ_DIR$/middleware/wireless/framework_5.4.2/LowPower/Interface/MKW36A $PROJ_DIR$/../../../../../../../devices/MKW36A4/drivers $PROJ_DIR$/../../../../../../../middleware/wireless/framework_5.4.2/DCDC/Interface/MKW36A $PROJ_DIR$/../../../../../../../middleware/wireless/framework_5.4.2/XCVR/MKW36A4 $PROJ_DIR$/../../../../../../../devices/MKW36A4 $PROJ_DIR$/../../../../../../../devices/MKW36A4/utilities     7- 展开 startup 文件夹,选择所有文件,单击鼠标右键,然后选择“ Remove ”选项。在文件夹上单击鼠标右键,然后选择““ Add/Add files ”。添加位于以下路径的 startup_MKW36A4.s : <SDK_root>/devices/MKW36A4/iar/startup_MKW36A4.s 另外,将 system_MKW36A4.c 和 system_MKW36A4.h 添加到 startup 文件夹中。 这两个文件都位于 以下 路径: <SDK_root>/devices/MKW36A4   8- 在 bluetooth->host->config 文件夹中打开“ ble_config.h ”文件。在以下代码中添加“ defined ( CPU_MKW36A512VFT4 )”: /* The maximum number of BLE connection supported by platform */#if defined(CPU_QN9080C) #define MAX_PLATFORM_SUPPORTED_CONNECTIONS 16#elif (defined(CPU_MKW36Z512VFP4) || defined(CPU_MKW36Z512VHT4) || defined(CPU_MKW36A512VFP4) || defined(CPU_MKW36A512VHT4) || defined(CPU_MKW36A512VFT4) || \ defined(CPU_MKW35Z512VHT4) || defined(CPU_MKW35A512VFP4) || \ defined(CPU_K32W032S1M2CAx_cm0plus) || defined(CPU_K32W032S1M2VPJ_cm0plus) || \ defined(CPU_K32W032S1M2CAx_cm4) || defined(CPU_K32W032S1M2VPJ_cm4) || \ defined(CPU_MKW38A512VFT4) || defined (CPU_MKW38Z512VFT4) || defined(CPU_MKW39A512VFT4) || \ defined(CPU_MKW37A512VFT4) || defined(CPU_MKW37Z512VFT4))‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍  9- 在 source-> common 文件夹中打开“ ble_controller_task.c ”文件。在以下代码中添加“ defined ( CPU_MKW36A512VFT4 )”: #elif (defined(CPU_MKW35A512VFP4) || defined(CPU_MKW35Z512VHT4) || defined(CPU_MKW36A512VFP4) || defined(CPU_MKW36A512VFT4) ||\ defined(CPU_MKW36A512VHT4) || defined(CPU_MKW36Z512VFP4) || defined(CPU_MKW36Z512VHT4))/* Select BLE protocol on RADIO0_IRQ */ XCVR_MISC->XCVR_CTRL = (uint32_t)((XCVR_MISC->XCVR_CTRL & (uint32_t)~(uint32_t)( XCVR_CTRL_XCVR_CTRL_RADIO0_IRQ_SEL_MASK )) | (uint32_t)( (0UL << XCVR_CTRL_XCVR_CTRL_RADIO0_IRQ_SEL_SHIFT) ));  10-生成项目。 至此,该项目已经迁移 完成 。  
View full article
KW36-创建保留存储器内容的 OTAP 镜像 简介 当 OTAP 客户端(接收软件更新的设备,通常为 Bluetooth LEPeripheral )从 OTAP 服务器(发送软件更新的设备,通常为 Bluetooth LE Central )请求软件更新时,用户可能希望保留以前获取的一些数据,例如绑定信息,系统振荡器的调整值或者应用程序的 NVM 数据。 本文档将介绍在执行 OTAP 更新时,保留需要的指定数据内容。 本文档适用于熟悉 OTAP 自定义 Bluetooth LE 服务的开发人员。相关更多信息,可以阅读以下文章: 使用OTAP客户端软件对KW36设备进行重新编程。 OTAP Header 和子元素 OTAP 协议为软件更新实现了一种数据格式,该格式由 Header 和指定数量的子元素组成。 OTAP Header 描述了关于软件更新的普通信息,其格式定义如下图所示。 有关 Header 字段的更多信息,请转至 SDK 中的 <SDK_2.2.X_FRDM-KW36_Download_Path> \ docs \ wireless \ Bluetooth 中的《 Bluetooth Low Energy Application Developer's Guide 》文档的 11.4.1 Bluetooth Low Energy OTAP Header 一章。   每个子元素都包含用于特定目的的信息。 用户可以为其应用程序实现专有字段(有关子元素字段的更多信息,请转至 SDK 中的 <SDK_2.2.X_FRDM-KW36_Download_Path> \ docs \ wireless \ Bluetooth 中的《 Bluetooth Low Energy Application Developer's Guide 》文档的 11.4.1 Bluetooth Low Energy OTAP Header 一章。 OTAP 包含以下子元素: 镜像文件子元素 值字段长度 (字节) 描述 升级镜像 n 该子元素包含实际的二进制可执行镜像,该镜像已复制到 OTAP 客户端设备的闪存中。 该子元素的最大字节长度取决于目标硬件。 扇区位图 32 该子元素包含目标设备闪存的扇区位图,该位图告诉引导加载程序哪些扇区应被覆盖,哪些扇区保持完整。 该字段的格式是首先使用每个字节的最低有效位,且最低有效字节和位代表闪存的最低存储扇区。 镜像文件 CRC 2 这是在镜像文件的所有元素(此字段本身除外)上计算的 16 位 CRC 。 该元素必须是通过空中发送的镜像文件中的最后一个子元素。 OTAP 扇区位图子元素字段 KW36 闪存分为: 一个 256 KB 程序闪存( P-Flash )阵列,每个扇区大小 2KB ,闪存地址范围为 0x0000_0000 至 0x0003_FFFF 。 一个 256 KB FlexNVM 阵列,每个扇区大小 2KB ,闪存地址范围为 0x1000_0000 至 0x1003_FFFF ,别名存储器的地址范围为 0x0004_0000 至 0x0007_FFFF 。   位图子元素的长度为 256 位,就 KW36 闪存而言,每个位代表 2KB 扇区,覆盖从 0x0-0x0007_FFFF 的地址范围( P-Flash 到 FlexNVM Alias 地址范围),其中 1 表示该扇区应被擦除, 0 表示应保留该扇区。 OTAP 引导加载程序使用位图字段来获取在使用软件更新对 KW36 进行编程之前应擦除的地址范围,因此必须在发送软件更新之前对其进行配置,使得包含保留数据的内存地址范围内其内容保持不变,仅擦除将被软件更新覆盖的地址范围的数据。   例如:假设开发人员想要保留 0x7D800-0x7FFFF 之间的地址范围和 0x0-0x1FFF 之间的地址范围的数据,并且必须擦除其余数据。 0x7D800-0x7FFFF 之间的地址范围对应于高地址 5 个闪存扇区, 0x0-0x1FFF 之间的地址范围是低地址 4 个扇区。   因此,这意味着应将 256 和 252 之间的位( 256 、 255 、 254 、 253 和 252 )以及 4 和 1 之间的位( 4 、 3 、 2 和 1 )设置为 0 ,则 OTAP 位图为 : 0x07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 使用 NXP 测试工具配置 OTAP 位图以保护指定地址范围的数据 在 恩智浦网站 上下载并安装用于连接产品的测试工具   在 PC 上打开 NXP Test Tool 12 软件。 转到 “ OTA 更新 -> OTAP 蓝牙 LE” ,然后单击 “ 浏览 ...” 按钮加载用于软件更新的映像文件( NXP 测试工具仅接受 .bin 和 .srec 文件)。 选择 “ 覆盖扇区位图 ” 复选框,配置 OTAP 位图,并更改默认值为新的位图值。 配置完位图后,选择 “ 保存 ...” 。   然后,弹出一个窗口,用于选择保存 .bleota 文件的目录。 填写文件名,点击保存。 在 Android 和 iOS 上,该文件可以使用 IoT Toolbox 中的 OTAP 进行软件升级。 这个新的 .bleota 文件所包含位图告诉 OTAP 引导加载程序哪些扇区将被擦除,哪些扇区将被保留。    
View full article