NXP Designs Knowledge Base

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

NXP Designs Knowledge Base

Discussions

Sort by:
Background:  ➢ IP protection is important for most customers, Kinetis, LPC54 series and i.MX RT have necessary security features that help us to win customers and markets. ➢ LPC55 series is a new generation of IoT MCU which is used for consumer and industrial market. LPC55 non-S parts are adopted by most customers due to its low-cost and easy-to-use features, but its secure features are different with S parts and is significantly simplified. ➢ LPC55 is designed for secured IoT application, so it’s supposed to hide the SWD/ISP ports after development work is finished. If the SWD/ISP ports are secured, they couldn’t be used any more. While for LPC54 & Kinetis MCU, mass erase command can be used to recover the MCU after the MCU is secured. ➢ However, Customers need the feature to secure the debugging/ISP ports, but they also need to recover them in some cases: - Reprogramming to update firmware - Investigate and analyze failed parts returned from end market - Rescue the MCU if it’s locked and stuck ➢ According to customers’ requirements, NXP support team raised the proposal to implement a solution which can be used to secure and recover the SWD/ISP ports with an IAP backdoor method. Solution: By Operating PFR region, LPC55 could switch between secure and recovery mode.   lpc5506_debug_isp_test_20220714: demonstrate how to operate this region to lock Debug Port then how to recovery it. The user interaction could be raised by UART or button;         2.hmac_test_20220714: demonstrate one full security flow,      ➢ This is a complete solution to secure & recovery debugging/ISP ports on LPC55, and it uses host machine challenge mechanism to implement security features: ▪ Challenge Host machine against unknown host probe; ▪ Generates dynamic seeds, so that the final encrypt information will be dynamically changed; ▪ The image hash value is device related, that avoids same encrypt info for different image/product; ➢ Customer also could clip the solution to simplify application complexity: ▪ Use UUID for device information only, no seed is needed; ▪ Host machine can use fixed keys instead of image hash values to do info encryption; ▪ Host machine can use UUID lookup table to find out verification key; Every device is programmed with dedicated verification key during production.  Demonstration: The attached demos could run at LPC55S06 EVK, and could easily migrate to other LPC55 series.
View full article
IEEE 1588协议简单理解        IEEE 1588 是一个精密时间协议 (PTP),用于同步计算机网络中的时钟。 在局域网中,它能将时钟精确度控制在亚微秒范围内,使其适于测量和控制系统。 IEEE 1588 标准为时钟分配定义了一个主从式架构,由一个或多个网段及一个或多个时钟组成。 ​       TSN 网络中时间同步协议使用 IEEE 802.1AS 协议,它基于 IEEE 1588 协议进行精简和修改,也称为 gPTP 协议。 ​       IEEE 1588 协议简称精确时钟协议 PTP(Precision Timing Protocol),它的全称是“网络测量和控制系统的精密时钟同步协议标准”(IEEE 1588 Precision Clock Synchronization Protocol)。其工作的基本原理,是通过主从节点之间进行同步数据帧的发送,记录数据帧的发送时间和接收时间信息进行,并且将该时间信息添加到该数据帧中。从节点获取这些时间信息,并计算从节点本地时钟与主时钟的时间偏差和网络节点之间的传输延时,对本地时钟进行纠正,使之与主节点时钟同步。一个 PTP 网络只能存在一个主时钟。 ​ PTP 协议主要分为两大部分来实现时钟同步功能: ​ 1、建立同步体系: ​       协议使用最佳主时钟算法(Best Master Clock Algorithm,BMCA),通过选取主时钟,建立主从拓扑关系,进而在整个 PTP 网络中建立起同步体系。 ​ 2、同步本地时钟: ​       协议使用本地时钟同步算法(Local Clock Synchronization Algorithm,LCS),通过 PTP 数据报文在网络主从节点之间的交换,计算各从节点本地时钟与主时钟间的时间偏差,调整本地时钟,使之与主时钟同步。 IEEE 1588v1 ​       整个 PTP 网络内的时钟可按照其上 PTP 通信端口的数目来划分成普通时钟(Ordinary Clock,OC)与边界时钟(Boundary Clock,BC):普通时钟只存在一个,而边界时钟则存在多个。一般在确定性不高的网络节点处使用边界时钟,例如交换机或者路由器一般用作边界时钟,如下图所示。在每个端口上,PTP 通信都是独立进行的。 1、边界时钟: ​      边界时钟上只允许存在一个从端口,与上级节点的主端口通信,将其本地时钟与级主端口进行同步。其余端口为主端口,与下游节点的从端口进行通信。边界时钟可以连接不同的网络协议。 ​ 2、同步体系建立流程: ​   (1)初始状态,各个节点端口会在指定的时间内侦听网络中的 Sync 数据帧; 若接收到 Sync 数据帧,节点端口将根据最佳主时钟算法决定端口状态。若没有收到 Sync 数据帧,该节点状态变更为 Pre_Master,并将自己假定为主时钟节点。此时节点端口状态表现为主时钟,但是并不发送 Sync 帧。 ​   (2)端口状态在一定时间内保持 Pre_Master: 若在端口指定时间内接收到 Sync 数据帧,则该端口状态由最佳主时钟算法决定。 若判定端口为主时钟,则将周期性地发送 Sync 帧;若判定为从时钟,则接受 Sync 帧,并计算偏差,纠正本地时钟。 ​ 若在该时间段内端口没有收到 Sync 数据帧,则将状态变更为主时钟,并且开始定时发送 Sync 数据帧。 ​   (3)主时钟和从时钟的状态随着时钟性能与运行状态的变化而变化。下图展示了 BMCA 中状态转移。 3、时间同步建立流程: ​ 如下图PTP同步原理         如图所示,Master为网路中的同步时钟源,可以认为其与UTC或者GPS时无限接近。Slave为网络中需要被同步设备。假设从Master到Slave的路径符合对称路径,那么路径上的延时我们设Delay,然后设备Master和设备Slave之间待同步的时间差值为Offset,即Slave比Master在同一时刻慢Offset。         Slave设备根据算出的Offset即可以进行本地时钟校准。但是1588V1协议依赖于链路的对称性,即Master到Slave与Slave到Master时延一致,这在实际网络状况下很难满足,故需要额外的不对称算法进行链路延时差计算和补偿校准。   IEEE 1588v2 ​IEEE1588V2在IEEE1588V1版本上做了改进和扩展。主要包括: ​ 1.新增点到点路径延时测量的独立消息模式。 端口 A 与端口 B 间的路径延迟时间 Delay 为: ​        在 PTPv1 中,平均路径延迟测量时通过 Sync 帧与 Delay_Req 帧配合使用的,但是在 PTPv2 中却不需要 Sync 帧的参与,仅通过 PDelay_Req 数据帧系列来进行测量。这是一个独立的延迟测量过程,不依赖 Sync 帧和同步体系建立的参与,使得测量精度有所提高,并且可以经过多次测量求得平均值得到更为准确的路径延迟。另一方面,如果网络中的同步体系发生改变,这时不需要重新计算该节点间的路径延迟,直接使用之前已测得的延迟数据,大大增强了协议执行的效率,使得协议更为方便灵活。在PTPv2 中,利用 PDelay_req 数据帧系列已成为主要的测量路径延迟方法。 ​ 2、新增透明时钟模型 ​        在 PTPv1 中,网络中间节点均采用边界时钟模型。与网络中唯一的主时钟,即一个普通时钟连接的边界时钟,其上唯一的从端口接收主节点发送的同步数据帧,与主时钟实现同步,其余的主端口和与之相连的其他边界时钟发送同步数据帧,最后同步到网络边缘的普通时钟,这样便实现了整个网络的时间同步。这种方法虽然可行,但是由于这种方式是逐级同步,所以距离主时钟越远的节点,同步精度越低。 ​        当网络中的一些节点不需要进行时钟同步或者不具备同步功能时,便可采用透明时钟模型。透明时钟不像 BC/OC 模式那样,需要每个节点都与主时钟进行同步,它的端口只对协议数据帧进行转发,并将计算出的数据帧滞留时间添加在校正域中。这种方式将 PTP 数据帧的处理变得更为简单,降低了网络中 PTP 协议的实施难度,同时提高了各从节点的同步精度。 ​ 透明时钟有模型两种:端对端透明时钟,和点对点透明时钟。 ​     (1)端对端(E2E)透明时钟 ​ E2E 透明时钟对网络中普通数据帧不做任何处理,仅进行转达让其正常通过。但是对于 PTP 事件数据帧,则将他们从接收端口到发送端口间的驻留延迟时间累加到数据帧中的修正域,用以弥补 PTP 数据帧在经过其自身所带来的延迟误差。 ​     (2)点对点(P2P)透明时钟 ​ 点对点(P2P)透明时钟只转发特定的 PTP 报文,包括 Sync 帧、Follo_Up 帧和Announce 帧等。并且会采用 Pdelay_Req 数据帧系列计算每个端口与所连接的端口间的路径延迟时间,再与端口间延迟时间合并添加到时间修正域,来补偿数据帧从源端口到点对点透明时钟出端口的时间延迟。 ​ 3、增加单步时钟模型 ​        单步时钟模型解决了 Follow_Up 帧与 Sync 帧匹配问题。PTP 协议基本的同步过程采用双步模式,即主时钟节点发送 Sync 帧,和带有 Sync 帧发送时间的Follow_Up帧。这种方式虽然能提高 Sync 帧时间戳标记的精度,提高同步效果,但是在网络负载较大的情况下,数据帧很有可能发生丢失或者阻塞,造成两种数据帧的匹配出现差错。 ​        在 PTP 数据帧中设置一个标志,来使用单步模式,将 Sync 帧的发送时间与数据帧中的时间标签的差值作为传输延迟,并将其累加到修正域中。这样主时钟便通过单独的 Sync 帧而不需要 Follow_Up 进行时间的同步校准工作。 ​        单步模式可以减少网络流量,提高网络负载较大时同步的可靠性。单步模式需要额外的辅助硬件,来帮助计算时间修正值并将其累加到校正域中,这对网络的实时性有比较高的要求。 BMCA ​        BMCA,即最佳主时钟算法,它选择网络中性能最佳的时钟作为主时钟,并以 此建立网络拓扑,生成同步体系,进而实现时钟同步功能。 ​        最佳主时钟的选取是通过Announce帧在网络中各节点的传输,比较各个节点上的时钟属性(比如是否将时钟指定为主或者从时钟),用于标识精度的时钟等级,以及用于标识时钟源类型的时钟类型(比如铷钟、铯钟等),还有表示时钟偏移、方差等的时钟特性、时钟地址以及时钟端口号等特征来选择最佳主时钟,当其他时钟特征都一样是,协议会将端口号最小的节点时钟作为主时钟。IEEE 1588协议会以主时钟节点作为根节点形成树形拓扑结构,并且为避免生成回路,那些竞争失败的节点端口,协议将他们定义为被动或者禁用状态。
View full article
FAST BOOT FOR lx2160 IN adas •Objective To speed ​​​​up bringup of LX2 chip-based systems •Pain Points to Address The bringup time is much longer than 3s, which is very sensitive in ADAS systems or time-sensitive systems. •Value Proposition / Key Features The guide can help customers shorten uboot time from 5s to less than 1.5s, saving more than 70% bootup time. •Deliverables Demo based on LX2160ARDB board. Reference codes and patches. Guide for Fast boot document. Fast boot 广泛用于嵌入式设备,现以lx2160ardb板为例进行相关探索。 启动流程: 优化思路: 1.适当提高FSPI时钟速率 diff --git a/lx2160asi/flexspi_divisor_32.rcw b/lx2160asi/flexspi_divisor_32.rcw index 422139c..0f8d5c9 100644 --- a/lx2160asi/flexspi_divisor_32.rcw +++ b/lx2160asi/flexspi_divisor_32.rcw @@ -7,8 +7,10 @@ * Modify FlexSPICR1 register, to increase FlexSPI clock closer to 50MHz, * with divisor value as 32. * => 750 * 2 / 32 ==> 46.875MHz + *write 0x1e00900,0x00000013 + * 0f -12 =125M */ .pbi -write 0x1e00900,0x00000013 +write 0x1e00900,0x0f .end ​ 2.关键路径优化 固化spd参数 固化ddrc参数 BL33 裁剪 详细patch和测试结果参考附件。
View full article
         随着近年来人们对日常出行品质的提高,电动自行车(包括共享类)市场得到了飞速发展,其功能日趋复杂智能。作为电控部分的“三大件”,电驱,主控和仪表也在不断升级迭代,其中电驱发展经历了最早期的直流有刷电机驱动到直流无刷方波驱动再到如今的 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界面的参数信息。一份为基于NXP GUIGuider图形化工具设计开发的LVGL版本E-Bike迈速表工程,分为3个子界面显示车速和骑行状态等详细信息。第三份为移植到本参考设计上的LVGL官方Demo例程,里面包含了配置好的EZH驱动库和LittleVgl基本的设备输入输出框架,用户可以基于此例程灵活开发定制自己的LVGL based其他GUI应用。        目前基于ZLG AWTK和LVGL GUI的E-Bike迈速表显示屏方案在经过优化之后对主控MCU的资源的占用以及GUI整体刷新性能如下表1,由于两个工程所使用的GUI素材和布局不一样,所以不要对两者的资源占用和性能参数做对比。他们都可以满足大部分客户的应用需求(>15fps)。如果将显示屏的分辨率降低到320*240及以下小尺寸的情况下,整个系统的资源占用会相应的减小,刷新性能也会得到更大的提升。 表1 方案资源占用及GUI刷新性能(分辨率320*480 16bit) Demo Code Flash RAM Refresh Rate AWTK GUI Version 202KB 61KB 22fps LVGL GUI Version 206KB 78KB 17fps 写在最后:        本参考设计的初衷是针对E-Bike中低端仪表显示屏市场提供一个高性价比的选择,同时也可以作为一个对于显示,CAN通信和小封装有类似需求的平台性的参考方案推广,比如电摩,带显示屏的便携式医疗设备和工业IoT设备等,希望此方案能给市场带来更好的用户体验和高性价比的选择。 注:由于代码工程超过25M,不能上传到该Community,如有需要请联系NXP销售或FAE索取。
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
本文说明在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   add a new doc for lauterbach driver: S32G How to Develop the QSPI-Nor Lauterbach Script 目录 1    背景和参考资料... 2 1.1  背景说明... 2 1.2  参考资料... 2 2    高速读开发流程... 3 2.1  时钟相关修改... 5 2.2  Lut配置说明... 6 2.3  QSPI NOR控制器配置... 12 2.4  QuadSPI_Write32BytesDOPI读函数分析... 15 2.5  增加AHB read寄存器配置... 17 2.6  测试结果... 18 3    高速写开发流程... 19 3.1  Erase lut分析及调用... 19 3.2  Write lut分析及调用... 21 3.3  测试结果... 22 3.4  Lauterbach烧写镜像脚本说明... 22
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
目录 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
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 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 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_MKW36A512VFT4。结果如下图所示:然后单击确定按钮。 $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
[KW36, Hybrid]多个蓝牙LE连接+通用FSK演示应用程序 USL:https://community.nxp.com/docs/DOC-344510     文档目的 该文档通过描述一个与GFSK(通用频移键控)进行并行通信的多低功耗蓝牙连接节点拓扑,提供了一个混合应用程序(Wireless_UART + GFSK Advertising)的示例。这是SDK之外的另一个附加示例,SDK中我们定义了一个混合应用程序,演示了与GFSK并行通信的蓝牙LE广播和扫描。   读者 该文档的目的是为想要在低功耗蓝牙应用程序中使用、适配和集成GFSK功能的软件开发者提供指南。       搭建开发环境 工具链:     -IAR Embedded Workbench 8.32或更高版本;     https://www.iar.com/iar-embedded-workbench/ SDK: -此版本的固件已使用SDK_2.2.1_FRDM-KW36进行了测试,可以使用以下 链接下载:http://mcuxpresso.nxp.com/en/select     (请考虑选择Toolchain/IDE: All toolchains);     硬件: -2到5 块FRDM-KW36 开发板:https://www.nxp.com/demoboard/FRDM-KW36     操作流程: 此演示应用程序是针对FRDM-KW36平台设计的,可以轻松集成到使用KW35/36系列 MCU的任何电路板上。   该功能基于SDK(移动无线系统-MWS模块)上的共存机制。基于硬件链路层的实现,低功耗蓝牙具有比GFSK协议更高的优先级,因此,GFSK通信在低功耗蓝牙的空闲状态(非活动时段)内执行。   有关MWS模块的更多详细信息,请参阅SDK中的连接框架文档(Connectivity Framework Reference Manual.pdf)。   低功耗蓝牙同时支持central和peripheral两个角色。   KW36 SDK的集成 -下载附件并解压到…\SDK_2.2.1_FRDM-KW36\boards\frdmkw36\wireless_examples\hybrid 文件夹:   -打开IAR项目(SDK_2.2.1_FRDM-KW36_2019_07_19\board\frdmkw36\wireless_examples\hybrid\ble_w_uart_gfsk\freertos\iar\ble_w_uart_gfsk_freertos.eww)。   -该项目的组织方式如下:     功能   开关功能: -该功能在main.c文件中的BleApp_Handle Keys函数中定义; -FRDM-KW36: -SW2-开始扫描- Central设备; -长按SW2-开始扫描-peripheral设备;(长按 SW2指按住SW2键3秒钟以上) -SW3-启动/停止GFSK TX操作(扫描); -长按SW3-启动/停止GFSK RX操作(长按SW3指按住SW3键 3秒钟以上) 日志: -串口输出电路板的不同状态; -波特率115200;   验证 该解决方案已使用1个主设备和4个从设备进行了验证,如下所示:   1.创建网络     a.打开所有设备的串行通讯。重置后,您将看到以下消息:     b.在Central设备上,按SW2开始扫描; c.在peripheral设备上,长按SW2开始广播并等待串口上的确认;     d.在所有从设备上重复步骤b和c。 e.当Central设备的网络成功创建时,您将看到以下内容:           f.检查空中链路(连接间隔=312.5ms):   2.验证低功耗蓝牙的功能: -从每个从设备(peripheral)的串口写入一条消息(例如:testslaveX)并检查该消息是否打印在主设备的串口上。   -在主设备(Central)的串口终端上进行相同的测试。   -以下是该步骤的示例:     -空中日志:   3.启动GFSK通讯: -在其中的一块开发板上按SW3开始GFSK TX操作(AdvAddress = 0909090909的广播数据包);每隔1秒钟(gGenFskApp_Txlnterval_c)在空中发送一个ADV数据包。   -选择另一块开发板并长按 SW3以启动GFSK RX操作(RX间隔 = 100ms = gGenFskApp_Rxlnterval_c)   -收到来自地址 = 0909090909的ADV数据包时,它将在串口上打印出来,如下所示:   -空中GFSK TX数据包被列为ADV_NONCONN_IND:   4.验证GFSK和Bluetooth LE并行能力: -在主设备(Central)串口上写一条消息,并检查从设备(peripheral)串行终端上的反馈:     附上此应用程序的源代码。 真挚的问候 Ovidiu   附件 BLE+GFSK_Demo_application.zip(https://community.nxp.com/pwmxy87654/attachments/pwmxy87654/wireless-connectivity%40tkb/253/1/BLE+GFSK_Demo_application.zip)  
View full article
在KW3x蓝牙低功耗应用中集成NFC阅读器库 URL:https://community.nxp.com/t5/Wireless-Connectivity-Knowledge/Integrating-NFC-Reader-Library-in-a-KW3x-Bluetooth-Low-Energy/ta-p/1121247 版本历史 修订编号:1(共1) 最后更新:10-01-2019 03:59 AM 更新:ovidiu_usturoi 1.    简介 1.1 用途 本文提供了有关将NFC阅读器库如何集成到KW3x蓝牙低功耗应用程序的详细说明。 1.2受众 这篇文章的目的是为希望使用NFC 阅读器库并将其适配、集成到SDK无线连接示例中的软件开发人员提供指南。 1.3参考资料和资源 NFC阅读器库:nxp.com/pages/:NFC-READER-LIBRARY -NCF3320:nxp.com/products/:NCx3320 -CLRC663 plus:nxp.com/products/:CLRC66303HN -FRDM-KW36板:nxp.com/demoboard/FRDM-KW36 -KW35 / KW36 SDK:https://mcuxpresso.nxp.com/en/select -MCUXpresso IDE:nxp.com/products/:MCUXpresso-IDE 2. NFC 阅读器库总览 恩智浦NFC阅读器库是用C语言编写的模块化软件库,它提供了一个API,使客户能够为恩智浦非接触式阅读器IC创建自己的软件栈和应用程序, 阅读器IC为: - PN512; - CLRC633 系列; - PN7462 系列; - PN5180; 此API简化了NFC应用程序中所需的最常见操作,例如: -读取数据或将数据写入非接触式卡或标签; -与其他支持NFC的设备交换数据; -允许NFC阅读器IC模拟为卡. NFC阅读器库的设计方式使其可以轻松移植到具有多层体系结构的许多不同微控制器中:   作为主模块,有以下组件: -应用层(AL)-实现命令集以与MIFARE卡和NFC标签进行交互。 -NFC activity-实现可配置的发现循环,以检测非接触式卡,NFC标签或其他NFC设备。 -HCE和P2P组件,分别用于仿真Type 4标签和P2P数据交换。 -协议抽象层(PAL)-包含ISO14443,Felica,近邻和NFC标准的RF协议实施。 -硬件抽象层(HAL)-实现用于控制NFC前端RF接口和功能的驱动程序。 -驱动程序抽象层(DAL)-在主机MCU和读取器IC之间实现GPIO,计时器配置和物理接口(BAL)。 -OSAL模块,负责抽象OS或RTOS细节(任务事件,信号量和线程) 3. KW3x无线微控制器概述 KW3x无线微控制器(MCU)是高度集成的单芯片设备,可为汽车,工业和医疗/保健嵌入式系统提供低功耗蓝牙(Bluetooth LE)和通用FSK连接。 KW36 / 35无线MCU集成了Arm®Cortex®-M0+ CPU,最高有512 KB闪存和64 KB SRAM,以及2.4 GHz无线电,支持蓝牙LE 5.0和通用FSK调制。 低功耗蓝牙在任何主/从组合中最多支持8个同时连接。 KW36A / 36Z包含一个集成的FlexCAN模块,该模块可以无缝集成到汽车或工业CAN通信网络中,从而可以通过Bluetooth LE与外部控制和传感器监视设备进行通信。 有关更多详细信息,请参阅恩智浦网站信息: https://www.nxp.com/products/wireless/bluetooth-low-energy:BLUETOOTH-LOW-ENERGY-BLE. 4. NFC阅读器库–与FRDM-KW36集成 当前的NFC阅读器库v5.21.01不支持运行于Kinetis KW3x MCU。 本文将使用参考K82 NFC Reader Library软件包:www.nxp.com/pages/:NFC-READER-LIBRARY. 集成库所需的步骤是: -硬件准备(连接FRDM-KW36和NFC阅读器板); -设置开发环境(SDK下载,工作空间); -为FRDM-KW3x板准备适配文件; -将NFC应用程序集成到Wireless_UART Bluetooth LE示例中; -运行演示; 4.1硬件准备 所需硬件: -NCF3320 Antenna v1.0电路板作为NFC收发器; -FRDM-KW36电路板作为主机MCU,用于加载和运行蓝牙低功耗协议栈和NFC应用逻辑;   板卡之间的通信将使用以下引脚配置通过SPI通信进行: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Master board (FRDM-KW36)     Connects to       Slave board (NCF3320 Antenna v1.0)           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PTB0  (J2-pin10)                                      -                   IRQ PTB1  (J2-pin9)                              -                    Reset PTA16 (J2-pin1 - SPI1_Sout)                    -                    MOSI PTA17 (J1-pin5 - SPI1_Sin)                      -                    MISO PTA18 (J1-pin7 - SPI1_SCK)                -                 SCK PTA19 (J2-pin3 - SPI1_CS)                 -                  CS GND   (J3-pin7)                           -                  GND ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4.2搭建开发环境 安装MCUXpresso IDE(在本示例中,使用的版本是v10.2.0 build 759) -在MCUXpresso-IDE官方网页下载最新版本的IDE: www.nxp.com/products/:MCUXpresso-IDE. -安装IDE   获取最新的NFC Reader Library版本(在此示例中,使用的版本是v5.21.00) -在NXP NFC Reader Library官网下载(www.nxp.com/pages/:NFC-READER-LIBRARY) -切换到下载标签,然后点击下载按钮 -下载Kinetis K82F软件包的NFC阅读器库:   为FRDM-KW36板生成可下载的SDK软件包(SDK_2.2.1_FRDM-KW36) -导航至https://mcuxpresso.nxp.com/cn/select,然后选择FRDM-KW36板; -选择构建MCUXpresso SDK。 -确保工具链中已选择MCUXpresso IDE。 -使用“下载SDK”按钮开始下载SDK软件包:   创建MCUXpresso工作区 -打开MCUXpresso IDE并创建一个工作区; -将SDK_2.2.1_FRDM-KW36拖放到MCUXpresso IDE的installed SDKs选项卡中;   -将Wireless_Uart示例导入到当前工作空间:   4.3准备FRDM-KW3x板的适配文件 本章介绍驱动程序抽象层(DAL)为适配FRDM-KW36所需的更改: -解压缩NFC Reader Library并导航到boards文件夹:   -通过为GPIO和handlers设置正确的配置,为FRDM-KW36创建等效文件(Board_FRDM_KW36FRc663.h); -与FRDM-K82F板相比,以下是FRDM-KW36板所需的差异:   -将FRMD-KW36添加到…DAL \ cfg \ BoardSelection.h文件中: #ifdef PHDRIVER_FRDM_KW36FRC663_BOARD #include <Board_FRDM_KW36FRc663.h> #endif -在KinetisSDK文件夹中,更新以下依赖项: o PIT驱动程序IRQ名称:   o打开漏极和引脚锁配置: - phDriver_KinetisSDK.c:   - phbalReg_KinetisSpi.c:   -将PHDRIVER_FRDM_KW36FRC663_BOARD定义添加到…\ NxpNfcRdLib \ types \ ph_NxpBuild_Platform.h文件中,以启用正确的NFC收发器:   4.4将NFC应用程序集成到Wireless_UART Bluetooth LE示例 在本章中,将把BasicDiscoveryLoop NFC示例集成到Wireless_UART Bluetooth LE应用程序中。 为此,需要执行以下步骤: -在wireless_uart项目位置上,创建一个“ nfc”文件夹:   -从修改后的NFC阅读器库中复制DAL,NxpNfcRdLib和phOsal文件夹:   -在wireless_uart项目位置的“source”文件夹中,创建一个新的“ nfc”子文件夹,以集成BasicDiscovery loop文件:   -BasicDiscoveryLoop文件将需要进行一些更改: o将主函数重命名为NFC_BasicDiscoveryLoop_Start; o删除驱动程序/操作系统初始化部分; (所有更改都可以在附件中看到) -通过按F5来更新最新的更改,以更新MCUXpresso工作区:   -更新链接器信息(项目属性-> C / C ++构建->设置)和预处理器定义(项目属性-> C / C ++构建->预处理器):   -添加依赖项: o PIT模块/ PIT模块初始化; o更新LED,SW配置; o增加堆大小(gTotalHeapSize_c); o在wireless_uart.c应用程序中为NFC添加功能; (所有更改都可以在附件中看到); 考虑到随附的ZIP归档文件,我们可以轻松地将frdmkw36_w_uart_ncf3320_basic_discovery.zip文件拖放到MCUXpresso工作区:     4.5运行演示 -根据第4.1章描述连接硬件; -在PC端打开串行终端软件,并设置FRDM-KW36板对应的COM口。 使用的BaudRate是115200。 -在FRDM-KW36上按SW2键开始启动广播。 -打开移动应用程序-IoT toolbox-Wireless UART。 FRDM-KW36板将列为NXP_WU:   -创建蓝牙LE连接。串口将打印包含蓝牙LE操作的日志:   -使用靠近NCF3320 Antenna v1.0板的NFC卡来启动发现演示。 -一旦检测到卡片,便会将事件发送到移动应用程序,其中包括卡片支持的NFC技术以及卡的UUID,演示视频如下连接: (https://www.youtube.com/watch?v=wCCz5zDIwHE&feature=youtu.be) https://community.nxp.com/t5/video/gallerypage/video-id/8707 附件是本文应用例程的源码,下载链接: https://community.nxp.com/pwmxy87654/attachments/pwmxy87654/wireless-connectivity%40tkb/200/1/ble_nfc_demo.zip      
View full article