NXP Designs Knowledge Base

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

NXP Designs Knowledge Base

Discussions

Sort by:
本文探讨了如何解决i.MX8MP EMC测试遇到的问题,主要针对辐射超标问题。除了硬件方案,着重探讨了LVDS展频等软件方案。
View full article
Memtool is a useful debug tool which can read/write some i.MX register. It is default supported in Linux while not supported in Android. This article describse how to integrate memtool into i.MX8MM Android 12 platform, which is also similar in other i.MX new android platform.  
View full article
This document introduce how to do LPDDR4 DQ Swapping in S32G platform.
View full article
The label printer requires some means of regulating the flow of data to and from the system to which they are attached. The suspension and resumption of data flow is necessary in a variety of circumstances. The attached PPT introduces a simple and effective flow control method running upon lwIP stack.  
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
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
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
第一章 简介 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
                                     编写 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
引言 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
      虽然目前NXP的很多MCU都带了丰富的UART资源,但是在某些特地的情况下或个别芯片,UART数量还是有一定的局限性。现在NXP很多的MCU也携带有FlexIO模块,那么我们就可以利用FlexIO来扩展更多的UART,SDK中有相应的代码,这些代码是支持全双工的,需要使用至少两个timer和两个shifter设计一个UART, 在实际使用中很多时候是使用半双工通信的,本文是基于SDK FlexIO的例程来设计基于一个timer和一个shifter的半双工UART,最大限度扩展UART数量,设计4个半双工的UART,本文设计验证平台为FRDEM-KE15Z和SDK_2.6.0_MKE15Z256xxx7。     希望能给需要的使用者提供种扩展尽可能多UART的方法。 Best Regards, Fred Fu
