NXP Designs Knowledge Base

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

NXP Designs Knowledge Base

Discussions

Sort by:
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
本文说明在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 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
第一章 简介 MCU 闪存加载器是一个可配置的闪存烧写实用程序,可通过 MCU 上的串行通讯进行操作。 它可以在整个产品生命周期(包括应用程序开发和最终产品制造等)中对 MCU 进行快速轻 松编程。 MCU 闪存加载器将以高度可配置的二进制或完整源代码形式提供。主机端命令行 和 GUI 工具可用于与闪存加载器进行通信。用户可以利用主机工具通过闪存加载器上传和/ 或下载应用程序代码。 第二章 闪存加载器协议 本节介绍主机和 MCU 闪存加载器之间数据包传输的通用协议。介绍包括不同事务的数据包 传输,例如无数据阶段的命令以及带传入或传出数据阶段的命令。 第三章 闪存加载器数据包类型 MCU 闪存加载器设备以从机模式工作。所有数据通信均由主机发起,该主机可以是 PC 主 机,也可以是嵌入式主机。 MCU 闪存加载器设备是接收命令或数据包的目标机。主机和目 标机之间的所有数据通信均采用分包形式。 第四章 MCU闪存加载器API 所有 MCU 闪存加载器命令 API 均遵循由成帧数据包打包的命令数据包格式,如前几小节所 述。 第五章 支持的外设 本小节介绍 MCU 闪存加载器支持的外设。 第六章 外部存储器的支持 本小节介绍 MCU 闪存加载器支持的外部存储器设备。要正确使用外部存储器设备,必须使 用相应的配置文件启用该设备。闪存加载器无法访问未启用的外部存储设备。 MCU 闪存加 载器使用存储器标识符启用特定的外部存储设备,如下所示。 第七章 安全实用程序 MCU 闪存加载器支持某些安全实用程序,用于轻松生成与安全性相关的块。请注意,必须 首先对闪存加载器本身进行签名才能正确启用安全实用程序。
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
功能需求 RT117X系列MCU在汽车和工业类产品中有广泛应用,有很多客户对LIN通讯有需求,RT1176有12路独立的LPUART接口,最大支持的波特率能支持到20M,而且每一路都支持Break发送和中断接收,可以用来配合定时器实现LIN的主机和从机通讯。但是目前RT117X的EVK板没有放置LIN的收发器,SDK也没有相关LIN的示例代码和LIN协议栈支持,所以本示例目的是移植KW36工程中的LIN 2.1版本的代码到RT1176 EVK板子上,在硬件上通过跳线将LIN Master主节点和 Slave从节点的LPUART TX/RX线连接到FRDM-KW36板载的LIN收发器TJA1027上,分别实现LIN 2.1版本协议栈在Master和Slave节点的通讯功能验证,同时还需支持Auto Baud Rate自动波特率调整。为客户做二次开发或者移植用户自己的LINstack提供底层驱动,提高开发效率。 代码包软件   RT1176 LIN Master节点代码:RT1170_LIN_Porting_Demo_Master.7z RT1176 LIN Slave节点代码(支持自动波特率😞 RT1170_LIN_Porting_Demo_Slave_with_Auto_Baud_Rate.7z 配置FRDM-KW36板载LIN 收发器的代码: KW36_LIN_PHY_Board_Init.7z 硬件Setup   MIMXRT1170-EVK: 2pcs,分别用作LIN Master节点和Slave节点。 FRDM-KW36:2pcs, 分别用作Master节点的收发器,和 Slave节点的收发器 下图是系统连接,2块RT1170 EVK板分别和2块FRDM-KW36板通过Arduino接口连接在一起,然后将两块KW36之间的LIN收发器通过 J13 连接在一起,需要使用外部12V adapter为FRDM-KW36供电,否则板上的LIN收发器无法工作。特别强调的是,如果需要使能自动波特率检测的话,还需要将Slave节点RT1176 Arduino接口的J9-Pin2引脚连接到RT1176 Arduino接口的J9-Pin12引脚,作为Timer 脉冲捕捉的输入,即可完成系统硬件的setup。   软件Setup:   在以上硬件连接完成后,按照如下步骤下载对应软件: - Step1: 下载KW36_LIN_PHY_Board_Init.7z代码到两块FRDM-KW36板子上;  该代码中主要实现两个功能:第1个拉高板子的PTC5引脚,唤醒LIN收发器TJA1027。第2个将PTA18引脚配置成disable高阻状态。如果该引脚作为GPIO输出或者LPUART TX功能,会导致LIN slave回应数据出错(bit位丢失或者错误)。究其原因猜测应该是短路导致,当这个引脚作为GPIO输出或者LPUART TX功能,内部会有上拉,当RX1176 TX引脚输出Low时,由于电路上没有串联电阻(板子上使用的0Ω),会导致引脚上出现大电流。尤其是第2个点,花费了很多时间去查这个问题,从波形去看,是有数据输出的,但只是数据不对,很具有迷惑性。当然如果客户是自己打的板子,板子上已经有LIN收发器就不需要这一步,直接跳到Step2即可。 - Step2: 下载RT1170_LIN_Porting_Demo_Master.7z代码到作为Master节点的IMRT1176-EVK板; - Step3: 下载RT1170_LIN_Porting_Demo_Slave_with_Auto_Baud_Rate.7z代码到作为Slave节点的IMRT1176-EVK板,如果需要使能自动波特率调整,需要配置宏linUserConfigSlave.autobaudEnable = true; 代码中默认是打开的。 实验结果   打开两个IMRT1176-EVK板串口,波特率配置115200,单击RT1176 Master节点上的按键SW7,便可以启动Master节点开始发送数据,通讯波形和串口打印信息如下两张图所示。   代码移植的几个难点   1. LIN通讯协议栈的调度流程的理解,包括Wakeup段,Break段,Sync段,PID段,Data段的状态切换和跳转,每个段的超时监测和错误处理,其核心思想有两个:一个在于LIN的RX引脚要不断去monitor TX引脚的状态,然后去切换状态机,具体调度的流程在后文会详细介绍,这里不展开。第二个是准确获取在每个段的定时器时间,尤其是超时超过一个overflow周期的情况,需要对timerGetTimeIntervalCallback0函数有理解。 2. 自动波特率调整功能的支持,该功能的原理是测量SYNC段的8个脉冲的脉宽,如果每个脉宽差异在2%范围内,再根据脉冲宽度去判断对应的波特率。在原来KW36的代码中是使用TPM的Overflow中断来作为计时,Edge中断来触发,而RT1176没有TPM,只能使用Qtimer (Qtimer功能上要更强于TPM),但是不巧的是Qtimer不支持Overflow中断(参见芯片ERRATA 050194),所以只能使用compare中断来实现类似的功能,而原有的计时定时计算都是基于overflow的,因此就需要对定时器部分的代码做大范围的更改。 应用中考虑到timerGetTimeIntervalCallback0函数在自动波特率调整时和超时监测处理时的一致性,最好使用同一个Timer的同一个channel,这就需要这个Timer既支持普通的定时中断模式,又支持input capture功能。对于TPM来说,是无法实现的因为两次在寄存器配置上时互斥的, 参见下图。幸运的是Qtimer支持这个feature,只是需要根据SDK代码做些配置 前面提到,需要QTimer支持input capture功能, 触发信号是LPUART_RX引脚的信号,需要硬件loop到Qtimer支持的硬件引脚上,对于KW36来说,只需要把这两个物理引脚连接在一起即可,但对RT1176来说, 只有这一步还不行,还需要对XBAR进行配置,将Qtimer的TIMER 1的触发引脚(合计有4个物理引脚)Link到QTIMER对应的Channel上,因为RT1176有4个QTimer,每个Qtimer有4个通道,标称的Qtimer trigger pin有4个,那具体哪个pin触发哪个QTimer的哪个通道,是需要配置的。如果客户没有使用过XBAR配置起来有难度,还好MCUXpresso config tool支持配置,可以简便的完成配置。示例代码和触发关系如下,如果实际硬件使用的物理引脚有区别,需要对应修改。 RT的XBAR功能非常强大,或许可以不使用外部的物理连线,直接将Qtimer的出发引脚的信号直接在内部Loop到LPUART_RX引脚,这样就更加灵活,此处只提供一个思路,不再进一步延伸。 IOMUXC_GPR->GPR15 = ((IOMUXC_GPR->GPR15 & (~(IOMUXC_GPR_GPR15_QTIMER4_TRM1_INPUT_SEL_MASK | IOMUXC_GPR_GPR15_QTIMER4_TRM2_INPUT_SEL_MASK)))/*Mask bits to zero which are setting*/ | IOMUXC_GPR_GPR15_QTIMER4_TRM1_INPUT_SEL(0x00U) /*QTIMER4 TMR1 input select: 0x00U*/ | IOMUXC_GPR_GPR15_QTIMER4_TRM2_INPUT_SEL(0x00U) /*QTIMER4 TMR2 input select: 0x00U*/ ); 4. 在状态机切换和超时以及错误处理过程中,经常会看到两种模式Sleep模式和Idle模式,区别是什么呢? LIN_LPUART_GoToSleepMode: 函数会关闭Break中断,RX接收中断,帧错误中断,保留RX边沿 中断; LIN_LPUART_GotoIdleState 函数会打开Break中断,RX接收中断,帧错误中断,关闭RX边沿中 断; 实际通讯波形   Master作为Subscribe角色时,发送Header,由Slave发送Respone Master作为PUBLIC角色时,同时发送Header,以及Respone 按照调度表依次发送LI0_lin_configuration_RAM数组定义的PID数据 static uint8_t LI0_lin_configuration_RAM[LI0_LIN_SIZE_OF_CFG]= {0x00, 0x30, 0x33, 0x36, 0x2D, 0x3C, 0x3D ,0xFF}; Qtimer准确读取wake up信号的脉冲宽度 Slave使能Auto baud rate后读取到的每个脉冲宽度数据 免责声明: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, *INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUTNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, ORPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY,WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE)
View full article
                                     编写 K32L3A MCU 闪存 IFR 字段 简介 K32L3A60VPJ1AT MCU 是下一代 Kinetis 双核设备。该设备带来了传统 Kinetis 设备不支持 的处理和多任务处理功能。此外, K32L3A60VPJ1AT 还提供了改进的功耗和安全功能。这 些安全功能的一些重要方面在于非易失性信息寄存器(IFR)存储区域以及该区域的编程方 式。 IFR 存储器区域是与主阵列分离的具有受限访问的储器空间,并且由可擦除 IFR 区域和 不可擦除 IFR 区域组成。不可擦除的 IFR 区域包括程序的一种标识符和版本标识符。可擦 除的 IFR 区域具有闪存安全性,闪存选项,批量擦除启用以及控制设备行为的其他此类功 能。在旧版 Knietis 设备中,主闪存阵列的某些字段(闪存地址 0x400-0x40F)在引导时配 置了 IFR。但是,在 K32L3A60VPJ1AT 中,不再以这种方式控制 IFR 存储区。尝试配置这些 设置时,这会带来挑战。 本文档的目的是解释如何更改这些设置,并提供一些有关如何进 行这些更改的选项。 配置 IFR 字段的第一步是了解如何通过硬件对这些字段进行编程。使用称为“程序索引命令” 的特殊闪存命令对 IFR 字段进行编程。编程后,必须先擦除这些字段,才能重新编程闪存 配置值。擦除这些值的唯一方法是通过批量擦除。这提供了安全性,因为在不删除用户代 码的情况下也无法更改 IFR 值。此外,更改用户代码映像不会影响引导加载程序的操作, 从而确保可以执行安全的引导功能。此处描述了写入可擦除 IFR 值的过程: 1.使用程序索引命令(0x43)写入 FCCOB0。 2.用要编程的索引写入 FCCOB1.可能的索引列在“可擦除 IFR 映射”表中(K32L3A6 参考 手册中的表 16.4.1.2)。 3.将 FCCOB2 和 FCCOB3 写入 0x00,因为此命令不使用它们。 4.用所需的值写入 FCCOB4 - FCCOBB。(请注意, 并非所有索引都使用所有 FCCOB 字 段。请确保查阅 Erasable IFR Map 表,其中 FCCOB 字段用于您正在编程的索引。) 5.将 0x70 写入闪存状态寄存器(FSTAT),以清除上一个闪存命令中可能存在的任何错 误。(请注意,此命令必须是字节写操作。) 6.将 0x80 写入闪存状态寄存器(FSTAT)以启动已编程的闪存命令。 7.轮询 FSTAT 寄存器,直到 CCIF 位字段(位字段 7)为 1(‘1’)为止。(请注意, 用您 的脚本语言可能无法执行此操作,或者仅等待 flash 命令完成执行可能会更容易。在这 些情况下,等待时间比典型的 Program Index 命令完成时间 110us 长的多) 对 IFR 进行编程后,应回读 IFR 以验证其是否正确完成。其过程如下: 1.使用读取索引命令(0x41)写入 FCCOB0. 2.将 FCCOB1 写入要读取的索引。可能的索引列在“可擦写 IFR 映射“表中(K32L3A6 参 考手册中的表 16.4.1.2)。 3.用 0 写入 FCCOB2-FCCOBB。结果将存储在 FCCOB4-FCCOBB 中,因此,应清除这 些内容以确保收到正确的结果。 4.将 0x70 写入闪存状态寄存器(FSTAT),以清除上一个闪存命令中可能存在的任何 错误。注意,该命令必须是字节写入。 5.将 0x80 写入闪存状态寄存器(FSTAT)以启动已编程的闪存命令。 6.轮询 FSTAT 寄存器,直到 CCIF 位字段(位字段 7)为 1(‘1’)为止。(请注意,在您 的脚本语言中可能无法执行此操作,或者只是简单地等待 flash 命令完成执行可能会 更容易。在这些情况下,等待时间要比最长的读取索引命令完成时间 35us 长的多) 使用程序索引命令时,必须知道要修改哪个索引才能创建正确的 Flash 命令。索引列表可 以在 K32L3A60VPJ1AT 参考手册的 Flash 章节的 IFR 描述部分中找到。 有几种不同的选项可用于对 FORT 字段进行编程。这些选项是: 1.使用 Kinetis Flash 工具 2.使用 blhost 3.调试器脚本 4.用户软件中的子例程 选项#1: Kinetis Flash 工具 使用 Kinetis Flash Tool 可能是更改 IFR 值的·最方便的方法。 Kinetis 闪存工具使用 UART 或 USB 协议与 K32L3A6 引导加载程序接口并写入所需的 IFR 字段。 Kinetis Flash 工具的最大优 点之一是,它为用户提供了一个图形界面,可以轻松的对 IFR 字段进行编程。下图是 Kinetis Flash 工具的图片,并突出显示了对 IFR 字段进行编程时要使用的重要输入控件和选 项卡: 1.此字段是端口集框。他选择与引导加载程序通信时要使用的接口(UART 或 USB)。此 框还允许配置接口。有关默认配置,请查阅 K32L3A6 参考手册。 2.这是“Flash 实用工具”选项卡。选择此选项卡以查看此图像中显示的控件。 3.这是索引输入字段。应在此处输入要编程的 IFR 的索引。 4.这是十六进制数字字段。该值将在“索引”字段中指示的 IFR 索引处进行编程。此处的 值应为十六进制格式,而不能包含前面的“0x”。 5.这是字节计数字段。这告诉实用程序要编程多少个字节,并且必须是该 IFR 索引的值, 请参考参考手册中的“可擦除 IFR 映射表”。 6.这是程序按钮。填写完所有字段后,单击此按钮可以对所需的 IFR 位置进行编程。 选项#2: BLOHOST MCUBoot 软件包还包括一个命令行可执行文件,可与引导加载程序交互。该工具 blhost 还 可用于对 IFR 字段进行编程。“flash-program-once”命令应用与对所需的 IFR 位置进行编程。 该命令的语法如下: flash-program-once<index><byteCount><data> 因此,例如, 如果要使用 0xFFFFF3FF 编程 FOPT IFR 字段(记录索引 0x84),则使用此命令 的正确语法应为 flash-program-once 0x84 4 FFFFF3FF 编程后,“一次刷新读取”命令可用于回读并验证已编程的 IFR 字段。以下是使用以前的 IFR 位置的示例 flash-read-once 0x84 4 以下是使用 blhost 擦除设备,对 FOPT IFR 进行编程以及从命令行读回 FOPT IFR 的完整示 例。 选项#3:调试器脚本 简单的调试器脚本是写入 IFR 值的另一种便捷方式。调试器脚本在调试会话启动过程的后台 执行(因此是用户的隐藏操作),通常可以使用任何文本编辑器轻松地对其进行编辑。但是, 更改值可能更麻烦,因为这通常必须由用户在每次编程时手动完成。考虑到这一点,最好为 不同的配置使用不同的连接脚本 使用调试器脚本的第一步是编写调试器脚本。调试器脚本的功能和语法取决于您的工具链。 就本文档而言,我们将重点介绍 MCUXpresso IDE。 MCUXpresso IDE 使用与调试器无关的 PokeXX 和 PeekXX 命令(其中 XX 是 8、 16 或 32,具体取决于要对所需寄存器进行字节访 问,半字访问,还是字访问)。因此,无论您使用 JLink 或 CMSIS-DAP 进行调试,还是使用 任何其他调试器,在设备上运行的相同命令将继续起作用。下面是一个 MCUXpresso 连接脚 本示例,该脚本写入 FOPT 寄存器,然后将其读回以打印到调试日志。 5140 REM ====================Program FOPT=================================== 5150 poke32 this 0x40023004 0x43840000 5160 REM Stuff FCCOB registers with desired FOPT value 5170 Poke32 this 0x40023008 v% 5171 Print “New Val “;~s% 5180 Poke32 this 0x4002300c 0x00000000 5180 Poke8 this 0x40023000 0x70 5190 Poke8 this 0x40023000 0x80 5200 wait 1000 6000 REM ================== Read FOPT ===================================== 6001 REM Now read the FOPT back 6010 Poke32 this 0x40023004 0x41840000 6020 Poke32 this 0x40023008 0x00000000 6030 Poke32 this 0x4002300c 0x00000000 6040 Poke8 this 0x40023000 0x70 6050 Poke8 this 0x40023000 0x80 6060 wait 1000 6070 s% = Peek32 this 0x40023008 6080 Print "New FOPT Val ";~s% 请注意,在上面的脚本中, v%是所需的 FOPT 值,并且它已在未显示的脚本部分中定义 (第 164 行)。 162 REM This is the value to be written to the FOPT 164 v% = 0xfffff3ff 编写脚本后,必须告知 MCUXpresso 使用连接脚本。这是在“调试配置”窗口中完成的。假设 已创建调试配置,请单击绿色错误图标旁边的箭头,然后选择“调试配置”。   在出现的对话框中,选择要使用的调试配置,然后选择“Linkserver 调试”选项卡。在“连接脚 本”字段中,将 MCUXpresso 指向连接脚本的位置。 这就是在 IDE 中需要完成的所有工作。现在,所选的调试配置应使用编写的脚本。 一些调试器将允许脚本的独立命令行运行,例如 JLink 调试器。由于 JLink 是我们遇到的最 受欢迎的外部调试器之一,因此下面提供了使用此脚本进行编程的示例。 //现在对 FOPT 进行编程 w4 0x40023004, 0x43840000 //43 选择程序索引命令。 84 选择 FOPT IFR 字段。 //用我们要写入的 FOPT 值填充 FCCOB 寄存器(4-7)。 //**(启动设置) ** w4 0x40023008, 0xfffff3ff //写入 0xFFFF_1FFF 以从内部 Flash 引导 M4。声明 NMI 引 脚将强制从 ROM 引导。 //用伪值写入 FCCOB 寄存器 8-B。 w4 0x4002300c, 0x00000000 //写入 FSTAT 寄存器以清除可能存在的任何错误。 w1 0x40023000, 0x70 //启动 flash 命令。 w1 0x40023000, 0x80 //等待 flash 命令完成。 Sleep1 //现在读回 FOPT w4 0x40023004, 0x41840000 //43 选择程序索引命令。 84 选择 FOPT IFR 字段。 //用我们要写入的 FOPT 值填充 FCCOB 寄存器(4-7)。 //**(启动设置) ** w4 0x40023008, 0x00000000 //写入 0xFFFF_F1FF 以从内部 Flash 引导 M0+。声明 NMI 引脚将强制从 ROM 引导。 //用伪值写入 FCCOB 寄存器 8-B。 w4 0x4002300c, 0x00000000 //写入 FSTAT 寄存器以清除可能存在的任何错误。 w1 0x40023000, 0x70 //启动 flash 命令。 w1 0x40023000, 0x80 //等待 flash 命令完成。 Sleep1 //读回内存以验证重置后应该显示的 FOPT 设置。 mem32 40023000, 4 选项#4: 用户软件中的子例程 有时,系统的要求将阻止实施上述任何方法来对 IFR 值进行编程。在这种情况下,您可能需 要实现自己的子例程来对 IFR 进行编程。这样做的过程与调试器脚本方法基本相同,只是用 代码而不是外部脚本编写。要记住的一个关键是您可能需要擦除整个闪存。因此,此子例程 应放在 RAM 内存中。由于正在执行闪存操作,因此将其置于 RAM 中将防止发生某些闪存 错误。 结论 总之, IFR 寄存器是非易失性信息寄存器,用于控制 K32L3A MCU 的某些行为。 IFR 分为可 擦除 IFR 空间和不可擦除 IFR 空间,它们都不是主闪存阵列的一部分。对这些值进行编程需 要使用特殊的闪存命令,并且要求自上次批量擦除以来尚未写入这些值。通常,有四种不同 的编程 FOPT 寄存器设置的方法。四种方法是: 1.Kinetis Flash 工具 2.BLHost 命令行界面 3.调试器脚本 4.用户软件子程序 每种方法都有其优点,因此,您应该选择一种满足您需求并且最方便的方法。但是,无论选 择哪种方法,在写入可擦除 IFR 字段之前都不能对 IFR 值进行编程。在尝试对任何 IFR 字段 进行编辑之前,最好执行批量擦除(可以使用本文档中介绍的任何方法进行擦除)。
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 Reader Library并将其集成到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创建自己的软件栈和应用程序: - PN512; - CLRC633 家族; - PN7462 家族; - PN5180; 此API促进了NFC应用程序中所需的最常见操作,例如: -读取数据或将数据写入非接触式卡或标签; -与其他支持NFC的设备交换数据; - 允许NFC Reader IC实现卡模拟 NFC阅读器库的设计方式使其可以轻松移植到具有多层体系结构的许多不同微控制器中: (图片) 作为主模块,我们有: 应用层(AL)-实现命令集以与MIFARE卡和NFC标签进行交互。 -NFC活动-实施可配置的发现循环,以检测非接触式卡,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调制。 蓝牙LE无线电在任何主/从组合中最多支持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天线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.3 搭建开发环境 安装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的已安装SDK选项卡中; (图片) -将Wireless_Uart示例导入到当前工作空间: (图片) 4.3准备FRDM-KW3x板的适配文件 本章介绍FRDM-KW36所需的驱动程序抽象层(DAL)更改: -解压缩NFC Reader Library并导航到boards文件夹: (图片) -通过为GPIO和处理程序设置正确的配置,为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项目位置的“源”文件夹中,创建一个新的“ nfc”子文件夹,以集成BasicDiscovery循环文件: (图片) -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章创建硬件连接; -在FRDM-KW36板的相应COM端口上打开一个串行端子。 使用的BaudRate是115200 -在FRDM-KW36上按SW2键开始advertising广播 -打开移动应用程序- IOT toolbox - Wireless UART 。 FDRM-KW36板将列为NXP_WU: (图片 ) -创建蓝牙LE连接。串行日志将包含蓝牙LE操作的日志: (图片) -使用靠近NCF3320 Antenna v1.0板的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
1. 引言 众所周知,我们一般使用调试器下载程序或调试设备。 FRDMK64在板上具有OpenSDA调试接口,因此不需要额外的调试器。但是如果我们要设计一个没有调试器但可以下载程序的电路板,则可以使用引导加载程序(Bootloader)。引导加载程序是一个小程序,目的是通过UART,I2C,SPI等接口更新MCU的应用程序。 本文将描述一个基于FRDMK64F的简单SD卡引导程序,使用SD卡更新MCU的应用程序。用户可以将二进制文件放入卡中。卡插入目标板后,板子将自动更新应用程序。本设计提供了对应的引导加载程序和应用程序代码,以便您可以在自己的板上进行测试。 2. Bootloader的实现 SD卡的示意图如下所示。该板使用SDHC模块与SD卡通信。 图1. SD卡示意图 我们使用FRDM-K64F的2.6.0版本的SDK。您可以在我们的网站上下载该SDK。 链接是“mcuxpresso.nxp.com”。 引导加载程序使用SDHC和fafts文件系统,因此我们应该添加文件来支持它。 图2.支持文件 在主代码中,程序将等待直到插入卡。然后它将在SD卡中找到名为“ a000.bin”的文件以更新应用程序。如果文件不存在,则开发板将直接执行该应用程序。如果没有应用程序,程序将结束。 以下代码显示了程序如何等待插入sd卡,此外它还将检查该地址是否包含应用程序的地址。 图3.代码-等待插入卡 以下代码显示了程序如何打开二进制文件,如果sd卡没有该文件,则程序将跳转到该应用程序开始执行。 图4.打开二进制文件 如果程序正常打开文件,则更新将开始,它将从0xa000擦除200k的空间,您可以根据自己的实际代码工程大小进行调整。 现在我将详细说明更新的方法。我们的数据被写入称为“ rBUff”的缓冲区,缓冲区大小为4K,在向其中写入数据之前,需要先将其擦除。 请注意,在擦除和编程闪存之前应该先禁用所有中断,当操作完成后再重新使能中断。 文件大小将决定将数据写入闪存的方式。 1.如果大小小于4k,我们只需读取文件数据进行缓冲,然后判断文件大小是否与8个字节对齐。如果不是,我们增加“readSize”的大小以读取称为“rBuffer”的数据缓冲区中的更多数据,这些多读出来的数据内容为0。 2.如果大小> 4K,我们使用“ remainSize”来记录剩余的数据量。每次读取4k直到其大小小于4k,然后重复步骤1。一次完成操作后,我们应清除缓冲区并增加扇区编号以准备下一次发送。   图5:写Flash操作代码 清除空间的方法如图所示。它将初始化闪存并从给定地址擦除给定大小。 “ SectorNum”用于显示要擦除的扇区。 图6.擦除操作代码 下图显示了如何将数据写入闪存。 图7.程序操作代码 在转到应用程序之前,我们应该修改在引导加载程序中所做的配置。 关闭Systick时钟并清掉其计数; 将VTOR中断向量寄存器恢复为之前的默认值; 我们的引导程序以PEE模式运行。因此,我们应该将其更改为FEI模式; 禁用所有引脚。 运行这些代码时,应禁用全局中断,并且不要忘记重新使能全局中断。 图8. 反初始化代码 然后我们可以转到应用程序。 图9.转到应用程序 3. 内存重定位 FRDMK64具有1M闪存,从0x00000000到0x00100000。如图10所示,我们使用0xa000作为应用程序的起始地址。 图10:内存映射 现在,我将向您展示如何在不同的IDE中为用户应用程序修改链接文件。 在IAR中: 图11:IAR的ICF 在MDK中: 图12.MDK的SCF 在MCUXpresso中: 图13. MCUXpresso的闪存配置 4. 运行演示 1)首先下载引导程序; 2)准备一个用户应用程序。 我们以“led blinky”为例; 3)修改链接文件; 4)用您的IDE生成二进制文件,请将其命名为“a000.bin”; 5)将其放入SD卡中,如图5所示。 图14:SD卡的内容 6)插入卡,并打开电源。请稍等片刻,该应用程序将自动执行。 5. 参考资料 1) Kinetis MCU的bootloader解决方案 2) KEA128_can_bootloader
View full article
引言 FRDM-KW36包含带有32 kHz晶体振荡器的RTC模块。此模块为以极低功耗模式运行的MCU生成32 kHz时钟源。该振荡器包括一组用作CLOAD的可编程电容器。改变这些电容器的值可以改变振荡器提供的频率。 此可配置电容的范围为0 pF(禁用电容器组)至30 pF,步长为2 pF。 这些值是通过组合启用的电容器获得的。可用值为2 pF,4 pF,8 pF和16 pF。可以完成这四个数值的任意组合。如果可以使用外部电容器,建议禁用这些内部电容器(清除RTC控制寄存器SFR中的SC2P,SC4P,SCS8和SC16位)。 要调整振荡器提供的频率,必须首先能够测量该频率。使用频率计数器将是非常好的,因为它提供了比示波器更精确的测量。您还需要输出振荡器频率。要输出振荡器频率,以任意一个蓝牙演示应用程序为例,您应该执行以下操作: 调整频率示例 本示例将利用Connectivity Software Stack中的心率传感器演示(freertos版本),并假定开发人员具有从SDK到IDE导入或打开项目的知识。 1.从SDK中打开或克隆“心率传感器”项目。 2.在工作区的board文件夹中找到board.c和board.h文件。 3.如下图所示在board.h文件中声明一个void函数。该函数将RTC管脚复用设置为输出到PTB3并能够测量频率。 4. 如下所示在board.c文件中开发BOARD_EnableRtcClkOut函数。 5. 代码如下: 6. 在BOARD_BootClockRUN(board.c文件)之后立即在hardware_init函数中调用BOARD_EnableRtcClkOut函数。 7. 在工作区的board文件夹中找到clock_config.c文件。 8. 在文件顶部添加以下定义。 9. 在BOARD_BootClockRUN函数内部(也在clock_config.c文件中)搜索对函数的CLOCK_CONFIG_EnableRtcOsc调用,然后通过上述任意定义来编辑变量。 10. 最后,在项目源文件夹中的“ preinclude.h”文件中禁用低功耗选项和LED支持: 此时,您可以在PTB3中进行测量,并使用频率计数器进行频率调整。每次对电路板进行编程时,都需要执行POR以获得正确的测量。下表是从FRDM-KW36板版本B获得的,可用作调整频率的参考。 请注意,电容不仅由启用的内部电容组成,还包括封装,内部走线,芯片焊盘和PCB走线中的寄生电容。因此,尽管下面给出的参考测量值应接近实际值,但您还应该在电路板上进行测量,以确保频率是专门针对您的电路板和布局进行调整的。 Labels:KW   KW35 | 36 kinetis kw36a
View full article
LPC55S6x系列最初的硅芯片版本为0A并且该硅芯片已在Revision A1 LPCXpresso55S69评估板上使用。版本1B的硅片已用于版本A2的评估板上。两种版本的芯片都支持新的更加稳定的调试会话请求方式,而1B芯片就需要使用该方式。如果未使用正确版本的IDE和/或调试探驱动程序,调试操作将受到影响或不能工作。 当使用revsion A2 芯片的板子时,需要当前软件版本为: MCUXpresso IDE版本11.0.1或更高版本(建议使用11.1或更高版本) [注意:也可以使用IDE 11.0.1,但在使用A1版本时,此版本需要补丁程序。请参阅https://community.nxp.com/migration-blogpost/11165] 请注意,如果从使用A1版本开发切换到A2版本时(或切换到使用1B版本芯片的任何目标系统),则需要从一个新的工作区(workspace)开始。 IAR Embedded Workbench版本8.40.2或更高版本 Keil uVISION LPC55S6x设备软件包(DFP)12.0.1或更高版本 SEGGER J-Link 应使用J-link 6.54c或更高版本(从SEGGER网站下载),建议使用V6.64或更高版本。将J-link与非SEGGER IDE(MCUXpresso,IAR,Keil)一起使用时,请确保您的IDE配置指向最新的J-Link驱动程序。 如果使用MCUXpresso IDE 11.0.1,则需要将其下安装的J-link驱动程序更新为最新版本,以支持A1版本。更多信息,请参见在Windows上更新SEGGER J-LINK安装包的方法。   有关芯片修订和工具的更多信息,请参考了解LPC55S6x版本和工具。 另请注意,有关电路板版本,芯片的版本和相应工具有中文版本描述,如下所示: http://www.nxpic.org/module/forum/thread-618614-1-1.html http://www.nxpic.org/module/forum/thread-619338-1-1.html
View full article
这篇文章通过覆盖与GFSK (通用频移键控)通信并行的 低功耗蓝牙 多节点连接,提供了混 合应用程序( W ireless UART + GFSK Advertising )的示例。这是 SDK 的另一个示例,其中我 们定义了 混合应用程序,用于与 GFSK 通信并行进行蓝牙 LE 广告和扫描。 Products Product Category NXP Part Number URL MCU KW36/35/34 https://www.nxp.com/products/wireless/bluetooth-low-energy/kw36-35-34-arm-cortex-m0-pluskinetis-kw36-35-34-bluetooth-low-energy-32-bit-mcus-nxp:KW36-35 MCU KW39/38/37 https://www.nxp.com/products/wireless/bluetooth-low-energy/kw39-38-37-32-bit-bluetooth-5-0-long-range-mcus-with-can-fd-and-lin-bus-options-arm-cortex-m0-plus-core:KW39-38-37   Tools NXP Development Board URL FRDM-KW36 Freedom Development Kit https://www.nxp.com/design/development-boards/freedom-development-boards/mcu-boards/frdm-kw36-freedom-development-kit-for-kinetis-kw36-35-34-mcus:FRDM-KW36 FRDM-KW38 Freedom Development Kit https://www.nxp.com/design/designs/freedom-development-kit-for-kw39-38-37-mcus:FRDM-KW38   SDK SDK Version URL MCUXpresso SDK Builder https://mcuxpresso.nxp.com/en/welcome
View full article
Linux kernel is not real time OS, while some applications is time sensitive tasks running in Linux environment, this request to extend the real time feature in common Linux kernel, and RT_PREEMPT is one of the methods to enable Linux kernel with real time processing requirement. But RT_PREEMPT is not accepted by kernel, so it needs extra effort to porting this patch-set to i.MX8M family products. This patch-set is based on L4.14.78 for i.MX8M products, customer need to apply patches based on this release.
View full article