Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
[LPC553x]:如何使用双映像 1. 背景 在升级嵌入式设备时,由于停电、强制中断等外部因素,新固件无法完全写入 Flash,从而导致系统启动失败。或者,如果固件映像在设备运行过程中损坏,系统会崩溃并无法继续工作。为解决这些问题,可以采用双映像机制,确保始终至少有一个固件映像可正常启动运行。一旦出现异常,Bootloader 会自动检测并切换到备用映像。 2. 原则 LPC5536 ROM 支持内部闪存的双镜像启动功能,这意味着在闪存区域中可以放置两个启动镜像;ROM 根据镜像版本决定启动哪个镜像,优先启动版本较新的镜像,如果失败,则启动版本较旧的镜像。 设备上电启动时,ROM 会首先检测 CMPA 中固件映像的重定位地址和大小,然后读取两个映像的版本号。因此,在使用双映像功能时,需重点配置固件映像的重定位地址和版本号。 双镜像的内部闪存启动流程如下: 2.1 重定位映像文件 LPC5536 内部闪存支持重新映射。当设置 remap 偏移量时,内部 FLASH 存储器 AHB 访问将更改访问地址,添加偏移量,如下图所示。例如,当偏移量设置为 128K(0x20000)时,对 0x0 的访问将被重映射到 0x20000。通过此 IP 功能,ROM 可实现双映像启动,支持两个映像。映像的偏移量和重映射大小由用户在CMPA区域中设置。 这是存储在内部 FLASH 中的两个图像文件的示例。 第二个图像的偏移量和重映射大小由用户在CMPA区域中设置,以便ROM知道第二个图像的位置。 2.2 配置图像版本 图像版本是图像头偏移量 0x24;第 10 位显示图像是否包含图像版本;如果第 10 位为 0,则表示图像没有图像版本;ROM 将图像版本视为 0。 3、实施 3.1 配置CMPA 1) 在 CMPA 中配置数据值 使用 blhost 将修改后的 bin 文件写入 CMPA,以配置 image1 的偏移量和重映射大小。程序如下: 首先,打开一个全部填充为“0”的 cmpa.bin 文件,并将 0x3E23C 处的数据更改为 0x20000,如下图所示: 然后,修改重映射大小。地址 0x3E238 处的数据被更改为 0x1d800,如下图所示: 修改并保存,重命名为 cmpa_new.bin,保存为 \blhost_2.6.7\blhost_2.6.7\bin\win。 2)下载 cmpa_new.bin Blhost 2.6.7 是一个命令行工具,您可以使用它来编程 cmpa_new.bin。 检查 blhost 与开发板之间的通信是否成功。 首先,请从设备管理器中检查开发板与计算机之间连接的端口号。 其次,将 lpc55s36-evk 上的 J43 跳线的 3 和 4 短接,以启用 ISP 启动。 第三,按下重置按钮以重置主板,输入连接测试命令“blhost-p com12 -- get-property 1”。 检查通信是否正常。如果连接成功,消息将显示如下: 将修改后的 bin 文件写入 CMPA。 使用命令“blhost-pcom12 -- write-memory 0x3e200 cmpa_new.bin”写入CMPA,如下所示: 写入后读取CMPA数据。 为了确认数据的准确性,请运行命令“blhost-pcom12 -- read-memory 0x3e200 512”以查看配置的CMPA数据,如下图所示: 3.2 设置双映像版本 为了观察实验效果,Image0 功能是让 LPC5536-evk 开发板上的红色指示灯闪烁,Image1 功能是让蓝色指示灯闪烁。 在 Image0 项目中,将版本编号设置为1,在 Image1 项目中将版本编号设置为2: 打开红灯闪烁的项目,将头文件偏移地址 0x24 处的值修改为 0x10400。 打开蓝灯闪烁的工程,将头文件偏移地址 0x24 处的值修改为 0x20400。 3.3 闪存重映射 对于用户而言,LPC5536JBD100 总共提供了 246K 的内部闪存,因此 Image0 被分配到地址范围 0x00000-0x1FFFF,而 Image1 被分配到地址范围 0x20000-0x3D7FF。如果使用 MCUXpresso ID,设置如下: 右键点击Selected Project->选择Properties->MCU settings,设置Location(起始地址)和Size,完成后点击Apply按钮。 红灯闪烁项目的修改如下: 蓝色灯闪烁项目修改如下: 重新编译工程。  3.4 功能测试 测试程序包含两个 LED 闪烁示例:红灯闪烁和蓝灯闪烁。红色指示灯闪烁表示 image0,版本1,蓝色指示灯闪烁表示 image1,版本2。因此,如果测试结果为蓝色指示灯闪烁,则双映像功能工作正常。 下载图片: 在MCUXpresso IDE中使用GUI Flash工具,将两个映像文件下载到开发板: 打开,然后弹出如下视图。在“File to program”栏中选择下载文件,点击 Run 按钮,即可将映像下载到 Flash 中。 下载完成后,单击 OK(确定)。 以相同方式下载另一份映像文件。请注意,在编程第二张映像时无法勾选“mass erase”。如果您使用其他工具进行编程,也应禁用与“批量擦除”相同的功能,以避免擦除第一个映像文件。 测试结果: 下载程序并重置后,蓝灯开始闪烁。 进一步测试: 将红灯闪烁项目的版本号更改为 3,即将 0x10400 修改为 0x30400。然后再次下载映像文件。红灯在闪烁。 4、Summary 双映像功能可提高嵌入式设备在启动和固件更新过程中的安全性。在使用 CMPA 区域时,您需要特别注意设置映像偏移、重新映射尺寸和配置映像版本的方式,同时也要注意两个项目中的闪存配置。 附件是测试应用程序项目。 LPC55xx
View full article
i.MX8MM RMII TXC OUTPUT 一些行业客户在使用 i.MX8MM 时,会通过 RMII 连接 100MHz 以太网 PHY,并希望利用 i.MX8MM 输出 50MHz 参考时钟给外部 PHY,以节省一颗晶体。本文档及补丁将说明如何支持该功能。 SW:Linux BSP 5.10.17。 硬件:i.MX8MM LPDDR/DDR EVK 板。 中文版本为一个完整的如何支持一个100Mhz以太网PHY i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Linux
View full article
在将自定义模型导入MCX eIQ Neutron NPU SDK示例时的提示 在 MCUXpresso SDK 示例中部署自定义模型以替换默认模型时,需要进行多项修改,如 eIQ Neutron NPU 实践实验室中所述。以下是使用 SDK 示例搭配新自定义模型时可能遇到的常见问题和错误消息及其解决方法。如果遇到此处未涵盖的问题,请新建讨论帖进行交流。 “未找到内置操作码‘ ’的操作” 需要在 MODEL_GetOpsResolver 函数中添加该算子,该函数位于 source\model\model_name_ops_npu.cpp 文件中。 通过 Neutron Converter Tool 的 dump-header-file 选项可自动生成模型使用的完整算子列表,可直接复制粘贴到该文件中。 同时需确保静态数组 s_microOpResolver 的大小与算子数量匹配。 “解析器尺寸太小” 需要增大 MODEL_GetOpsResolver 函数中的静态数组 s_microOpResolver 的大小(位于 source\model\model_name_ops_npu.cpp 文件),以匹配算子数量。 “无法调整缓冲区大小” 模型的暂存内存缓冲区过小,需要增大。 内存缓冲区大小通过模型数据头文件中的 kTensorArenaSize 变量设置。 “内部 Neutron NPU 驱动程序错误 281b 在模型准备过程中发生!”或“Neutron NPU 微代码与驱动程序版本不兼容!” 确保用于转换模型的eIQ Neutron Converter Tool的版本是正确的,并且与SDK项目所使用的NPU库兼容。 eIQ Toolkit v1.10.0 应与 MCXUpresso SDK for MCX N 2.14.0 一起使用。Neutron Converter Tool 版本是 1.2.0+0X84d37e1f FRDM-MCXN947 板上的相机颜色不正确 修改电路板背面的焊锡跳线SJ16、SJ26和SJ27,将它们向左移动(虚线一侧),以正确连接摄像头信号。            此修改将禁用电路板上的以太网功能,因为EZH D0与ENET_TXCLK信号冲突。如果您的项目需要同时支持摄像头和以太网功能,则只需将SJ16和SJ26向左移动(虚线一侧),然后从P1_4(J9引脚)连接一根导线。 😎 在 R58 的左侧。然后在项目的 pin_mux.c文件中,将 EZH_Camera_D0 的 PORT1_PCR4 替换为 PORT3_PCR0。                     MCXN NPU|ML
View full article
MCX W系列培训 MCX W 系列是安全无线微控制器(MCU),专为下一代智能安全连接设备提供更紧凑、可扩展和创新的设计。MCX W 系列基于Arm® Cortex®-M33,提供了统一引脚兼容的多协议无线微控制器,支持 Matter™、Thread®、蓝牙®低功耗和Zigbee®,助力开发互操作且创新的智能家居设备、楼宇自动化传感器和控制装置以及智能能源产品。 MCX W71 实操培训 FRDM-MCXW71:通过 ISP 更新 NBU 和用户固件       本实践指南介绍如何使用 ISP 更新 NBU 及用户固件代码。 FRDM-MCXW71:识别 NBU 不兼容版本 本实践旨在学习如何识别 NBU 固件与 SDK 版本不匹配的情况。 FRDM-MCXW71:运行 Hello World SDK 演示本实验首先将 MCX W71 Freedom 开发板的 MCUXpresso SDK 导入 MCUXpresso IDE,随后构建、烧录并调试 Hello World 项目,确保环境配置可用于后续实验。 FRDM-MCXW71:运行 LED 闪烁 SDK 演示在本实验通过 SDK 项目在 FRDM-MCXW71 开发板上实现简单的 LED 闪烁功能。熟悉示例项目后,将集成简单修改。 FRDM-MCXW71:无线 UART 物联网工具箱演示本实验目标为演示实现无线 UART 配置文件的 SDK 示例,并通过针对性修改展示用户应在代码何处嵌入应用软件逻辑。 FRDM-MCXW71:低功耗参考设计 SDK 演示 本实践指南描述如何在 FRDM-MCXW71 上运行低功耗参考设计演示。SDK 的 reference_design 文件夹提供两个低功耗参考设计应用,旨在: •为蓝牙低功耗应用提供低功耗/时序优化的参考设计,可用于新应用的低功耗移植。• 提供测量各功耗模式下功耗、唤醒时间及活跃时间的方法。   MCX W72 实操培训 即将推出! 无线连接培训课程 蓝牙低功耗 Thread 网络入门 FRDM 培训 动手实践培训 MCU 无线连接
View full article
恩智浦电池管理系统基于模型的设计工具箱 - 版本 1.2.0 产品发布公告 汽车嵌入式系统 恩智浦基于模型的设计工具箱 适用于 BMS – 版本 1.2.0 恩智浦半导体汽车嵌入式系统基于模型设计工具团队欣然发布电池管理系统基于模型的设计工具箱 1.2.0 RFP 版本。此版本是 NXP S32K3xx 1.4.0 基于模型设计工具箱的附加组件,支持从 MATLAB/Simulink 自动生成电池单元控制器和应用程序原型。本产品增加了对 MC33775A、MC33774A、MC33772C、MC33664 和 MC33665A 及其部分外围设备的支持,基于 BMS SDK 组件(Bcc_772c、Bcc_772c_SL、Bcc_775a、Bcc_774a、Bms_TPL3_SL_E2E、Bms_common、Phy_664、Phy_665a)。在此版本中,我们增强了与 Model-Based Design Toolbox for S32K3xx 1.4.0 版的集成,增加了对 BMS SDK 1.0.3 和 BMS SDK 1.0.3 SL DEMO 的支持,以及对最新版本的 MATLAB 的支持。本产品配备电池单元控制器即用型示例,适用于 NXP HVBMS 参考设计包(使用 ETPL,型号:RD-HVBMSCTBUN)、800 V 电池管理系统(BMS)参考设计(使用 ETPL,型号:RD-HVBMSCT800BUN)以及 14 V 电池管理系统(BMS)参考设计(铅酸电池替代方案,RD33772C14VEVM)。 目标受众: 该产品是汽车 SW(基于模型的设计工具箱)的一部分。 FlexNet 位置: https://nxp.flexnetoperations.com/control/frse/download?element=6477171 技术支持: 恩智浦电池管理系统(BMS)基于模型的设计工具箱相关问题将通过恩智浦基于模型设计工具社区空间进行跟踪。 发布内容: 从MATLAB®自动生成C代码用于NXP电芯控制器衍生产品: MC33775A MC33774A MC33772C MC33665A MC33664 支持以下外围设备(BMS SDK组件): Bcc_775a Bcc_774a Bcc_772c Bms_Common Bms_TD_handler Bcc_772c_SL Bcc_TPL3_SL_E2E 支持MC33775A、MC33774A和MC33772C电池单元控制器及MC33664PHY和MC33665PHY 工具箱支持MC33775A、MC33774A、MC33772C、MC33664和MC33665A。MC33775A、MC3774A和MC33772C是专为汽车应用设计的锂离子电池单元控制器集成电路,可执行差分电池电压和电池温度的ADC转换,而MC3366和MC33665A则是一种收发器物理层变压器驱动器,旨在通过高速隔离通信网络将微控制器与电池单元控制器接口连接。随MBDT基于模型的设计工具箱提供的即用型示例展示了如何通过MC33664/MC33665收发器在S32K344/S32K358与MC33775A、MC33774A和MC33772C之间进行通信。对于MC33775A和MC33774A,示例展示了如何配置电池单元控制器以执行主链和副链转换,并从MC33775A/MC33774A读取电池单元电压转换结果;而对于MC33772C,示例展示了如何配置电池单元控制器以读取电流。所有转换值均通过FreeMaster应用程序显示给用户。 支持的BMS SDK版本: SW32K3_BMS_GEN1_SDK_4.4_R21-11_1.0.3 SW32K3_BMS_GEN1_SL_SDK_4.4_R21-11_1.0.3_DEMO MATLAB版本支持: R2021a R2021b R2022a R2022b R2023a R2023b R2024a R2024b 超过15个示例展示了支持的功能: MC33775A 配置和数据采集示例 MC33774A 配置和数据采集示例 MC33772C 配置和数据采集示例 RD-HVBMSCTBUN 配置和数据采集示例,包含 BMU 板上的附加外围设备(通信、传感器、辅助电路)以及 FS26 的自定义代码初始化。 RD-HVBMSCT800BUN 配置和数据采集示例,以及 BMU 板上的附加外围设备(通信、传感器、辅助电路) RD33772C14VEVM 配置与数据采集示例,涵盖 FS26 的通信和自定义代码初始化 有关更多详细信息、特性以及如何使用新功能,请参阅随附的发行说明和快速入门指南文档。 MATLAB ®积分: 恩智浦基于模型的设计工具箱扩展了 MATLAB® 和 Simulink® 的功能,使用户能够开箱即用地评估和使用恩智浦电池单元控制器(BCC),并结合 S32K3xx MCU 及评估板解决方案。恩智浦 BMS 基于模型的设计工具箱版本 1.2.0 与 MATLAB® 环境完全集成。 目标受众: 此版本(1.2.0 RFP)旨在用于技术演示、评估目的,以及使用NXP电池单元控制器和S32K3xx微控制器及评估板进行电池管理系统的原型设计。 有用的资源: 示例、培训和支持: https://community.nxp.com/community/mbdt DEMO 电气化解决方案(高压电池管理系统和电机控制)的模型化设计: 基于模型设计的电气化解决方案展示了如何将NXP工具生态系统与MathWorks工具箱和解决方案生态系统结合使用,以开发复杂应用程序,例如电动汽车的动力总成,如下方演示图所示。对于BMS,可以在Simulink中创建虚拟电池组,并在部署到硬件之前,将各种仿真测试场景应用于BMS算法。 在恩智浦 HVBMS 参考设计和 GoldBox上运行的电池管理系统,结合 MathWorks Simulink 示例 “设计与测试锂离子电池管理算法” 以及恩智浦 BMS 模块库,可自动生成、构建并部署独立的 BMS 应用程序至恩智浦目标硬件。以下是本次演示的主要亮点: 在 MATLAB® 和 Simulink® 中建模、开发和验证电池管理系统及电机控制应用。 在 NXP 微控制器和处理器上生成代码、构建和部署硬件感知应用程序 在运行时使用 FreeMASTER 和 Vehicle Network Toolbox 监控和调优应用程序 使用 NXP GoldBox 和 AWS 创建云数字孪生,并在 MATLAB Cloud Center 进行数据处理  
View full article
CCM_CLKO1 复位时提供时钟信号 Hi, 我们在应用程序中使用CCM_CLKO1作为 GPIO,但我们在重置时看到时钟信号输出,这对于我们的设置来说并不理想。此行为显示在附加的示波器屏幕截图中。 细节: 环境:测量是在插入和不插入 SD 卡的情况下在 SD 卡启动模式下进行的。 观察:尽管我们打算将CCM_CLKO1用作 GPIO,但CCM_CLKO1 (和CCM_CLKO2 )在复位时会提供时钟输出。 潜在原因:这似乎发生在启动过程的早期,并且不可能由我们的软件(U-Boot/Kernel)引起。我们怀疑它可能与启动流程有关,可能是 ROM 加载程序。 关注:这个时钟信号对于我们的应用程序来说有问题,我们想知道这种行为是否正常,或者是否有办法在复位时禁用时钟输出,以便我们可以使用CCM_CLKO1作为 GPIO 而不会受到干扰。 如有任何关于如何解决此问题的见解或建议,我们将不胜感激! 非常感谢! 时钟|计时器 回复:CCM_CLKO1 在复位时发出时钟信号 Hello, 这是预期的行为,因为重置状态将改变 IOMUX 寄存器以将引脚配置为 CCM_CLKOX 功能,并且会一直改变直到设备树加载。 正如您所提到的,U-boot/kernel 不会导致这种情况。 如果您在 SLP 之前更改 IOMUX 选项,则可以减少重置时时钟输出的时间。 顺祝商祺!
View full article
MCX eIQ Neutron NPU SDKの例にカスタム・モデルをインポートする際のヒント MCUXpresso SDKの例で既定のモデルを置き換えるためにカスタム・ビルド・モデルを導入する場合は、eIQ Neutron NPUハンズオン・ラボで説明されているように、変更をいくつか加える必要があります。 以下では、SDKの例に新しいカスタム・モデルを導入する際に発生する可能性のある一般的な問題とエラー・メッセージ、その解決方法について説明します。ここで取り上げられていない問題がある場合は、その問題を議論するための新しいスレッドを作成してください。 「‘ '向けの組み込みオペコードが見つかりませんでした」 該当演算子をMODEL_GetOpsResolver関数(場所:source\model\model_name_ops_npu.cpp)に追加する必要があります。 モデルが使用可能で、対象ファイルにコピー&貼り付け可能な演算子の一覧は、Neutron Converter Toolによってdump-header-fileオプション付きで自動生成されます。 演算子の数に合わせて、静的配列s_microOpResolverのサイズも必ず増やします。 「リゾルバのサイズが小さすぎます」 静的配列s_microOpResolverのサイズをMODEL_GetOpsResolver関数(場所:source\model\model_name_ops_npu.cpp)で、演算子の数に合わせて増やす必要があります。 「バッファのサイズ変更に失敗しました」 スクラッチメモリバッファがモデルに対して小さすぎるため、増やす必要があります。 メモリ・バッファのサイズは、モデル・データのヘッダ・ファイルにあるkTensorArenaSize変数で設定されます。 「モデルの準備中に内部Neutron NPUドライバのエラー281bが発生しました!」または「互換性のないNeutron NPUマイクロコードとドライバ・バージョンです!」 モデルの変換に使用する eIQ Neutron コンバーター ツールのバージョンが、SDK プロジェクトで使用する NPU ライブラリと互換性のある正しいものであることを確認してください。 eIQ Toolkit v1.10.0 は、MCX N 2.14.0 用の MCXUpresso SDK と併用して使用する必要があります。Neutron Converter Toolのバージョンは1.2.0+0X84d37e1fです FRDM-MCXN947ボード上のカメラの色が不適切です 基板の裏面にあるソルダージャンパーSJ16、SJ26、およびSJ27を左側(破線側)に移動して、カメラ信号を正しく接続してください。            この変更により、EZH D0とENET_TXCLKの信号が競合するようになるためボード上のイーサネット機能が無効になります。プロジェクトにカメラとイーサネットの両方の機能が必要な場合は、SJ16とSJ26を左側(破線側)に移動させ、P1_4(R58の左側のJ9ピン)から 😎 ワイヤーを接続します。次に、プロジェクトのpin_mux.cファイルで、EZH_Camera_D0にPORT1_PCR4を使用する代わりに、PORT3_PCR0 を使用します。                     MCXN NPU|ML
View full article
如何启用DDR模式 众所周知,RT 系列微控制器支持 XIP(就地执行)模式,并通过减少引脚数量而受益。串行 NOR 闪存最常用,因为 FlexSPI 模块可以高效地从串行 NOR 闪存中提取代码和数据供 Cortex-M7 执行。 获取方式是通过使用 Quad IO Fast Read 命令实现,同时,串行 NOR flash 在 SDR(Single Data Transfer Rate)模式下工作,它在 SCLK 上升沿接收数据,并在 SCLK 下降沿传输数据。与 SDR 模式相比,DDR(双数据传输速率)模式具有更高的吞吐量。它是否能为 XIP 模式提供更好的性能,如果我们希望串行 NOR 闪存以 DDR(双数据传输速率)模式工作,该如何实现? SDR & DDR mode SDR模式: 在 SDR(单数据传输率)模式下,数据仅在时钟的一个边沿(上升沿或下降沿)上计时。这意味着,为了使SDR能够以X Mbps的速率传输数据,时钟位速率需要为2X Mbps。 DDR mode: 对于 DDR(双数据传输速率)模式,也称为 DTR(双传输速率)模式,数据在时钟的上升沿和下降沿传输。这意味着数据以 X Mbps 的速度传输时,仅需时钟位速率为 X Mbps,从而使带宽翻倍(如图 1 所示)。   图1 启用DDR模式 以下步骤说明了如何使 i.MX RT1060 从 QSPI 启动并在 DDR 模式下工作。 注意:开发板是MIMXRT1060,IDE 是MCUXpresso IDE 打开名为“hello_world”的模板 修改FDCB(Flash设备配置块) a)将controllerMiscOption参数设置为支持DDR读命令。 b) 将串行闪存频率设置为 60 MHz。 c)将 DDR 读取命令解析为命令序列。 下表显示了 DDR Quad IO FAST READ 指令的模板命令序列,它与 IS25WP064 的 FRQDTR(Fast Read Quad IO DTR)序列几乎匹配(如图 2 所示)。   图2 FRQDTR序列 d)调整虚拟周期。 虚拟周期应与特定的串行时钟频率相匹配,FRQDTR序列命令的默认虚拟周期为6(如下表所示)。   然而,当串行时钟频率为 60MHz 时,虚拟周期应变为 4(如下表所示)。   因此,需要通过在 FDCB 中手动添加“SET READ PARAMETERS”命令序列(如图 3 所示),配置读取寄存器的 [P6:P3] 位(如下表所示)。 图 3 SET READ PARAMETERS 命令序列 此外,在 DDR 模式下,SCLK 周期是串行根时钟周期的两倍。操作数值应设置为 2N、2N-1 或 2*N+1 ,具体取决于器件数据表中定义的虚拟周期。 最后,我们可以得到一个调整后的 FCDB,如下所示。 // Set Dummy Cycles #define FLASH_DUMMY_CYCLES 8 // Set Read register command sequence's Index in LUT table #define CMD_LUT_SEQ_IDX_SET_READ_PARAM 7 // Read,Read Status,Write Enable command sequences' Index in LUT table #define CMD_LUT_SEQ_IDX_READ 0 #define CMD_LUT_SEQ_IDX_READSTATUS 1 #define CMD_LUT_SEQ_IDX_WRITEENABLE 3 const flexspi_nor_config_t qspiflash_config = { .memConfig = { .tag = FLEXSPI_CFG_BLK_TAG, .version = FLEXSPI_CFG_BLK_VERSION, .readSampleClksrc=kFlexSPIReadSampleClk_LoopbackFromDqsPad, .csHoldTime = 3u, .csSetupTime = 3u, // Enable DDR mode .controllerMiscOption = kFlexSpiMiscOffset_DdrModeEnable | kFlexSpiMiscOffset_SafeConfigFreqEnable, .sflashPadType = kSerialFlash_4Pads, //.serialClkFreq = kFlexSpiSerialClk_100MHz, .serialClkFreq = kFlexSpiSerialClk_60MHz, .sflashA1Size = 8u * 1024u * 1024u, // Enable Flash register configuration .configCmdEnable = 1u, .configModeType[0] = kDeviceConfigCmdType_Generic, .configCmdSeqs[0] = { .seqNum = 1, .seqId = CMD_LUT_SEQ_IDX_SET_READ_PARAM, .reserved = 0, }, .lookupTable = { // Read LUTs [4*CMD_LUT_SEQ_IDX_READ] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xED, RADDR_DDR, FLEXSPI_4PAD, 0x18), // The MODE8_DDR subsequence costs 2 cycles that is part of the whole dummy cycles [4*CMD_LUT_SEQ_IDX_READ + 1] = FLEXSPI_LUT_SEQ(MODE8_DDR, FLEXSPI_4PAD, 0x00, DUMMY_DDR, FLEXSPI_4PAD, FLASH_DUMMY_CYCLES-2), [4*CMD_LUT_SEQ_IDX_READ + 2] = FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0x00), // READ STATUS REGISTER [4*CMD_LUT_SEQ_IDX_READSTATUS] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01), [4*CMD_LUT_SEQ_IDX_READSTATUS + 1] = FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x00, 0, 0, 0), // WRTIE ENABLE [4*CMD_LUT_SEQ_IDX_WRITEENABLE] = FLEXSPI_LUT_SEQ(CMD_SDR,FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0x00), // Set Read register [4*CMD_LUT_SEQ_IDX_SET_READ_PARAM] = FLEXSPI_LUT_SEQ(CMD_SDR,FLEXSPI_1PAD, 0x63, WRITE_SDR, FLEXSPI_1PAD, 0x01), [4*CMD_LUT_SEQ_IDX_SET_READ_PARAM + 1] = FLEXSPI_LUT_SEQ(STOP,FLEXSPI_1PAD, 0x00, 0, 0, 0), }, }, .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, }; DDR模式真的更好吗? 根据 RT1060 的数据手册,下表展示了 FlexSPI 操作的最大频率。由于 MIMXRT1060 板载的 QSPI 闪存为IS25WP064AJBLE,该芯片不包含 MQS 引脚,因此将 MCR0.RXCLKsrc 设置为 1(内部虚拟读取时钟脉冲,从 DQS 引脚环回)是最优选项。 工作模式 RXCLKsrc=0 RXCLKsrc=1 RXCLKsrc=3 SDR 60 MHz 133 MHz 166 MHz DDR 30 MHz 66 MHz 166 MHz 换句话说,QSPI 在 SDR 模式下最高可达 133 MHz,而在 DDR 模式下则为 66 MHz。从吞吐量来看,它们几乎相同。似乎 DDR 模式并非 IS25WP064AJBLE 的较优选择,后续实验将验证这一假设。 实验 mbedtls_benchmark 我使用 mbedtls_benchmark 作为第一个测试演示,并在以下条件下运行该演示: 100MH,SDR模式; 133MHz, SDR mode; 66MHz, DDR mode; 根据相应的打印信息(如下所示),我制作了一张比较表,并在上述三种条件下标出了实施项目中表现最差的项,如图 4 所示。 SDR Mode run at 100 MHz. FlexSPI clock source is 3, FlexSPI Div is 6, PllPfd2Clk is 720000000 mbedTLS version 2.16.6 fsys=600000000 Using following implementations: SHA: DCP HW accelerated AES: DCP HW accelerated AES GCM: Software implementation DES: Software implementation Asymmetric cryptography: Software implementation MD5 : 18139.63 KB/s, 27.10 cycles/byte SHA-1 : 44495.64 KB/s, 12.52 cycles/byte SHA-256 : 47766.54 KB/s, 11.61 cycles/byte SHA-512 : 2190.11 KB/s, 267.88 cycles/byte 3DES : 1263.01 KB/s, 462.49 cycles/byte DES : 2962.18 KB/s, 196.33 cycles/byte AES-CBC-128 : 52883.94 KB/s, 10.45 cycles/byte AES-GCM-128 : 1755.38 KB/s, 329.33 cycles/byte AES-CCM-128 : 2081.99 KB/s, 279.72 cycles/byte CTR_DRBG (NOPR) : 5897.16 KB/s, 98.15 cycles/byte CTR_DRBG (PR) : 4489.58 KB/s, 129.72 cycles/byte HMAC_DRBG SHA-1 (NOPR) : 1297.53 KB/s, 448.03 cycles/byte HMAC_DRBG SHA-1 (PR) : 1205.51 KB/s, 486.04 cycles/byte HMAC_DRBG SHA-256 (NOPR) : 1786.18 KB/s, 327.70 cycles/byte HMAC_DRBG SHA-256 (PR) : 1779.52 KB/s, 328.93 cycles/byte RSA-1024 : 202.33 public/s RSA-1024 : 7.00 private/s DHE-2048 : 0.40 handshake/s DH-2048 : 0.40 handshake/s ECDSA-secp256r1 : 9.00 sign/s ECDSA-secp256r1 : 4.67 verify/s ECDHE-secp256r1 : 5.00 handshake/s ECDH-secp256r1 : 9.33 handshake/s DDR Mode run at 66 MHz. FlexSPI clock source is 2, FlexSPI Div is 5, PllPfd2Clk is 396000000 mbedTLS version 2.16.6 fsys=600000000 Using following implementations: SHA: DCP HW accelerated AES: DCP HW accelerated AES GCM: Software implementation DES: Software implementation Asymmetric cryptography: Software implementation MD5 : 16047.13 KB/s, 27.12 cycles/byte SHA-1 : 44504.08 KB/s, 12.54 cycles/byte SHA-256 : 47742.88 KB/s, 11.62 cycles/byte SHA-512 : 2187.57 KB/s, 267.18 cycles/byte 3DES : 1262.66 KB/s, 462.59 cycles/byte DES : 2786.81 KB/s, 196.44 cycles/byte AES-CBC-128 : 52807.92 KB/s, 10.47 cycles/byte AES-GCM-128 : 1311.15 KB/s, 446.53 cycles/byte AES-CCM-128 : 2088.84 KB/s, 281.08 cycles/byte CTR_DRBG (NOPR) : 5966.92 KB/s, 97.55 cycles/byte CTR_DRBG (PR) : 4413.15 KB/s, 130.42 cycles/byte HMAC_DRBG SHA-1 (NOPR) : 1291.64 KB/s, 449.47 cycles/byte HMAC_DRBG SHA-1 (PR) : 1202.41 KB/s, 487.05 cycles/byte HMAC_DRBG SHA-256 (NOPR) : 1748.38 KB/s, 328.16 cycles/byte HMAC_DRBG SHA-256 (PR) : 1691.74 KB/s, 329.78 cycles/byte RSA-1024 : 201.67 public/s RSA-1024 : 7.00 private/s DHE-2048 : 0.40 handshake/s DH-2048 : 0.40 handshake/s ECDSA-secp256r1 : 8.67 sign/s ECDSA-secp256r1 : 4.67 verify/s ECDHE-secp256r1 : 4.67 handshake/s ECDH-secp256r1 : 9.00 handshake/s 图4 性能比较 我们发现,当 QSPI 以 DDR 模式运行且频率为 66 MHz时,大多数实现项的性能表现最差。 Coremark 演示 第二个演示是在上述三种条件下运行Coremark演示,结果如下所示。 SDR Mode run at 100 MHz. FlexSPI clock source is 3, FlexSPI Div is 6, PLL3 PFD0 is 720000000 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 391889200 Total time (secs): 16.328717 Iterations/Sec : 2449.671999 Iterations : 40000 Compiler version : MCUXpresso IDE v11.3.1 Compiler flags : Optimization most (-O3) Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x25b5 Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 2449.671999 / MCUXpresso IDE v11.3.1 Optimization most (-O3) / STACK SDR Mode run at 133 MHz. FlexSPI clock source is 3, FlexSPI Div is 4, PLL3 PFD0 is 664615368 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 391888682 Total time (secs): 16.328695 Iterations/Sec : 2449.675237 Iterations : 40000 Compiler version : MCUXpresso IDE v11.3.1 Compiler flags : Optimization most (-O3) Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x25b5 Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 2449.675237 / MCUXpresso IDE v11.3.1 Optimization most (-O3) / STACK DDR Mode run at 66 MHz. FlexSPI clock source is 2, FlexSPI Div is 5, PLL3 PFD0 is 396000000 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 391890772 Total time (secs): 16.328782 Iterations/Sec : 2449.662173 Iterations : 40000 Compiler version : MCUXpresso IDE v11.3.1 Compiler flags : Optimization most (-O3) Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x25b5 Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 2449.662173 / MCUXpresso IDE v11.3.1 Optimization most (-O3) / STACK 在比较 CoreMark 分数后,当 QSPI 以 DDR 模式运行且频率为 66 MHz 时,其 CoreMark 分数最低。但实际上它们非常接近。 通过上述两项测试,我们可以得出结论:DDR 模式可能不是更好的选择,至少对于 i.MX RT10xx 系列 MCU 而言。 i.MXRT 102x i.MXRT 105x i.MXRT 106x
View full article
BMS & MBDT - MC33771B/MC33772BにおけるS32KとのTPL通信 1. はじめに 前回の記事では、従来のSPIプロトコルを使用してS32KをMC33771B/MC33772Bに接続する方法を学びました。その方法を用いると、アプリケーションは最大14セルのバッテリー・パックを管理できます。 この記事では、S32K1xxボードとMC3377xBTPLバッテリー・セルコントローラ間のTPL通信セットアップについて詳しく説明します。ここでは、14を超えるセルを直列接続できるバッテリー・パック用に、モデル・ベース設計ツール・ボックスを使用して設計されたバッテリー・マネジメント・システム・モデル用ハードウェアおよびソフトウェアのセットアップを取り扱います。この記事を読むと、ユーザーはバッテリー・セルコントローラのハードウェアを設定し、セルおよびパックの電圧、電流、温度、故障状態を読み取るSimulinkモデルをデザインできるようになります。測定値はFreeMasterを利用してホストPCに表示されます。 2. ハードウェア 14を超えるセルで構成される大型のバッテリー・バックを制御するには、バッテリー・パックを6セルまたは14セル(NXPセル・コントローラが接続できる最大数)のモジュールに「分割」し、各モジュールを監視する必要があります。メインMCUは、必要な情報を取得または設定するために、すべてのコントローラと通信する必要があります。この通信を実現するために、すべてのセル・コントローラをデイジー・チェーン・トポロジで接続し、トランシーバを使用してメインMCUをTPLネットワークに接続します。 このセットアップは以下のパーツで構成されます。 S32K144 EVB FRDM33664BEVB 1~15個のFRDM33771BTPLEVBまたはFRDM33772BTPLEVB 各セル・コントローラに対するBATT-6EMULATORまたはBATT-14EMULATOR S32K144EVB用のUSBケーブル、各エミュレータ用の12V電源 MC33664トランシーバをS32Kボードに接続します。これには2つの方法があります。1つは変換器ボードを使用する方法(UM1114の第2.4.3章のFRDM33664BEVB構成(TPL通信モード)を参照)、もう1つはワイヤで直接接続する方法です。上の写真では後者のアプローチを採用しましたが、UM11143 [1] の表6の説明に従って、ワイヤの代わりにパーフボードを使用しました。 ツイストペア・ケーブルを使用して、最大15個のバッテリー・セルコントローラを接続します(OUT+からIN+、OUT-からIN-)。 各EMULATORボードの電源を入れます。 3.ソフトウェア ソフトウェアのアプローチはSPIと非常によく似ています。このモデルには、MBD_S32K1xx_Config_Informationブロックと、FreeMaster通信用のFreeMaster_Configが必要です。 3.1 バッテリーセルコントローラー構成ブロック 前回の記事では、1つのSPIインスタンスのみを使用して、1つのBCCデバイスと通信しましたが、今回のTPLでは2つのSPIインスタンスが必要です。1つはスレーブ、もう1つはマスターとして構成します。ユーザーは、モデルに2つのLPSPI構成ブロックを追加して、使用するハードウェアインスタンスを選択する必要があります。 バッテリー・セルコントローラの [Configuration(構成)] には、同じMC3377xB_Configブロックを追加する必要があります。ここでは、モードをTPLに設定し、デバイス番号はBCCデバイス番号(この場合は2)に合わせて設定します。 次の [SPI] タブでは、マスターとスレーブのインスタンス番号、およびTPLトランシーバに接続されたチップ・セレクトを選択する必要があります。マスターSPIインスタンスでは、ハードウェア設計者がハードウェアSPIとは別のピンを割り当てた場合に、ユーザーが通常のGPIOをチップ・セレクト・ピンとして使用することもできます。 3.2 測定 値を読み取るには、SPI と同じブロックを使用しますが、今回は、読み取りたいバッテリーセルコントローラの CID を指定する必要があります。 上の図からわかるように、このアプリケーションでは2台のMC33772BTPLデバイスを使用しています。MC3377xB_Get_Valuesブロックは2つ追加しました。1つはCIDが1のデバイス用、もう1つはCIDが2のデバイス用です。合計のパック電圧は、各モジュール・スタック電圧の測定値の和です。すべてのセルが直列に接続されているため、CID1のデバイスについてのみパック電流を測定します。 4.例と検証 この記事には、上記の例が含まれています。あなたのセットアップでモデルを実行することは、プロジェクトの良い出発点となる可能性があります。コードが正常に生成され、ターゲットに展開された後、FreeMasterをUART経由でボードに接続し、以下のアプリケーションのようにホストPCで値を監視することができます。 5. リソース 5.1.  UM 11143 https://www.nxp.com/webapp/Download?colCode=UM11143&location=null 5.2. FRDM33664BEVB https://www.nxp.com/design/development-boards/analog-toolbox/...  5.3. FRDM33771BTPLEVB https://www.nxp.com/docs/en/user-guide/FRDM33771BTPLEVBUG.pdf 5.4. FRDM33772BTPLEVB https://www.nxp.com/docs/en/user-guide/FRDM33772BTPLEVBUG.pdf 5.5. S32K144 EVB https://www.nxp.com/design/development-boards/automotive-development-...  この記事では、S32K1xxボードとMC3377xBTPLバッテリー・セルコントローラ間のTPL通信セットアップについて詳しく説明します。ここでは、14を超えるセルを直列接続できるバッテリー・パック用に、モデル・ベース設計ツール・ボックスを使用して設計されたバッテリー・マネジメント・システム・モデル用ハードウェアおよびソフトウェアのセットアップを取り扱います。この記事を読むと、ユーザーはバッテリー・セルコントローラのハードウェアを設定し、セルおよびパックの電圧、電流、温度、故障状態を読み取るSimulinkモデルをデザインできるようになります。測定値はFreeMasterを利用してホストPCに表示されます。
View full article
DDRモードを有効にする方法 ご存知のように、RTシリーズMCUはXIP (Execute in place) モードをサポートしており、ピン数を節約できるという利点があります。FlexSPIモジュールはシリアルNORフラッシュからコードとデータを非常に効率的に取得してCortex-M7を実行できるため、シリアルNORフラッシュが最も一般的に使用されています。 フェッチ方法はQuad IO Fast Readコマンドを利用して実装されています。一方、シリアルNORフラッシュはSDR(単一データ転送レート)モードで動作し、SCLKの立ち上がりエッジでデータを受信し、SCLKの立ち下がりエッジでデータを送信します。SDRモードと比較すると、DDR(デュアルデータ転送レート)モードはスループット容量が高く、XIPモードでより良いパフォーマンスを提供できるかどうか、またシリアルNORフラッシュをDDRモードで動作させる方法について教えてください。 SDR & DDR mode SDRモード: SDR(シングルデータ転送レート)モードでは、データはクロックの一方のエッジ(立ち上がりエッジまたは立ち下がりエッジ)でのみクロックされます。つまり、SDRでデータがX Mbpsで送信されるには、クロック・ビット・レートが2X Mbpsである必要があります。 DDR mode: DDR(デュアルデータ転送レート)モード(DTR(デュアル転送レート)モードとも呼ばれる)では、データはクロックの立ち上がりエッジと立ち下がりエッジの両方で転送されます。これは、データがX Mbpsで伝送される場合、クロック・ビット・レートもX Mbpsである必要があり、したがって帯域幅が2倍になることを意味します(図1を参照)。   図1 DDRモードを有効にする 以下の手順は、DDRモードで動作するi.MX RT1060をQSPIから起動する方法を示しています。 注記:ボードは MIMXRT1060、IDEは MCUXpresso IDEです hello_worldをテンプレートとして開きます FDCB(フラッシュデバイス構成ブロック)を変更する a) controllerMiscOptionパラメータをDDR読み取りコマンドをサポートするように設定してください。 b) シリアル・フラッシュ周波数を60MHzに設定します。 c) DDR読み出しコマンドをコマンド・シーケンスに解析します。 次の表は、DDR Quad IO FAST READ 命令のテンプレートコマンド・シーケンスを示しており、IS25WP064のFRQDTR (Fast Read Quad IO DTR) シーケンスとほぼ一致しています(図2を参照)。   図2 FRQDTRシーケンス d)ダミーサイクルを調整します。 ダミーサイクルは特定のシリアルクロック周波数と一致する必要があり、FRQDTRシーケンスコマンドのデフォルトのダミーサイクルは6です(以下の表に示すように)。   しかし、シリアルクロックの周波数が60MHzの場合、ダミーサイクルは4に変更する必要があります(以下の表を参照してください)。   そのため、FDCB に SET READ PARAMETERS コマンドシーケンス(図 3 参照)を手動で追加し、読み取りレジスタの [P6:P3] ビット(下表参照)を設定する必要があります。 図3 SET READ PARAMETERS コマンドシーケンス さらに、DDRモードでは、SCLKサイクルはシリアル・ルート・クロック・サイクルの2倍になります。オペランドの値は、デバイスのデータシートでダミー・サイクルがどのように定義されているかに応じて 2N、2N-1、または2*N+1 に設定する必要があります。 最終的に、以下のように調整されたFCDBを取得できます。 // Set Dummy Cycles #define FLASH_DUMMY_CYCLES 8 // Set Read register command sequence's Index in LUT table #define CMD_LUT_SEQ_IDX_SET_READ_PARAM 7 // Read,Read Status,Write Enable command sequences' Index in LUT table #define CMD_LUT_SEQ_IDX_READ 0 #define CMD_LUT_SEQ_IDX_READSTATUS 1 #define CMD_LUT_SEQ_IDX_WRITEENABLE 3 const flexspi_nor_config_t qspiflash_config = { .memConfig = { .tag = FLEXSPI_CFG_BLK_TAG, .version = FLEXSPI_CFG_BLK_VERSION, .readSampleClksrc=kFlexSPIReadSampleClk_LoopbackFromDqsPad, .csHoldTime = 3u, .csSetupTime = 3u, // Enable DDR mode .controllerMiscOption = kFlexSpiMiscOffset_DdrModeEnable | kFlexSpiMiscOffset_SafeConfigFreqEnable, .sflashPadType = kSerialFlash_4Pads, //.serialClkFreq = kFlexSpiSerialClk_100MHz, .serialClkFreq = kFlexSpiSerialClk_60MHz, .sflashA1Size = 8u * 1024u * 1024u, // Enable Flash register configuration .configCmdEnable = 1u, .configModeType[0] = kDeviceConfigCmdType_Generic, .configCmdSeqs[0] = { .seqNum = 1, .seqId = CMD_LUT_SEQ_IDX_SET_READ_PARAM, .reserved = 0, }, .lookupTable = { // Read LUTs [4*CMD_LUT_SEQ_IDX_READ] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xED, RADDR_DDR, FLEXSPI_4PAD, 0x18), // The MODE8_DDR subsequence costs 2 cycles that is part of the whole dummy cycles [4*CMD_LUT_SEQ_IDX_READ + 1] = FLEXSPI_LUT_SEQ(MODE8_DDR, FLEXSPI_4PAD, 0x00, DUMMY_DDR, FLEXSPI_4PAD, FLASH_DUMMY_CYCLES-2), [4*CMD_LUT_SEQ_IDX_READ + 2] = FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0x00), // READ STATUS REGISTER [4*CMD_LUT_SEQ_IDX_READSTATUS] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01), [4*CMD_LUT_SEQ_IDX_READSTATUS + 1] = FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x00, 0, 0, 0), // WRTIE ENABLE [4*CMD_LUT_SEQ_IDX_WRITEENABLE] = FLEXSPI_LUT_SEQ(CMD_SDR,FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0x00), // Set Read register [4*CMD_LUT_SEQ_IDX_SET_READ_PARAM] = FLEXSPI_LUT_SEQ(CMD_SDR,FLEXSPI_1PAD, 0x63, WRITE_SDR, FLEXSPI_1PAD, 0x01), [4*CMD_LUT_SEQ_IDX_SET_READ_PARAM + 1] = FLEXSPI_LUT_SEQ(STOP,FLEXSPI_1PAD, 0x00, 0, 0, 0), }, }, .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, }; DDRモードは本当に優れていますか? RT1060のデータシートによると、以下の表はFlexSPI動作の最大周波数を示しています。MIMXRT1060のオンボードQSPIフラッシュはIS25WP064AJBLEで、MQSピンは含まれていません。MCR0.rxclksrc=1セット(内部ダミー・リード・ストロボとDQSからのループバック)が最も最適なオプションです。 動作モード RXCLKsrc=0 RXCLKsrc=1 RXCLKsrc=3 SDR 60 MHz 133 MHz 166 MHz DDR 30 MHz 66 MHz 166 MHz 言い換えると、QSPIは、SDRモードでは最大133 MHzまで動作できるのに対し、DDRモードでは66 MHzです。スループット容量の観点から見ると、ほぼ同じです。DDRモードはIS25WP064AJBLEにとってより良いオプションではないようで、次の実験でその仮定が検証されるでしょう。 実験 mbedtls_benchmark 最初のテスト・デモとして mbedtls_benchmarkを使用し、以下の条件でデモを実行します。 100MH、SDRモード; 133MHz, SDR mode; 66MHz, DDR mode; 対応するプリントアウトの情報(以下に示すように)に基づいて、比較用の表を作成し、図4に示すように、上記の3つの条件の中で実装項目のパフォーマンスが最悪のものをマークしました。 SDR Mode run at 100 MHz. FlexSPI clock source is 3, FlexSPI Div is 6, PllPfd2Clk is 720000000 mbedTLS version 2.16.6 fsys=600000000 Using following implementations: SHA: DCP HW accelerated AES: DCP HW accelerated AES GCM: Software implementation DES: Software implementation Asymmetric cryptography: Software implementation MD5 : 18139.63 KB/s, 27.10 cycles/byte SHA-1 : 44495.64 KB/s, 12.52 cycles/byte SHA-256 : 47766.54 KB/s, 11.61 cycles/byte SHA-512 : 2190.11 KB/s, 267.88 cycles/byte 3DES : 1263.01 KB/s, 462.49 cycles/byte DES : 2962.18 KB/s, 196.33 cycles/byte AES-CBC-128 : 52883.94 KB/s, 10.45 cycles/byte AES-GCM-128 : 1755.38 KB/s, 329.33 cycles/byte AES-CCM-128 : 2081.99 KB/s, 279.72 cycles/byte CTR_DRBG (NOPR) : 5897.16 KB/s, 98.15 cycles/byte CTR_DRBG (PR) : 4489.58 KB/s, 129.72 cycles/byte HMAC_DRBG SHA-1 (NOPR) : 1297.53 KB/s, 448.03 cycles/byte HMAC_DRBG SHA-1 (PR) : 1205.51 KB/s, 486.04 cycles/byte HMAC_DRBG SHA-256 (NOPR) : 1786.18 KB/s, 327.70 cycles/byte HMAC_DRBG SHA-256 (PR) : 1779.52 KB/s, 328.93 cycles/byte RSA-1024 : 202.33 public/s RSA-1024 : 7.00 private/s DHE-2048 : 0.40 handshake/s DH-2048 : 0.40 handshake/s ECDSA-secp256r1 : 9.00 sign/s ECDSA-secp256r1 : 4.67 verify/s ECDHE-secp256r1 : 5.00 handshake/s ECDH-secp256r1 : 9.33 handshake/s DDR Mode run at 66 MHz. FlexSPI clock source is 2, FlexSPI Div is 5, PllPfd2Clk is 396000000 mbedTLS version 2.16.6 fsys=600000000 Using following implementations: SHA: DCP HW accelerated AES: DCP HW accelerated AES GCM: Software implementation DES: Software implementation Asymmetric cryptography: Software implementation MD5 : 16047.13 KB/s, 27.12 cycles/byte SHA-1 : 44504.08 KB/s, 12.54 cycles/byte SHA-256 : 47742.88 KB/s, 11.62 cycles/byte SHA-512 : 2187.57 KB/s, 267.18 cycles/byte 3DES : 1262.66 KB/s, 462.59 cycles/byte DES : 2786.81 KB/s, 196.44 cycles/byte AES-CBC-128 : 52807.92 KB/s, 10.47 cycles/byte AES-GCM-128 : 1311.15 KB/s, 446.53 cycles/byte AES-CCM-128 : 2088.84 KB/s, 281.08 cycles/byte CTR_DRBG (NOPR) : 5966.92 KB/s, 97.55 cycles/byte CTR_DRBG (PR) : 4413.15 KB/s, 130.42 cycles/byte HMAC_DRBG SHA-1 (NOPR) : 1291.64 KB/s, 449.47 cycles/byte HMAC_DRBG SHA-1 (PR) : 1202.41 KB/s, 487.05 cycles/byte HMAC_DRBG SHA-256 (NOPR) : 1748.38 KB/s, 328.16 cycles/byte HMAC_DRBG SHA-256 (PR) : 1691.74 KB/s, 329.78 cycles/byte RSA-1024 : 201.67 public/s RSA-1024 : 7.00 private/s DHE-2048 : 0.40 handshake/s DH-2048 : 0.40 handshake/s ECDSA-secp256r1 : 8.67 sign/s ECDSA-secp256r1 : 4.67 verify/s ECDHE-secp256r1 : 4.67 handshake/s ECDH-secp256r1 : 9.00 handshake/s 図4 パフォーマンス比較 ほとんどの実装項目は、QSPIが66MHzのDDRモードで動作しているときに最悪のパフォーマンスを示すことがわかります。 Coremarkデモ 2番目のデモは、上記の3つの条件下でCoremarkデモを実行しており、その結果は以下に示されています。 SDR Mode run at 100 MHz. FlexSPI clock source is 3, FlexSPI Div is 6, PLL3 PFD0 is 720000000 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 391889200 Total time (secs): 16.328717 Iterations/Sec : 2449.671999 Iterations : 40000 Compiler version : MCUXpresso IDE v11.3.1 Compiler flags : Optimization most (-O3) Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x25b5 Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 2449.671999 / MCUXpresso IDE v11.3.1 Optimization most (-O3) / STACK SDR Mode run at 133 MHz. FlexSPI clock source is 3, FlexSPI Div is 4, PLL3 PFD0 is 664615368 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 391888682 Total time (secs): 16.328695 Iterations/Sec : 2449.675237 Iterations : 40000 Compiler version : MCUXpresso IDE v11.3.1 Compiler flags : Optimization most (-O3) Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x25b5 Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 2449.675237 / MCUXpresso IDE v11.3.1 Optimization most (-O3) / STACK DDR Mode run at 66 MHz. FlexSPI clock source is 2, FlexSPI Div is 5, PLL3 PFD0 is 396000000 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 391890772 Total time (secs): 16.328782 Iterations/Sec : 2449.662173 Iterations : 40000 Compiler version : MCUXpresso IDE v11.3.1 Compiler flags : Optimization most (-O3) Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x25b5 Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 2449.662173 / MCUXpresso IDE v11.3.1 Optimization most (-O3) / STACK CoreMarkスコアを比較した後、QSPIが66 MHzのDDRモードで動作しているときに、CoreMarkスコアが最も低くなります。しかし、実際にはかなり近いです。 上記の2つのテストから、少なくともi.MX RT10xxシリーズMCUにおいて、DDRモードはおそらく最良の選択肢ではないことがわかります。 i.MXRT 102倍 i.MXRT 105倍 i.MXRT 106倍
View full article
SENT transmitter using FLEXIO/PWM/...等 Hi, FLEXIO/PWMを使用して、実際のSENT TXモジュールなしでSENT TXパルスを生成することは可能ですか。等。NXPポータルでは、実際のSENTトランスミッターなしでSENT TX機能を実現できるという投稿を見かけます。 EVB S12ZVCA192持っています。実際のSENTトランスミッターがない場合、SENT送信TXパルスを送信したい。これをどのように実装できますか?S12ZVCファミリのマイクロには、これに対するサンプルコードはありますか? Re:FLEXIO / PWM /...等 こんにちは @UmaMaheswaraReddy、 私はちょうどこのトピックに関するあなたの他のスレッドに返信しました: https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SENT-Transmitter-channels/td-p/1963655 よろしくお願いします。 Daniel
View full article
LPCのシステムクロック このドキュメントでは、LPCデバイスに存在するシステムクロックを生成する際に使用される各種ソースクロックと、それらのクロックソースを管理する主要モジュールについて説明します。 デバイスで利用可能な各種クロックソースを把握することは重要です。デフォルトのクロック構成を変更する目的には、プロセッサ性能の向上、シリアル通信の特定ボーレート達成、省電力、あるいはタイマの基準クロック取得などが挙げられます。 本ドキュメントで使用したハードウェアは以下のとおりです。 LPC: LPCXpresso55S69 本ドキュメントで説明しているハードウェアおよびクロック管理モジュールは、各プラットフォームの概要を示したものであり、上記に列挙したデバイスはあくまで参考例です。同一プラットフォームでも、用語やハードウェアモジュールの機能が異なる場合があります。デバイスのハードウェアモジュールの詳細については、各デバイスのReference Manualを参照してください。 LPCプラットフォーム システム制御ブロック(SYSCON)は、LPCプラットフォームでのクロック生成を容易にし、さまざまなクロックバリエーションが可能です。LPC55S6xプラットフォームの最大クロック周波数は150MHzです。 例えば、LPC55S69デバイスは外部クロックソースを2つ、内部クロックソースを3つサポートしています。 ·    外部クロックソース 動作周波数1 MHz~32 MHzの水晶発振器。   動作周波数32.768 kHzのRTC水晶発振器。   · 内部クロックソース 内部フリーラニングオシレータ(FRO) このオシレータは、システムクロックとして使用できる選択可能な96 MHz出力と、選択された高周波数から分周された12 MHz出力を提供します。 これらの96 MHzおよび12 MHzの出力周波数は、192 MHzのフリーラニングオシレータから生成されます。12 MHz出力はリセット時のデフォルトクロックとなり、電源ピンが動作電圧に達して間もなくクリーンなシステムクロックを提供します。 96MHz クロックは USB デバイスにのみ使用でき、データ信号レートの USB ホストのタイミング要件には信頼できないことに注意してください。 32 kHz内部自励発振器 (FRO)。 FROは電圧および温度の全範囲で±2%の精度にトリミングされています。このFROはDeep-Sleepモード、Power-Downモード、Deep-Power-Downモードなどの複数のパワーダウンモードで有効にでき、32ビットリアルタイムクロック(RTC)のクロックソースとしても使用されます。 内部低消費電力オシレータ(FRO 1 MHz) この時計の精度は、組み立て中にトリミングを行った後、温度、電圧、シリコン処理の変動に対して±15%に制限されます。このFROはディープスリープモードで有効にでき、PLL0およびPLL1、WWDT(ウィンドウ・ウォッチドッグ・タイマー)のクロックソースとして使用できます。 LPC55S69は最大150 MHzで動作できますが、クロックソースは最終的なシステムクロック周波数(@150 MHz)より低速です。SYSCONブロック内の二つのフェーズループロックド(PLL0&PLL1)が、高周波数の外部クロックを用いずにCPUを最大動作周波数まで駆動します。 これらのPLLは、内部FRO@12 MHz、外部オシレータ、内部FRO@1 MHz、または32.768 kHz RTCオシレータから動作させることができます。これら複数のソースクロックは、2 kHz〜150 MHz という広い入力周波数範囲により、要求されるPLL周波数に適合します。PLLはソフトウェアで有効化/無効化できます。 以下の図は、使用可能な内部および外部クロックソース、SYSCONブロックとの相互作用、およびPLLモジュールの概要を示しています。   図 1. SYSCON概要図   SYSCONは、メインクロック、システムクロック、およびペリフェラルで使用されるクロックソースを管理します。 クロックソースを選択した後、アプリケーションに応じてPLLモジュールを使用して構成し、目的のクロック周波数を生成します。 また、SYSCONモジュールにはボード上の各ペリフェラル用に複数のクロックマルチプレクサがあり i.e(Systick, FullSpeed-USB, CTimer)、他のペリフェラルのクロックソース選択に関係なく各ペリフェラルが独自にソースクロックを選択できます。例えば、次の図は、前述のマルチプレクサと、そのモジュールで使用可能なすべてのソースクロックを示しています。 図 2. ペリフェラル用ソースクロック選択   詳細については、 LPC55S6x User Manualの「Chapter 4. System Control(SYSCON)」を参照してください。 例: PLLの有効化/無効化 MCUXpresso IDEで利用可能なクロックツールを使用すると、プラットフォーム内の周辺機器のクロックソースを理解し、構成できます。次の図は、150MHzで構成されたデフォルトのPLLモードを示しています。黄色のパスは、クロック構成に関与するすべての内部モジュールを示しています。 図 3. リセット時のLPC55S69におけるデフォルトPLLモード@150MHz   例として、Clock Toolsを用いてPLLのクロックソースを内部32MHz水晶発振器由来の clk_in に設定できます。この場合、PLLはバイパスモードに設定され、PLLが非アクティブとなるため省電力になります。 図 4. PLLのバイパス PLL設定の詳細については、LPC55S6x User Manualの「Chapter 4.6.6.PLL0 and PLL1 functional description」を参照してください。 例: 以下の手順では、Clock Toolsを使って特定ペリフェラルのクロックソースを選択する方法を説明します。 1.1 特定ペリフェラルのクロック設定 T図17に示すように周辺機器を設定するには、Clock Toolsを使用して目的の周辺機器のクロックソースを設定することも役立ちます。たとえば、CTimer0 を使用する場合、利用可能なクロックソースは以下の通りです。 メインクロック PLL0クロック FRO 96MHzクロック  FRO 1MHz クロック MCLKクロック オシレータ32KHzクロック クロックなし(非アクティブ)   図5. CTimer0クロックソースセレクタ CTIMERCLKSEL0 マルチプレクサを選択し、次に、記載されたクロックソースのいずれかに切り替えます。たとえば、 main_clk(メインクロック @150MHz)を選択すると、クロックマルチプレクサがアクティブになり、次の画像のように黄色のパスが強調表示されます。   図 6. CTimer0にメインクロックを接続 1.2 クロック構成をプロジェクトにエクスポート クロック設定を完了すると、Clock Toolは clock_config.c および clock_config.hのソースコードを更新し、ツールで作成したすべてのクロック機能グループを含めます。これには 特定ペリフェラルのクロックソースが含まれます。前の例では、CTimer0をmain_clkに設定しました。これはソースコード内で次の命令に変換されます:“CLOCK_AttachClk(kMAIN_CLK_to_CTIMER0);”―この命令は“BOARD_BootClockPLL150M();”関数内に配置されます。   図 7. clock_config.cファイルから呼び出されるAPI 注意。周辺機器の内部レジスタを設定する前に、そのクロックソースを接続する必要があることを覚えておいてください。そうしないと、ハードフォールトが発生します。 参考情報 LPC55S6x/LPC55S2x/LPC552xユーザーマニュアル またご覧ください RTのシステムクロック Kinetisシステムクロック 全般 LPC55xx
View full article
使用 MCX N94x 从外部存储器运行代码 MCX N 系列是集成了闪存的 MCU,与许多传统的 MCU 系列类似。内置闪存特别实用,因为它有助于简化电路板设计、开发流程、BOM 以及软件开发。 然而,内置闪存的容量可能无法满足应用程序对内存的需求。有些客户确实需要更大的闪存空间。例如,图形应用程序需要在非易失性存储器中存储大型图像缓冲区;数据记录设备需要存储大量数据;或者用于物体识别的复杂推理模型。还有一些应用程序需要存储固件的备份版本,或者本身过于复杂和庞大。为满足这一需求,MCX N94x 具备与多种更宽容量的外部存储器接口的能力。扩展闪存的传统方案有多种,本文将重点介绍外部 NOR 闪存的使用。 为了访问外部存储器,MCX N94x 集成了支持外部存储器接口的模块,即 FlexIO 和 FlexSPI。FlexSPI 模块能够与多种类型的存储器进行通信。其中之一是串行NOR闪存,可以用作启动设备。 本文的目标是展示一个客户案例的解决方案:如何从外部闪存中运行代码。展示MCX N94x平台的灵活性,并介绍开发人员在开发从外部闪存运行应用程序时需要熟悉的多种工具、外设和概念。 下图展示了本文的核心目标 —— 从外部闪存运行代码。同一个 “Hello World” 应用程序可以从内部存储器和外部存储器(例如,NOR 串行 QuadSPI 存储器)运行,且功能不会有任何变化。内核只需使用 FlexSPI 等专用外设来获取并执行指令。 图 1 从内部存储器与外部存储器执行相同代码 MCX N94x 系列集成了 FlexSPI 模块,这使得从外部 NOR 闪存运行代码成为可能。 图 2 MCX N94x 框图 要跟随本文进行操作,你需要 FRDM-MCXN947 开发板。这是用于 MCX N94x 和 N54x MCU 的评估板。FRDM-MCXN947 集成了 W25Q64JVSSIQ QuadSPI 闪存。因此,该平台非常适合创建从外部闪存运行的应用程序。 图 3 FRDM-MCXN947 上的外部 NOR 闪存 Boot、PFR 和 SPSDK MCX N 系列集成的启动 ROM 可以擦除、编程和读取片上或外部闪存,这意味着你可以使用启动 ROM 通过 ISP 接口将启动镜像下载到片上或外部闪存中。本文将展示如何使用启动 ROM 将 SDK 中的自定义 led_blinky 演示程序加载到外部闪存。当然,也可以使用其他应用项目。 此外,启动 ROM 负责启动流程。它会选择从片上闪存、外部闪存还是 ISP 模式启动。下图展示了一个极度简化的启动流程,有助于从整体上理解芯片的启动过程。有关启动流程机制的更多细节,请参考《MCX Nx4x 参考手册》中的 “顶级启动流程” 部分。 图 4 简化的启动流程 复位处理程序执行后,启动 ROM 将控制芯片的启动流程。它首先会进行相关的芯片初始化,然后检查 ISP 引脚的状态。如果 ISP 引脚被断言,就会执行 ISP 启动处理程序。ISP(在系统编程)是一种执行模式,在这种模式下,启动 ROM 会通过 UART 或 USB 等协议等待外部主机的命令,以执行读取和写入芯片存储器、烧写熔丝等操作。如果 ISP 引脚未被断言,启动 ROM 会继续确定启动模式。启动模式可以通过 PFR 的 CMPA 中的 CMPA [BOOT_SOURCE] 位或 eFUSES 来控制。如果 CMPA [BOOT_SOURCE] = 01b,启动 ROM 将运行 FlexSPI NOR 启动处理程序;如果 CMPA [BOOT_SOURCE] 为 00b 或 11b,则执行内部闪存启动处理程序。启动模式选择后,会对镜像进行验证。如果镜像无效(例如,存储器中不存在、已损坏或格式不正确),则执行 ISP 启动处理程序。如果镜像有效,启动 ROM 最终会跳转到用户应用程序。 默认启动流程是通过内部闪存启动,大多数 SDK 示例将配置为通过内部闪存启动,因为 CMPA[BOOT_SOURCE] 默认值为零,或者当 CMPA 区域被擦除时。根据简化的引导流程图,我们需要让引导ROM进入FlexSPI NOR引导处理例程,以从外部闪存启动。因此,我们需要将 CMPA[BOOT_SOURCE] 设置为 01b。 PFR 包含关键的启动和安全设置,这些设置在每次重置后都会被启动ROM监控。如前所述,CMPA区域可用于控制启动模式。因此,PFR区域需要谨慎配置,因为它们控制启动流程并且控制芯片的安全特性。下图展示了包含CMPA的PFR的极简示意图,位于内部闪存旁边。 图5 PFR 的 CMPA 区域 有关 PFR 的具体细节,请参考《MCX Nx4x 参考手册》所附的 MCXNx4x_IFR.xlsx。 为方便写入 CMPA 和 PFR 的其他区域、为应用程序签名、烧写熔丝以及对应用程序进行编程,NXP 开发了多个主机命令工具、API 和应用程序,并将它们集成到一个名为 SPSDK 的 Python 工具中。下图显示了 SPSDK 包含的所有工具。要了解 SPSDK 的详细信息以及 API、应用程序和工具的描述,请参考 SPSDK 文档:https://spsdk.readthedocs.io/en/latest/spsdk.html# 图 6 SPSDK API 模块、应用程序和工具 上图重点标注了 SPSDK 提供的 3 个应用程序,它们将用于配置芯片从外部闪存启动,分别是:nxpdebugmbox、PFR 和 BLHOST。后面将详细介绍这些应用程序的分步使用方法。 nxpdebugmbox 应用程序通过 SWD 与芯片的调试邮箱进行交互。该工具的用途是将 MCU 设置为 ISP 模式(无需拉低 ISP 引脚),还可以对芯片的存储器和 PFR 进行批量擦除。一旦 MCU 进入 ISP 模式,主机 PC 就能通过 UART 或 USB 协议与启动 ROM 通信,这使得 PFR 和 BLHOST 应用程序可以正常使用。PFR 应用程序将用于在 PFR 的 CMPA 区域中写入 CMPA [BOOT_SOURCE] = 01b,并启用 FlexSPI 端口探测功能,使芯片能够与外部闪存通信。BLHOST 应用程序将用于擦除芯片并编程应用程序镜像,本文中具体使用的是 led_blinky 演示程序。 外部串行 NOR 闪存接口 要理解如何在 MCX N94x 上从外部 NOR 闪存执行代码,以下术语至关重要。 首先,“就地执行” (Execute-in-Place,XIP) 指的是 MCU 内核能够直接从外部存储器获取并执行指令的能力。也就是说,MCU 可以从闪存而不是传统的内部闪存执行代码。 要实现 XIP,MCX N94x 需要一个能够从外部存储器获取指令的专用外设,FlexSPI 模块就具备这一能力。FlexSPI 支持多种类型的外部存储器,串行 NOR 闪存便是其中之一。 为实现与外部存储器的接口,FlexSPI 支持 SPI 协议。SPI 是一种非常适合短距离、高速通信的串行协议。QuadSPI 可以简单理解为 SPI 协议的一种实现,它不像传统 SPI 那样只有一条数据线,而是有 4 条数据线。SPI 还支持 2 条和 8 条数据线的模式。 灵活串行外设接口(FlexSPI)存储器控制器支持连接外部串行 NOR、NAND 和 RAM。 它支持两个 SPI 通道和最多四个外部设备。每个通道支持单 / 双 / 四 / 八线模式的数据传输(1/2/4/8 条双向数据线)。 灵活的序列引擎(LUT 表)支持各种厂商的设备(串行 NOR、串行 NAND、HyperBus、FPGA 等)。 AHB总线的内存映射读写访问 实现了 AHB 接收缓冲区以减少读取延迟,AHB 接收缓冲区总大小为 1024 KB AHB RX 缓冲区中有 8 个灵活且可配置的缓冲器 通过 IP 总线进行软件触发的 Flash 读/写访问 实现了 IP 接收 FIFO 以缓冲从外部设备读取的所有数据,FIFO 大小为 1024 字节 实现了 IP 发送 FIFO 以缓冲写入外部设备的所有数据,FIFO 大小为 1024 字节 DMA 支持填充 IP TX FIFO DMA 支持读取 IP RX FIFO 图 7 FlexSPI 框图 FlexSPI 系统内存映射区域在 FlexSPI 子模块中被重新映射到不同的地址: 图 8 FlexSPI 内存映射 FlexSPI 可以支持符合 JESD216 标准的串行设备。 前提条件 您将需要以下硬件: FRDM-MCXN947评估板。 USB C电缆。 Windows 或 Linux PC。 您需要安装以下软件。 MCUXpresso IDE v11.9.0 或更高版本。 FRDM-MCXN947 SDK v2.15.0 或更高版本。 SPSDK 和 Python。 SPSDK 安装和虚拟环境 我们建议在 Python 虚拟环境中运行 SPSDK,因为这可以简化 SPSDK 的安装过程。 在进行 SPSDK 的安装步骤之前,建议在你的电脑上创建一个文件夹。虚拟环境将在此处运行,SPSDK 工具将在此处被调用,SPSDK 生成的所有文件也将存储在此处。 打开终端、命令提示符或 Power Shell,导航到你创建的文件夹,然后按照本指南中列出的 SPSDK 安装命令进行安装:《安装指南 — SPSDK 文档》            要在虚拟环境中验证 SPSDK 的安装情况,请运行以下命令。 spsdk --version         下图显示了该命令的示例以及本文所用的 SPSDK 版本。 图 9 SPSDK 版本  设置 本章将介绍生成镜像并从外部存储器启动的所有步骤。 要运行本文中列出的命令,你需要使用 Python 虚拟环境。使用你在 SPSDK 安装过程中创建的虚拟环境。 PFR设置 本节描述了需要在 MCX N94x PFR 和可引导映像中进行的设置。 创建 CMPA 和 CFPA 的 yaml 模板   在接下来的步骤中,我们将重点编辑 CMPA 区域,因为它包含与外部执行相关的启动字段。CFPA 区域无需编辑。            注:用于生成模板的命令基于 “pfr” 工具。有关这些命令的功能详情,请访问:《用户指南 - pfr — SPSDK 文档》 首先,我们将使用 pfr 工具创建 yml 格式的 CMPA/CFPA 模板。这些模板仅包含为设备的 CMPA 和 CFPA 区域指定的默认配置。 如果命令运行成功,将生成相应的模板,如下图所示。 图10 Yaml 模板已创建。 编辑 CMPA 和 CFPA 的 yaml 模板 用任意文本编辑器打开 CMPA 模板,并按照以下步骤操作。 将DEFAULT_BOOT_SOURCE 设置为 FLEXSPI_FLASH_XIP_0b01 将FLEXSPI_AUTO_PROBE设置为ENABLE 保存对 CMPA 模板所做的更改 创建和编写 CMPA 和 CFPA 二进制文件 编辑 cmpa yaml 文件后,您将从 yml 模板生成 CMPA/CFPA 二进制文件。 导入并编辑图像 本节展示如何从 MCUXpresso SDK 的 led_blinky 示例中创建一个 XIP 启动镜像。 从 SDK 中导入 led_blinky 演示程序。点击 “Import SDK example (s)…”(1),然后搜索并选择 FRDM-MCXN947(2),点击 “Next”(3)。在 “SDK 导入向导” 中,搜索并选择 “led_blinky 演示程序”(4),然后点击 “Finish”(5)。 图11 导入 blinky 示例。 导入演示项目后,打开项目属性。在项目名称上右键单击(1),然后点击“属性”选项(2),并打开项目属性(3)。 图 12 项目属性 导航到 “Properties> C/C++ Build > MCU settings” 部分。 图13 MCU设置窗口 确保为外部存储器设置了两个闪存区域:QSPI_FLASH 和 QSPI_FCB,如下图 14 所示。如果缺少这些区域,请按照下一步添加。 图14 链接器中的外部闪存区域。 在 “Memory details” 表格中添加两个分别用于 QSPI_FLASH 和 QSPI_FCB 的闪存区域,然后将它们移到顶部。点击 “Add Flash”(1)两次,然后点击 “Move selected memory up in table”(2),新创建的两个闪存区域应位于表格顶部。 注意:将内存区域移动到“内存详细信息”表的顶部,表示链接器应优先将文本和数据放置在该区域。 使用下表中的信息更新新创建的闪存区域的名称和参数。 类型 名称 别名 位置 大小 驱动器 闪存 QSPI_FLASH 闪存 0x80001000 0xFFFF000 MCXN9xx_SFDP_FlexSPI.cfx 闪存 QSPI_FCB Flash 2 0x80000400 0x400 MCXN9xx_SFDP_FlexSPI.cfx   确保闪存区域的配置与图 15 所示一致。 图15 配置的闪存区域  点击 “Build”(1),编译完成后,应显示 0 错误(2)。 图16 成功编译的图像。 注意:您应该看到 QSPI_FLASH 部分正在被使用,而 PROGRAM_FLASH 部分未被使用。 生成二进制文件。导航到项目的 debug 文件夹,找到生成的 .axf 文件 (1)。然后右键点击 .axf 文件,点击 “Binary utilities> Create Binary”。 图 17 创建二进制文件 7 二进制文件应出现在 debug 文件夹中。右键点击该二进制文件,然后导航到 “Show in> System Explorer”,可以轻松找到二进制文件的位置。 图 18 轻松找到创建的二进制文件 8. 将二进制文件粘贴到您创建 cmpa_bin.bin 的工作区中。此步骤仅用于简化后续显示的命令。 擦除和进入 ISP 模式 ISP(在系统编程)是一种模式,在此模式下,主机能够指示 ROM 引导加载程序对新镜像或 PFR 进行编程。PFR 中包含 CMPA 字段,该字段带有我们从外部闪存进行 XIP(就地执行)的配置。基本上,主机电脑会使用 NXP 的 BLHOST 向 ROM 引导加载程序发送命令,以对 PFR 进行编程。 进入 ISP 模式有两种方式:通过 ISP 引脚进入和通过调试器邮箱进入。通过 ISP 引脚进入需要在复位序列期间保持 ISP 引脚被断言,在复位完成后解除对该引脚的断言。通过调试器邮箱进入则只需使用 SWD 调试器即可使 ROM 进入 ISP 模式。 要通过 ISP 引脚进入 ISP 模式,必须在复位序列期间保持 ISP 引脚被断言,并在复位完成后解除断言。使用调试器邮箱则只需要有一个调试器。 为简单起见,本文使用 USB 通信协议,不过也可以使用 UART 协议。 使用 nxpdebugmbox 擦除闪存并进入 ISP 模式。依次运行以下命令 nxpdebugmbox erase  nxpdebugmbox ispmode -m 0 下图显示了运行上述两条命令时的预期输出。 此操作将擦除内部和外部闪存中的内容,以及 PFR 的内容。重复此操作有助于使芯片从内部闪存启动。 注意:运行 nxpdebugmbox 命令需要使用 SWD-JTAG 调试器。本文示例中使用的是 FRDM-MCXN947 开发板上的板载调试器。 测试 ROM 引导加载程序 运行以下命令以 ping ROM Bootloader,这样我们可以确保设备已正确设置为 ISP 模式。 blhost -t 2000 -p COMxxx,115200 -j -- 获取属性 1 图 19 测试 ROM 引导加载程序 从现在开始,不再严格需要外部调试器。可以通过 UART 或 USB 与 ROM 引导加载程序进行通信。为简单起见,本文其余部分将使用基于 UART 协议的命令。 写入镜像和 PFR 并运行演示程序 下面按照步骤写入镜像。 1. 写入 CMPA 二进制文件。 pfr 写入 -p COMxxx,115200 -t cmpa -f mcxn9xx -b cmpa_bin.bin 2. 写入 CFPA 二进制文件。 pfr 写入 -p COM140,115200 -t cfpa -f mcxn9xx -b cfpa_bin.bin 3. 提供 FlexSPI 闪存配置 blhost -t 2000 -p COMxxx,115200 -- 填充内存 0x20000000 0x04 0xc0000405 4. 配置并填充内存。 blhost -t 2000 -p COMxxx,115200 -- 配置内存 0x09 0x20000000 blhost -t 2000 -p COMxxx,115200 -- 填充内存 0x20003000 0x04 0xf000000f 5 擦除Flash blhost -t 2000 -p COMxxx,115200 -- flash-erase-region 0x80000000 0x100000 6. 配置内存。 blhost -t 2000 -p COMxxx,115200 -- 配置内存 0x09 0x20003000 7. 写入镜像。 blhost -t 2000 -p COMxxx,115200 写入内存 0x80001000 frdmmcxn947_led_blinky.bin 8 重置。 blhost -t 2000 -p COMxxx,115200 重置 你可以使用此命令,也可以直接按下 FRDM 开发板上的复位按钮。 下图显示了每个命令的成功执行。您的FRDM-MCXN947 现在应该已经开始闪烁了。 图20 成功写入图像并重置。 板载复位后,你会发现加载的示例程序开始执行。 再次确认从外部闪存执行 要再次确认镜像正在从外部闪存执行,你可以使用 MCUXpresso 的反汇编视图。 1 将调试器附加到正在运行的目标,并在代码的任意位置设置断点。 图21 将调试器附加到正在运行的目标。 发现调试探针后,点击 “OK”。 暂停处理器执行。使用调试按钮。 图22 停止执行。 复位处理器。使用 “Restart” 按钮。程序应该会在 main 函数的第一行停止。 图23 在main函数处的断点。 找到并打开反汇编视图。点击 “Instruction Stepping Mode” 按钮或搜索反汇编,任一操作都会打开 MCUXpresso 的 “Disassembly” 视图。 图 24 打开 “Disassembly” 视图 处理器必须在 0x8000_0000 地址空间运行。在反汇编视图中,您可以查看指令是从 0x8000_xxxx 范围内的地址执行的,该范围分配给了外部闪存。 图25 从外部闪存中运行代码。 如果您想让设备恢复从内部存储器运行,则需要恢复默认值。如果没有对本文中所示的 CMPA 和 CFPA 区域进行修改,可以执行 nxpdebugmbox 命令。 电路板设计 启动 ROM | 启动配置 | 闪存 时钟|计时器 核心与内存 MCXA MCXN
View full article
HOWTO 使用 FreeRTOS OS Awareness 与 S32Debugger 和 PEMicro 目的 本文件包含关于如何使用S32 Design Studio和S32Debugger探针或PE Micro Debug探针,从操作系统的角度利用FreeRTOS内核感知功能来调试运行在NXP S32系列处理器上的应用程序的信息。 缩略语 缩写 描述 RTOS 实时操作系统 RTD 实时驱动程序 背景信息 FreeRTOS是市场领先的开源RTOS,专为微控制器和小型微处理器设计。它包括一个内核和一个不断扩大的库集合。 在 S32 Design Studio 中,FreeRTOS 内核感知功能使您能够从操作系统的角度调试您的应用程序。 硬件支持 S32 Design Studio中提供的FreeRTOS OS Awareness支持以下硬件: S32Z S32E S32G(Cortex-M7) -S32R45 (Cortex-M7) S32K1 S32K3 (K3xx 和 K396) S32M2 (S32M24x) OS支持 OSEK OS Awareness 支持仅在 Windows 上可用。 OS信息 FreeRTOS下载包包括每个处理器端口的源代码,以及每个示例应用程序。目前,FreeRTOS支持仅限于单核项目。 内核RTOS代码包含在三个文件中,分别命名为tasks.c、queue.c以及list.c。这三个文件位于FreeRTOS/Source目录中。同一目录下还有两个可选文档,分别名为timers.c和croutine.c,它们分别实现了软件定时器和协同例程功能。每个受支持的处理器架构都需要少量针对特定架构的RTOS代码。这是RTOS的可移植层,位于FreeRTOS/Source/Portable/[compiler]/[architecture]子目录中,其中[compiler]和[architecture]分别是用于创建端口的编译器和端口运行的架构。  文档结构 在S32 Design Studio中设置和管理FreeRTOS OS Awareness项目的基本工作流程保持一致,无论使用何种调试探针。“如何在S32 Design Studio和S32Debugger探针中使用FreeRTOS OS Awareness”一节说明通用步骤。对于使用PE Micro调试探针的FreeRTOS OS Awareness项目,仅会强调特定的考虑事项。 如何将FreeRTOS OS Awareness与S32 Design Studio和S32Debugger探针配合使用   前提条件 注意:本 HOWTo 指南描述了在 S32 Design Studio 中使用 FreeRTOS 于 单核 S32G399A Cortex-M7 示例项目的必要步骤。先决条件可能因项目硬件类型而有所不同。 软件环境 在S32 Design Studio工作区中导入的、随FreeRTOS提供的 S32 Design Studio项目或示例项目 S32G 开发包 S32 RTD Autosar 4.4 Version 4.0.0 S32G3 RTD Autosar 4.4 版本 4.0.0 S32G FreeRTOS 10.4.6 版本 4.0 硬件环境 支持的电路板 S32G-PROCEVB-S PCB RevX3 SCH RevB1(子板) S32GRV-PLATEVB PCB RevA SCH RevB(母板) S32G-VNP-RDB3 PCB 53060 RevC SCH RevF 连接 PB_08 正在控制 LED。 Debugger 调试器(S32 Debugger)必须连接到J64 20-pin JTAG Cortex调试连接器。   项目设置 在 Design Studio 中,转到File -> New -> S32DS Project From Example,然后选择由 NXP FreeRTOS 提供的现有单核 S32 Design Studio 示例应用程序,或导入您自己的 S32 Design Studio 项目。 从示例列表中选择所需的项目,然后点击“完成” 生成配置 在运行示例之前,需要生成一个配置。首先进入 S32 Design Studio 的 Project Explorer 视图,然后右键单击当前项目。        选择 “S32配置工具” 菜单,然后点击所需的配置工具(引脚、时钟、外设等)。        点击其中任何一个工具都会生成所有组件。根据需要进行修改(如有),然后点击 “S32配置工具 -> 更新代码” 按钮。 构建项目 在S32 Design Studio工作区中选择项目,然后点击“构建”。点击此按钮将使用预设的构建类型开始构建。  调试配置 点击“调试配置” 根据项目设置调试探针连接。根据硬件设置选择USB或以太网。如果选择USB,S32调试探针的COM端口将自动检测(除非未连接或连接了多个探针)。如果选择以太网,则输入主机名(fsl + MAC地址的后6位数字)或IP地址。请参见 ‘S32_Debug_Probe_User_Guide.pdf’ ({S32DS_installation_directory}/S32DS/tools/S32Debugger/Debugger/Docs/S32_Debug_Probe_User_Guid e.pdf)了解有关 S32 调试探针设置的更多详细信息。  选择FreeRTOS OS Awareness并开始调试 在 OS Awareness 选项卡中,从 OS 下拉列表中选择“FreeRTOS”,然后单击 Debug。 FreeRTOS视图 导航到窗口-> 显示视图 -> 其他…并选择FreeRTOS视图 通过堆使用情况、队列列表、任务列表和定时器列表视图,Design Studio可以显示目标上任务的状态信息。 堆使用情况视图 队列列表视图 队列是任务间通信的主要形式。它们可以用于在任务之间以及中断与任务之间发送消息。在大多数情况下,它们被用作线程安全的 FIFO(先进先出)缓冲区,新数据会被发送到队列的末尾,尽管数据也可以发送到队列的开头。 任务列表视图 使用RTOS的实时应用可以被构建为一组独立的任务。每个任务都在自己的上下文中执行,与系统中的其他任务或RTOS调度器本身没有巧合的依赖关系   定时器列表视图 软件定时器(或简称为“timer”)允许在未来的设定时间执行一个函数。定时器执行的函数被称为定时器的回调函数。定时器从启动到其回调函数执行之间的时间称为定时器的周期。简单地说,当定时器的周期到期时,将执行定时器的回调函数。 请注意,软件定时器必须先显式创建,然后才能使用。 如何将FreeRTOS OS Awareness与S32 Design Studio和PE Micro调试探针配合使用   前提条件 注意:本 HOWTo 指南描述了在 S32 Design Studio 中使用 FreeRTOS 于 单核 S32K396 Cortex-M7 示例项目的必要步骤。先决条件可能因项目硬件类型而异。 软件环境 在S32 Design Studio工作区中导入的、随FreeRTOS提供的S32 Design Studio项目或示例项目 支持S32K396设备的S32 Design Studio 3.5.6开发包:SW32K39x_S32DS_3.5.6_D2309 S32K396 RTD AUTOSAR 4.4版本3.0.0Code Drop 02 适用于 S32K396 的 FreeRTOS 版本 0.8.0 硬件环境 •   支持的电路板 X-S32K396-BGA-DCConnections PB_08控制LED,PTH7控制X-S32K396-BGA-DC板的LED_BLUE,高电平时点亮,低电平时熄灭 •     Debugger 调试器(PE Micro调试器)必须连接到J20 20-pin JTAG Cortex调试连接器   项目设置 转到“文件-> 新建 -> 从示例创建S32DS项目” 从随PE Micro调试探针支持提供的示例列表中选择所需的项目,或导入您自己的S32 Design Studio项目,然后点击完成 生成配置 请参阅“如何将FreeRTOS OS Awareness与S32 Design Studio和S32Debugger探针配合使用”文档中“生成配置”部分所描述的步骤。 构建项目 在S32 Design Studio工作区中选择项目,然后点击“构建”。点击此按钮将使用预设的构建类型开始构建。  调试配置 点击“调试配置”。 选择与当前构建配置关联的调试配置,然后点击“PEmicro调试器”选项卡。请验证接口和端口是否正确,并确认设备是否被正确检测到。 选择FreeRTOS OS Awareness并开始调试 在 OS Awareness 选项卡中,从 OS 下拉列表中选择“FreeRTOS”,然后单击Debug。 FreeRTOS视图 导航到窗口-> 显示视图 -> 其他…并选择FreeRTOS视图 通过堆使用情况、队列列表、任务列表和定时器列表视图,Design Studio可以显示目标上任务的状态信息。 更多详细信息请参阅“如何将FreeRTOS OS Awareness与S32 Design Studio和S32Debugger探针配合使用”中的“FreeRTOS视图”部分 修订记录: 版本号 修订日期 描述 01 2023年11月 创建了关于如何在 S32 Design 中使用 FreeRTOS OS Awareness 的文档 带有PE Micro和S32调试探针的Studio
View full article
S32K142ベースの車載電動Eコンプレッサ・エアコンRDBのリリース   EV/HEV(電気自動車/ハイブリッド車)は非常に大きなトレンドであり、NXPが注力している分野です。Eコンプレッサコントローラは従来の車両と比べて、EV/HEVに特有の重要かつ追加のコンポーネントです。S32K14xは、主流のEコンプレッサ用途に最適な製品です。自動車向けE-コンプレッサ用途でもお客様の開発期間を短縮するため、S32K142-ECCリファレンス・デザイン・ボードを開発しました。実際、S32K142-ECCはEコンプレッサに適しているだけでなく、自動車業界における他の高電圧 PMSM/BLDC用途でも利用可能です。 このRDB(リファレンス・デザイン・ボード)のハードウェアは、NXP S32K142の高性能車載グレードMCUとUJA1075A SBC(システム・べース・チップ)をベースとしており、以下の機能を提供します。 ◼ 最大400Vの高電圧および最大3.7kWのBLDC/PMSMアプリケーションをサポートします。 ◼ SBC、IPM、MCUの電源用に高電圧絶縁型12V電源をサポートします。 ◼ ハードウェアは、シングルシャント、デュアルシャント、トリプルシャントの3種類の電流サンプリングソリューションをサポートします。ソフトウェアはV1.0でデュアルシャントをサポートします。 ◼ UV、OV、OT、OC、ショート、ストール検出などをカバーする複数の診断と保護をサポートします。 ◼ CAN/LIN/FreeMASTERからの速度/制御コマンドをサポートします。 ◼ 安全のために外部ウォッチドッグをサポートします。 RDBハードウェアシステムのブロック図は以下の通りです。 S32K142-ECC RDBのソフトウェアパッケージを使用することで、ユーザーはS32K142ベースの高電圧eコンプレッサーモーター制御性能をすぐに評価し、一般的な高電圧モーター制御ハードウェアプラットフォームとして独自のeコンプレッサーモーター制御製品のプロトタイプを構築することができます。 このソフトウェアパッケージには、以下の機能が含まれます。 ◼ FreeMASTER CAN/UARTによるEコンプレッサ制御をサポート ◼ CAN DBCファイルによるEコンプレッサの速度制御および状態フィードバックをサポート ◼ 低速トルク補償、MTPA、2段階電流アライメント、強化されたATOなどの高度なモータ制御アルゴリズムを実装し、モータの堅牢な始動と高効率を確保 ◼ 豊富なモータ制御診断と保護機能をサポート(OV、UV、OC、OT、ストール、欠相など) ◼ S32DS IDEおよびIAR for ARM IDEプロジェクトを提供し、U-MultilinkとJ-LINKデバッガをサポート 当社には S32K142-ECC RDB が数個在庫されています。プロジェクトがあり、評価用に RDB が必要な場合は、お近くの NXP または NXP販売代理店のFAE、営業およびマーケティング部門にお問い合わせください。 技術的なサポートが必要な場合は、raymond.tang@nxp.comにお問い合わせください。 ありがとうございます。 よろしくお願いいたします。 Raymond Re: S32K142ベースの車載電動Eコンプレッサ・エアコンRDBのリリース S32k142 RDBのFOCモータ制御の例で、CAN0ポートとPTE4およびPTE5を使用し、必要な変更を加えました。参考としてスクリーンショットを添付します。 現在、#define CONTROL_COMMANDをCAN_CONTROLに変更して、コードをデバッグできています。スクリーンショットにあるように、BusMasterで0x371からCANデータを受信しています。ところが、0x370のIDにデータを送信すると、MCUのデバッグ・ウィンドウでデータが受信されません。CAN_RXCompleteフラグにブレーク・ポイントを設定しましたが、フラグのステータスは変わりません。参考として画像を添付します。 CANをデバッグする方法と、この問題に関して何かアドバイスがあれば教えてください。
View full article
开始使用 MCUXpresso for VS Code:Matter on Windows(24.12.71) Visual Studio Code(VS Code)中的Matter支持现已向所有开发者开放。 适用于 VS Code 的 MCUXpresso 扩展(24.12.71 版本)集成了 Matter 工具链,支持在 Windows、macOS 和 Linux 系统上进行开发。 可通过访问 Microsoft 的 VS Code 市场安装该扩展。 以下步骤将帮助你在 Windows 系统上搭建基于 NXP 设备的 Matter 开发环境。 本入门流程约需 1 小时,与通过命令行界面 (CLI) 顺利完成设置的时间相近。 导入 Matter 仓库大约需要 30 分钟(克隆 Matter 仓库;运行引导安装脚本) 为开发板导入首个项目约需 10 分钟(首次为每个开发板下载 SDK 代码库) 然后可以快速导入/构建附加项目。 1. 安装 Pigweed 项目自动化工具 Pigweed 用于更便捷地实现 GN 和 CMake 项目的构建、测试和代码检查自动化。由于 Matter 使用 GN,因此该项目的维护者会用到 Pigweed。请完成以下操作,使 Matter 引导程序能够正确修改 / 安装代码库。 以管理员模式启动终端,确保操作能顺利完成。 确保已启用开发者模式。也可通过以管理员身份运行以下命令来启用: REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion\AppModelUnlock /t REG_DWORD /v AllowDevelopmentWithoutDevLicense /d 1 /f\"" 启用长文件路径。可通过 regedit 或以管理员身份运行以下命令来实现: REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem /v LongPathsEnabled /t REG_DWORD /d 1 /f  启用 Git 符号链接: git config --global core.symlinks true 有关这些设置的更多信息,请访问 Get started with Pigweed - Pigweed 2. 安装 Visual Studio Code (VS Code) Microsoft 允许用户从 https://code.visualstudio.com/download 快速安装 VS Code。通过该链接,用户可选择适合自己操作系统的下载版本。 以下说明适用于 Windows 安装。然而,以下大部分步骤也适用于 Mac 和 Linux 用户。 对于新用户,直接安装 VS Code 和 NXP 扩展会很有帮助。可通过以下两个链接之一进行操作: vscode:extension/NXPSemiconductors.mcuxpresso https://marketplace.visualstudio.com/items?itemName=NXPSemiconductors.mcuxpresso  如果系统上已安装 VS Code,用户将被引导至微软市场中的 NXP MCUXpresso for VS Code 扩展页面;如果系统上未安装 VS Code,将引导用户完成 VS Code 的安装。 至此,笔记本电脑上应已安装好 VS Code 应用程序。 3. 安装适用于 VS Code 的 MCUXpresso 扩展 用户可在 VS Code 内部安装或更新适用于 VS Code 的 MCUXpresso 扩展。以下步骤将介绍具体方法,并附带一段短视频演示这些步骤。 打开 VS Code。从桌面启动程序。 打开扩展市场,点击左侧导航栏中由 4 个方块组成的图标 ,或使用快捷键 Ctrl+Shift+X。 在左上角的扩展搜索框中搜索 “NXP” 或 “Mcuxpresso”。 找到 “MCUXpresso for VS Code” 扩展。点击列表。 在编辑器中打开的扩展概述页面中,点击蓝色的 “安装” 按钮。 当左侧导航栏中显示以下 NXP 图标时,说明扩展已正确安装。 此时,VS Code 应用程序现已包含 NXP MCUXpresso 扩展。 4. 运行 MCUXpresso 安装程序以安装工具依赖项 现在有必要安装其他工具依赖项,以便正确使用 VS Code 进行 MCUXpresso、Zephyr 和/或 Matter。 NXP 提供了 MCUXpresso 安装程序工具,以简化这些工具依赖项的安装过程。以下步骤介绍了如何在 Matter 系统中使用该安装程序,并附带一段短视频演示这些步骤。 点击左上角 “快速启动” 面板下的 “Open MCUXpresso Installer”。 如果安装程序已安装,将直接启动。注意:如果未找到安装程序,用户应点击右下角通知中的蓝色 “Download” 按钮。 从MCUXpresso安装程序的可用工具列表中选择以下内容: Matter 开发者 Arm GNU 工具链 独立工具链附加组件 LinkServer 点击蓝色的 “安装” 按钮,等待安装进度显示完成。 重新启动 VS Code,以便新设置生效 此时,VS Code 应用程序现已包含 NXP MCUXpresso 扩展,笔记本电脑也已具备开始 Matter 安装所需的所有其他工具。 5. 导入 NXP Matter 代码库 The MCUXpresso for VS Code extension simplifies how the user can add Matter to their workspace.  The repository import wizard automates most of the steps required for a user to get started with Matter. The following steps show how to add Matter Repository.  2 short clips are included to show the steps. Click on "Import Repository" found under Quickstart Panel in upper left. Click Repository found in the wizard's Remote tab. Select "NXP Matter".  This automatically targets the NXP/Matter repo found on GitHub. Enter a desired location to clone/store the NXP Matter repository.  Closer to C:/ is better. Select "release/v1.4.0" listed as an available version under Revision: Click Import The import process can take ~30 minutes depending on network bandwidth and IT software. NOTE: This is similar amount of time when using CLI in a terminal.   After the repo is cloned, the Matter Bootstrap script is used to setup matter environment. At this point the user laptop has a valid Matter workspace.  The workspace is now capable of importing and building Matter projects. 6. Import First Matter Project The MCUXpresso for VS Code extension includes an Import Example wizard that simplifies adding Matter projects to a workspace.  The following instructions show how to import a project from the NXP Matter repository.   A short clip is included to show the steps. Click "Import Example from Repository" from the Quickstart Panel in the upper left. Select the Matter Repository from the drop-down options for Repository. Select the desired Toolchain from the drop-down options for Toolchain.  A GNU Toolchain should be available from previous MCUXpresso Installer steps. Select the target board from the drop-down options for Board.  The listed boards are supported in the NXP Matter repo. Select the desired project from the Template drop-down options.  Currently there are "contact-sensor-app" and "lighting-app". Click Create blue button. At this point there is a Matter project in the workspace.  The project can be explored with the provided project properties and file explorer views. 7. Build Matter Project Building the project is the final step for Getting Started with a Matter project in VS Code.  The extension has properly setup the project toolchain and will build successfully.  The NXP extension reduces the setup time by not importing the SDK for all supported boards.  The board SDK is automatically imported/cloned when it is not located on the 1st build for a board.  Successive projects for the same board will not require this additional step/delay. The following steps show how to build a matter project in the workspace.  A short clip is included to show the steps.  Select the Matter project listed under the Projects pane located in the primary left sidebar.  When selected, project control icons are revealed to the left of the project name. Click on the Build icon.   Verify the build was successful by viewing the binary files with File Explorer.  Click the File Explorer icon to the right of project name or in the upper left of the side bar navigation.  The binary is found under the project's \out\debug folder. This exercise on "Getting Started with Matter" is completed.  At this point the Matter project imported to the workspace was successfully built.  FRDM-RW612
View full article
S32G Linux 高速ブートアプリケーションのドキュメント このドキュメントは、Linux のブート時間を最適化する方法を説明します。内容は以下の通りです。 目录 1 默认BSP28 Linux内核的启动时间分析和优化方向 ..... 2 2 UBoot的优化 .............................................................. 3 2.1 缩小Uboot的DTS尺寸 ............................................ 3 2.2 缩小Uboot的尺寸 .................................................... 4 2.3 去掉等待3S输入时间 .............................................. 4 2.4 配合内核修改的Uboot参数 ..................................... 4 2.5 关闭串口调试信息 .................................................. 5 2.6 MMC read的方法来读取内核和DTB ....................... 5 3 Kernal的优化 ............................................................. 5 3.1 DTB中去掉不用的驱动和代码 ................................. 5 3.2 内核中去掉不用的平台与驱动及相关代码 ............... 6 3.3 内核中去掉不用功能,缩小内核大小 ...................... 7 3.4 去掉initramfs支持 ................................................... 7 3.5 关闭调试信息 .......................................................... 7 3.6 提前eMMC驱动加载时间 ........................................ 7 3.7 将Kernel与DTB打包在一起..................................... 8 4 Rootfs+应用程序的优化 ............................................. 8 5 最终全部启动时间比较 ............................................. 12 オートモーティブ Re: S32G Linux 高速ブートアプリケーションドキュメント Hi  この知識を共有していただき、どうもありがとうございます。 第1章で デフォルトの BSP28 Linux カーネルのブート時間分析および 最適化の方向 page2 ストップウォッチの使用を推奨します ストップウォッチを使用して、S32G RDB2+BSP28の起動時間をテストします。テスト方法は以下の通りです。 • ubootはストップウォッチを使用して複数回テストし、平均値を取得します。 ストップウォッチはどこにあるのか、詳しく説明していただけますか。それを何と呼べばいいですか?
View full article
i.MX 8MIC-RPI-MX8ボードを使用して、オーディオを設定し、録音し、再生する方法。 こんにちは、Jorgeです。この投稿では、i.MX 8MIC-RPI-MX8ボードを使用してオーディオを設定、録音、再生する方法を説明します。 要件: I.MX 8M Mini EVK Linux Binary Demo Files - i.MX 8MMini EVK (L5.15.52_2.1.0) i.MX 8MIC-RPI-MX8ボード シリアルコンソールエミュレーター(Tera Term、Puttyなど) ヘッドフォン/スピーカー 8MIC-RPI-MX8アクセサリ・ボードは、I.MX 8M製品ファミリでの音声対応アプリケーションのプロトタイピングと開発用に設計されています。ボードは、i.MX 8M MiniおよびNano EVKの40ピン拡張コネクタに直接差し込みます。 このボードの特長は次のとおりです。 8個のPDMマイクロフォン 8個のモノクロLED 4つのマルチカラーLED 2つのステータスLED 4つのプッシュボタン マイクミュートスイッチ マイクのジオメトリー・スイッチ i.MX 8MIC-RPI-MX8ボードを接続。 i.MX 8MIC-RPI-MX8ボードには、EVKボードに直接接続できる40ピン拡張コネクタがあります。次の図に示されているように、8MIC-RPI-MX8のピン1がEVK J1001のピン1と一致していることを確認してください。 ボード上のデバイス・ツリーを選択。 プリコンパイル済みのイメージをボードにフラッシュし(UUUを使用してLinux BSPをフラッシュ)、8MIC-RPI-MX8を接続した後、8MICボードを処理するための正しいデバイス・ツリーを選択する必要があります。U-bootで、次のコマンドを使用してBSP上の利用可能な.dtbファイルを確認してください。 u-boot=> fatls mmc 2:1 そして、対応する.dbtファイルのリストを取得できます。 このケースでは、I.MX 8M Mini EVKで作業しており、対応.dtbファイルは以下の通りです。 imx8mm-evk-8mic-revE.dtb 選択するには、環境変数を設定し、次のように保存してください。 u-boot=> setenv fdtfile imx8mm-evk-8mic-revE.dtb u-boot=> saveenv 以下の方法で再確認してください。 u-boot=> printenv fdtfile 次に、以下のコマンドを使用してLinuxを起動する時です。 u-boot=> boot i.MX 8MIC-RPI-MX8ボードでオーディオを録音。 Advanced Linux Sound Architecture (ALSA)は、Linuxオペレーティング・システムにオーディオおよびMIDI機能を提供します。ALSAの主な特長は次の通りです。 コンシューマー向けサウンド・カードからプロフェッショナル向けマルチチャンネル・オーディオ・インターフェースまで、あらゆるタイプのオーディオ・インターフェースを効率的にサポートします。 完全にモジュール化されたサウンド・ドライバ。 SMPおよびスレッドセーフ設計。 アプリケーション・プログラミングを簡素化し、より高レベルの機能を提供するユーザー・スペース・ライブラリ (alsa-lib)。 古いOpen Sound System (OSS) APIをサポートし、ほとんどのOSSプログラムにバイナリ互換性を提供します。 Linux上で起動したら、以下を使用してボード上で検出されたオーディオ・コーデックを次のコマンドで確認できます。 arecord -l さて、オーディオを録音するには、IMX8ボードでALSAのarecordコマンドを使用して録音を開始する必要があります。次のリンクで確認できるさまざまなオプションがあります。このケースでは、次のものを使用します。 arecord -D hw:imxaudiomicfil -c8 -f s16_le -r48000 -d10 sample.wav -D:デバイスを選択します。 -c:録音のチャネル数を選択します。 -f: フォーマットを選択します。 -r:サンプリング・レートを選択します。 -d: 録音時間を秒単位で決定します。 sample.wav:生成されるオーディオ・ファイルの名前です。 最後のコマンドを実行し、オーディオの録音を開始しました。音を出して録音する時間です! IMX8ボードからオーディオを再生。 今、ヘッドフォンまたはスピーカーをジャックに接続する時です。 また、arecordコマンドのように、次のコマンドを使用してボードからオーディオを再生できるデバイスを確認することができます。 aplay -l そして、オーディオを再生するためのすべてのコーデックを入手できます。 録音を再生するには、ALSA aplayコマンドを使用する必要があります。ボード上のジャックからオーディオを聞くには、正しいオーディオ・コーデックを選択することが重要です。 aplay -Dplughw:3,0 sample.wav -D:デバイスを選択します。 sample.wav:再生する音声ファイルの名前です PDMマイクを使用してオーディオを録音し、IMX8ボードからオーディオを再生したい方にとって、これが役立つことを願っています。 よろしくお願いいたします。 i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Linux マルチメディア Windows
View full article
S32G_How_to_Put_A53_to_WFI 中国語バージョン S32G的partition off流程要求核稳定的进 入到WFI状态,本文说明如何修改Linux内核, 在A53 Linux关机或kernel panic时,如何让所 有A53 Core进入WFI。 目录 1 背景说明与参考资料 .................................................. 2 1.1 背景说明 ................................................................. 2 1.2 参考资料 ................................................................. 5 1.3 测试工具 ................................................................. 6 2 Panic ......................................................................... 7 2.1 Panic代码流程分析 ................................................. 7 2.2 BSP30修改说明(Non-ATF) ................................... 10 2.3 BSP36修改说明(ATF) .......................................... 15 3 Poweoff ................................................................... 17 3.1 Poweroff代码流程分析 ......................................... 17 3.2 BSP30修改说明(Non-ATF) ................................... 19 3.3 BSP36修改说明(ATF) .......................................... 20 4 Reboot情况说明 ....................................................... 20 5 STR情况说明 ........................................................... 21 目次 1   背景と参考情報 2 1.1  背景 2 1.2  参考資料 5 1.3  テストツール 6 2    パニック 7 2.1  パニックのコードフロー解析 7 2.2  BSP30 Modification (Non-ATF) 10 2.3 BSP36修正(ATF)16 3    電源オフ 18 3.1  電源オフのコード解析 18 3.2  BSP30 Modification (Non-ATF) 20 3.3 BSP36修正(ATF)21 4    再起動の説明 21 5    STRの説明 21 オートモーティブ
View full article
例:RTC DS3.5 RTD300を使用してS32K312スタンバイをウェイクアップする *******************************************************************************  このデモ・アプリケーションは、 POWER & WKUP IPドライバをS32K3xx MCUで使用する方法を示すこと目的としています。 現在の例:-- SW-6 = PTB-19 -----> 「押す」をクリックしてスタンバイ・モードに入ります。 SW-5 = PTB-26 = WKUP[41] --> 「押す」をクリックして、スタンバイ・モードを終了します。 RTC --> Wakeupソース-1 この例ではPIT-0タイマを使用して周期割り込みを生成しています。 T ------------------------------------------------------------------------------ * テスト用ハードウェア:S32K3X2EVB-Q172 * MCU:S32K312 * コンパイラ:S32DS3.5 * SDKリリース:RTD 3.0.0 * デバッガ:PE Micro * ターゲット:internal_FLASH ******************************************************************************** 以下の設定を行い、スタンバイ・モードでSIRCを有効にします:--  
View full article