View full article
Hi: This thread mainly introduces how to sample multi channels ADC with DMA. The slides is in Chinese. For different MCU family, Kinetis & LPC has different ADC & DMA system. There takes KE15 & LPC51U68 for example, introduce how to enable various ADC & DMA trigger solution. 1.KE15:Three sample projects include: 1.1 LPIT HW trigger ADC & DMA transfer, enable interrupt for get ADC value; 1.2 LPIT HW trigger ADC & DMA transfer, DMA will automatically trigger next transfer; 1.3 Software trigger multi-ADC & DMA transfer;  2.LPC51U68: Two sample projects include: 2.1 Software trigger multi-ADC & DMA transfer;  2.2 SCT HW trigger ADC & DMA transfer, DMA will automatically trigger next transfer; Products Product Category NXP Part Number URL MCU KE15 Arm Cortex-M0+|Kinetis KE1xZ 32-bit 5V MCUs with Touch Interface | NXP  MCU LPC51U68 LPC51U68 | NXP  MCUXpresso SDK Software NXP standard SDK Welcome | MCUXpresso SDK Builder    Tools NXP Development Board URL FRDM-KE15Z Freedom Board FRDM-KE15Z Platform|Freedom Development Board | NXP  LPCXpresso51U68 board LPCXpresso51U68 board for LPC51U68 MCU | NXP 
View full article
电容式感应触摸按键可以穿透绝缘材料外壳,准确无误地侦测到手指的有效触摸。并保证了产品的灵敏度、稳定性、可靠性等不会因环境条件的改变或长期使用而发生变化,并具有防水和强抗干扰能力,超强防护,超强适应温度范围 电容式触摸按键控制芯片通常广泛适用于遥控器、灯具调光、各类开关以及车载、小家电和家用电器控制界面等应用中。芯片内部集成高分辨率触摸检测模块和专用信号处理电路,以保证芯片对环境变化具有灵敏的自动识别和跟踪功能。芯片还必须满足用户在复杂应用中对稳定性、灵敏度、功耗、响应速度、防水、带水操作、抗震动、抗电磁干扰等方面的高体验要求。本文将介绍一套基于NXP KE16Z64的轻量级TSI算法。 基于KE1XZ64平台的TSI轻量级算法: KE1XZ64继承了KE family的高可靠抗干扰性,并提供了更小的引脚封装尺寸,让客户硬件设计更加便利。其内部集成了改进版的TSI模块,性能更加稳定可靠,该模块支持自耦和互耦两种方式:自耦模式下最多可支持25个按键,互耦模式最多可支持36个按键,因此能够覆盖当前市场上绝大部分的触摸应用场景。 NXP官方的NT LIB软件虽然功能完善,但由于代码量大且程序架构复杂等原因,部分客户不愿意选用。所以该市场对于轻量级应用代码还是有需求的。 此参考设计展示了TSI轻量级算法的具体实现,按照配置模式分为两个对应的参考例程:自耦模式为12个按键的功能实现,硬件基于KE16 PCB,主要适用于按键所需数目少的应用场景;互耦模式为36个按键的功能实现,硬件基于RT-TSI-KE16,主要适用于按键所需数目多的应用场景。该算法精简可靠,十分易于移植,使客户可以很快地上手。并且可以结合使用NXP的GUI监测软件FreeMaster,方便中后期的灵敏度调试及问题追踪。 此套算法在实验室通过了IEC61000-4-6注入电流可靠性测试。 参考代码及说明文档请详见附件压缩包。
View full article
使用NXP集成丰富的模拟外设和数字接口,针对成本敏感,低功耗电池供电应用场景应用的K32 L2B系列,可以实现额温测量的应用。其具有如下特性: 1. 集成多通道16-bit ADC,可用于采集红外温度传感器的信号,以及采集电池电压,目前K32L2B的16位单端模式精度可以达到13.9位,差分模式可以达到14.5位,使用芯片内置的ADC就可以满足要求,实现0.1度温度测量精度要求。 2. 12-bitDAC为外置运放提供偏置电压;可以节省一颗外部的3V转1.2V电平转换芯片或者外围分离器件搭建的降压转换电路(由于运放的偏置电路消耗电流只需要uA级,目前片内的一路DAC可以满足此要求)。另外Vref 该引脚可以内部输出1.2V参考电压,带载能力也可达1mA。 3. sLCD:低功耗段码显示支持24x8或者28x4段,sLCD引脚既可以做Segment,也可以做COM口的功能,即使未配置为sLCD的引脚也可以做其他IO功能控制口。 4. 3路I2C(其中的2路I2C中一路接红外数字传感器或者接近传感器,另外一路接高精度数字温度传感器,可外接NXP PCT2075温度传感器芯片,还有预留的1路I2C用FlexIO实现标准的I2C或者UART或者SPI通信) 。 5. 2路PWM用于驱动LED指示LED或者蜂鸣器报警信号,以及实现语音播放功能。 6. USB FS 2.0从设备接口,不要额外的晶体。 7. 支持最大256K Flash,48 MHz Arm® Cortex®-M0+内核。K32L2B11VLH0A 64K Flash,32K RAM的配置即可满足额温枪的需要。 8. 低功耗特征:运行模式达 54 uA/MHz,在深度睡眠模式下RAM和RTC处于保持状态的功耗为1.96uA;满足采用采用电池供电的手持式红外测温枪,对系统功耗苛刻的要求。 9. 具有小于10us的快速唤醒模式,能及时唤醒主控进入运行模式。 10. 64 LQFP封装, 至少提供5个GPIOs满足用户人机界面设置按键需求。如果是做额温测试模块外接高端i.MX系列带大屏幕彩色显示屏的应用,可以选择32脚封装,例如K32L2B11VFM0A。 11. 额温枪对Flash容量大小的需求,主要是NTC(RT电阻温度换算表)和红外测温(VT电压温度换算表)标定参数存储,语音播报数据的存储,64K Flash是可以满足要求的。 12. K32 L2B系列具有广泛的产品路线图,支持引脚功能完全兼容,扩展的Flash,可以添加诸如蓝牙以及二维码扫码等新型扩展功能需求。 13. 内置ROM bootloader方便用户程序在线升级和温度参数标定,内置高精度的内部时钟,此功能用于工厂固件生产配置,使用NXP提供的Kinetis Flash Tool下载工具软件 GUI,可以直接方便的通过USB刷新固件和校准配置参数,无需额外的仿真下载调试工具。 14. MCUXpresso ConfigTool:易用的软件配置工具以及完整的外设驱动SDK包方便用户快速原型开发。 目前64脚的IO资源已经用足,所以做额温枪,使用集成段码显示的单芯片,64脚封装应该是主流。当然也有48或者32脚的产品,一般都是需要外置sLCD显示驱动芯片。 基于NXP K32L2B MCU的额温枪参考方案(硬件篇): https://mp.weixin.qq.com/s/k96HO32ek2i_FjADtdsK9g 基于NXP K32L2B MCU的额温枪参考方案(软件篇): https://mp.weixin.qq.com/s/QVCeW1RS57tAYaDi8mQ7Lw
View full article