Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
在 s32_ssram_clear 之前何时可以访问 SSRAM? 您好,先生, 枚举reset_cause {     CAUSE_POR ,     导致运行期间破坏性重置,     待机期间导致破坏性复位,     导致运行过程中功能重置,     待机期间导致功能重置,     导致待机期间唤醒,     CAUSE_ERROR ,     CAUSE_MAX_NUM }; 在 s32_ssram_clear 函数之前可以访问哪个重置原因的 SSRAM? 顺祝商祺! 黄杰夫 回复:在 s32_ssram_clear 之前何时可以访问 SSRAM? 你好@Jeff-CF-Huang , 感谢您的澄清,我确实对这个问题有不同的理解。 要了解 SSRAM 内容的具体保留时间,请检查参考手册的第 28.7 节“复位退出时的芯片状态” [第 1150 页,S32G2 参考手册,修订版 8,2024 年 2 月]: alejandro_e_0-1742578171941.png alejandro_e_1-1742578194839.png alejandro_e_2-1742578226134.png 请参阅参考手册以获取完整信息。 在我之前提到的表格中,您可以看到功能类型的重置: alejandro_e_3-1742579199666.png 关于 SSRAM 的状态,您可以检查35.3.5 平台 RAM 状态寄存器 (PRAMSR)寄存器,以了解它是否已成功初始化,因此可以访问[第 1436 页,S32G2 参考手册,修订版 8,2024 年 2 月]: alejandro_e_4-1742580089939.png 您可以在第 35 章 SRAM 控制器(SRAMC) [第 1427 页,S32G2 参考手册,修订版 8,2024 年 2 月] 的第 35.1.4 初始化节中了解有关如何初始化 SSRAM 的更多信息: alejandro_e_5-1742581457564.png 我的理解是,通过功能重置(这是保留信息的时候),SSRAM 不应该丢失初始化状态,因此您应该能够毫无问题地读取它。请注意,SSRAM 依赖于STANDBY 电源域 (VDD_IO_STBY),因此需要保持电压才能保留 SSRAM 数据。 由于我不知道您使用的是哪个组件,因此我使用 S32G2 RM 作为参考。 请告诉我这些信息是否解决了您的问题。 回复:在 s32_ssram_clear 之前何时可以访问 SSRAM? Hi Alejandro, 看来是有误会的。 s32_ssram_clear函数初始化并清除ATF的BL2中的SSRAM。 如果我们想在 XXX 重启后从 SSRAM 中检索数据,我们需要在调用此函数之前访问 SSRAM。 但是,我们不确定哪种类型的重启可以允许安全读取 SSRAM。 据我们所知,在 POR 场景中,在 s32_ssram_clear 之前读取 SSRAM 会导致系统故障。 此致, 黄杰夫 回复:在 s32_ssram_clear 之前何时可以访问 SSRAM? 你好@Jeff-CF-Huang , 检查参考手册中用于复位的寄存器值(MC_RGM_DES 和 MC_RGM_DES),这些值在函数静态枚举 reset_cause get_reset_cause(void) 中读取[.../arm-trusted-firmware/plat/nxp/s32/s32cc/s32g/s32g_bl2_el3.c][page1139,S32G2参考手册,修订版8,2024年2月](请查看文档中的完整表格以获得更好的参考): alejandro_e_0-1742509028803.png 我找不到任何与 SSRAM 访问直接相关的错误。请提供以下信息以便更好地了解您的设置: 在清除 SSRAM 之前,访问 SSRAM 时是否遇到过问题? 您使用的是 S32G2 还是 S32G3? 您使用的是哪个版本的 BSP? 您使用多核设置吗?这是 M7 和 A53 核心 您使用哪种引导类型?QSPI、SD、eMMC、串行 您使用的是定制板还是 RDB 板? 您是否使用了 BSP 用户手册中指示的 GCC 版本? 提前感谢您的信息。
View full article
在 Linux BSP 中移植 QCA988X 硬件: -i.MX7D-SDB板 - 带 MINI PCIe 接口的 QCA9880 卡 Wifi模块连接到主板上的PCIe插槽。 1.png 软件: -Ubuntu 18.04 LTS 主机 - L4.19.35_1.1.0BSP 工具: - 适用于 Linux 的 uuu 1.2.68(在 ubuntu 主机上运行) 工具链: - 可以从 Yocto BSP 获取工具链。请阅读并按照 i.MX_Yocto_Project_User's_Guide 中的步骤构建 BSP,然后阅读 i.MX_Linux_User's_Guide 中的“如何在独立环境中构建 U-Boot 和内核”章节来构建工具链。 构建内核: # mkdir imx_build #cd imx_build # git 克隆https://source.codeaurora.org/external/imx/linux-imx-b imx_4.19.35_1.1.0 # cd linux-imx #源/opt/fsl-imx-fb/4.19-warrior/imx6/environment-setup-cortexa9hf-neon-poky-linux-gnueabi # 导出 ARCH=arm # 清理 # 制作 imx_v7_defconfig # 制作菜单配置 - 选择 PCIe 驱动程序和 Wifi 支持 2.png - PCI 控制器驱动程序---> DesignWare PCI 核心支持----> 3.png - 网络支持-----> 无线-----> 4.png   - 选择ath10驱动程序(它支持QCA988X) 设备驱动程序----> 网络设备支持-----> 无线局域网----> 5.png - 保存并退出。 - 在.config中添加固件文件: 获取固件文件(例如固件-2.bin)从您的 wifi 供应商处获取或从网上下载。 将固件放在 linux-imx/firmware/ 文件夹中。 编辑 .config文件并添加以下两行: CONFIG_EXTRA_FIRMWARE="board.bin firmware-2.bin" CONFIG_EXTRA_FIRMWARE_DIR="/home/jimmy/imx_build/linux-imx/firmware" - 构建内核 制作 然后会在arch/arm/boot中获取zImage。 使用 uuu 对 SD 卡进行编程: - 从 nxp 网站下载 L4.19.35_1.10 的演示图像。 - 将 zImage 复制到目录 - 将 uuu (V1.2.68) 复制到目录 - 将samples/example_kernel_emmc.uuu复制到imx7d_kernel_emmc.uuu - 修改图像imx7d_kernel_emmc.uuu - 在演示图像中,您将看到如下文件: 6.png - 运行 uuu 和脚本来对图像进行编程。 Wifi 驱动程序已加载并且 wlan0 已启动: # dmesg | grep pci 7.png # ifconfig -a 8.png Reference Document: - i.MX_Linux_User's_Guide.pdf - i.MX_Porting_Guide.pdf
View full article
示例 S32K144 WDOG RCM 中断 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ******************************************************************************************************** 详细描述: 当 WDOG 超时时,WDOG 模块会在复位控制模块 (RCM) 中请求复位。 如果启用 WDOG 中断(WDOG_CS[INT] = 1),则对 RCM 的复位请求可能会延迟 128 个总线时钟周期。 如果启用,则会获取 WDOG 中断向量,或者它在 NVIC 中变为待处理状态。 延迟之后,RCM 中请求复位。 独立于 WDOG 中断,RCM 可以再次将复位延迟最多 514 个 LPO 额外时钟周期 是否启用相应的 RCM_WDOG 中断(RCM_SRIE[GIE, WDOG] = 1)。 如果是,模块不会立即强制复位,而是在 NVIC 中请求 RCM 中断 并在额外的延迟(RCM_SRIE[DELAY])后强制复位。 无论哪种方式,重置都是强制的,无法停止,只能延迟。 此示例在 WDOG_CS 寄存器中启用 WDOG 中断,但在 NVIC 中禁用此中断。 这意味着该中断在 WDOG 超时时在 NVIC 中处于待处理状态,它设置了 WDOG_CS_FLG, 但矢量没有被获取。 RCM 中断已启用,并在 WDOG 中断延迟(2.67us(48MHz BUS CLK))后在 NVIC 中被断言。 而是在 RCM ISR 中读取 WDOG 标志 (WDOG_CS_FLG)。 执行保持无限循环 514 个 LPO(128kHz)周期(~4ms),直到强制重置。 ----------------------------------------------------------------------------------------------------------------------------------------- 测试硬件:S32K144EVB-Q100 单片机:S32K144 0N57U 调试器:S32DSR1 OpenSDA 目标:internal_FLASH ********************************************************************************************************
View full article
RD56F8300LCSM:采用恩智浦DSC的低成本软调制解调器参考设计 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Overview 特性 结构框图 电路板 设计资源 Overview 该参考设计展示了软调制解调器设计的简单性、它占用的处理器资源的少以及它在美国平均线路上的良好性能。该设计省略了标准电信Codec,而是采用PWM作为输出,ADC作为输入。 由于这两种外设都可以在一个56F8300/100系列器件上使用,并且具有比单核更高的处理能力,所以该设计是一个真正的单芯片、单核系统,具有电信功能,可以提供更多的系统功能。 非常适合高级运动控制、家用电器、医疗监控、消防和安全系统、电源管理、智能继电器和 POS 终端。 特性 混合架构有利于实现 V.21 和 V.22bis 调制解调器、控制和信号处理功能集成在一个芯片中 仅消耗 调制解调器功能运行速度为 7.5 MIPS - 完整的调制解调器应用程序和测试工具仅包含 15K 字的 Flash 高性能、安全的闪存消除了对外部存储设备的需求 扩展的温度范围允许非易失性存储器在恶劣环境下运行 EEPROM 的闪存仿真消除了对外部非易失性存储器的需求 具有16位代码密度的32位性能 片上稳压器和电源管理降低了整体系统成本 片外存储器扩展功能允许与外部设备的额外存储器进行无缝连接,而不会降低性能 直接从闪存引导,提供额外的应用灵活性 具有可编程故障功能的高性能PWM简化了设计并促进了安全法规的合规性 PWM和ADC模块紧密耦合以减少处理开销; 每个调制解调器仅使用其中的一个模块 通用输入/输出(GPIO)引脚支持特定应用的需求 通过增强型OnCE或串行通信简化应用中的闪存编程 结构框图 电路板 设计资源 传统设计 回复:RD56F8300LCSM:采用 NXP DSC 的低成本软调制解调器参考设计 在线购买管道材料时,必须验证规格以确保其满足您的项目需求。查找详细的产品描述,包括尺寸、材料和温度等级。
View full article
心率监测仪 描述 结构框图 产品 相关文档 相关软件 来自社区的相关演示 描述 该心率监测器基于 NXP 的 KW41Z,这是一款支持超低功耗 BLE 的 MCU,提供获取、处理和发送从模拟传感器获得的数据的所有功能。NXP 还提供电池充电器 IC、RTC 和 LED 控制器,以提供完整的心率监测解决方案。 框图 产品 类别名称1: MCU 产品网址 1 https://www.nxp.com/products/wireless/thread/kinetis-kw41z-2.4-ghz-dual-mode-bluetooth-low-energy-and-802.15.4-wireless-radio-microcontroller-mcu-based-on-arm-cortex-m0-plus-core:KW41Z 产品描述 1 KW41Z 是一款超低功耗、高集成度的单芯片器件,支持蓝牙®低功耗连接。KW41 还配备一个用于数据采集的 16 位 ADC 和一个 6 位高速模拟比较器。如有需要,KW41Z 还可配备AES-128 加速器 (AESA) 和真随机数发生器 (TRNG),用于保障终端节点安全。 类别名称2: 电池充电器 产品网址 1 https://www.nxp.com/products/power-management/battery-management/battery-chargers/1.2-a-single-cell-li-ion-li-polymer-battery-charger:MC34673 产品描述 1 MC34673 是一款经济高效的全集成锂离子或锂聚合物电池充电器。它可承受高达 28 V 的输入电压,从而无需手持设备所需的输入过压保护电路。 类别名称 3: 实时时钟/日历 产品网址 1 https://www.nxp.com/products/peripherals-and-logic/signal-chain/real-time-clocks/rtcs-with-spi/spi-real-time-clock-calendar:PCF2123 产品描述 1 PCF2123是一款CMOS实时时钟(RTC)和日历,最适合低功耗应用。 通过串行外设接口(SPI-bus)以6.25 Mbit/s的最大数据速率串行传送数据。 类别名称 4: GPIO扩展器 产品网址 1 https://www.nxp.com/products/interfaces/ic-spi-serial-interface-devices/ic-general-purpose-io/low-volt-translating-8-bit-ic-bus-smbus-io-expander:PCAL6408A 产品描述 1 当需要额外的 I/O 同时保持最低限度的互连时,NXP ® I/O 扩展器提供了一个简单的解决方案。PCAL6408A 通过 I²C 总线接口为大多数微控制器系列提供远程 I/O 扩展。 类别名称5: LED驱动器 产品网址 1 https://www.nxp.com/products/power-management/lighting-driver-and-controller-ics/ic-led-controllers/4-bit-fm-plus-ic-bus-led-driver:PCA9633 产品描述 1 PCA9633是全新快速模式Plus (Fm+)系列的首批LED控制器器件之一。 Fm+器件提供更高的频率(最高1MHz)和更密集的总线操作(最高4000pF)。 相关文档 Document URL 主题 https://www.nxp.com/docs/en/application-note/AN10441.pdf I2C总线设计中的电平转换技术 https://www.nxp.com/docs/en/application-note/AN11247.pdf 使用外部温度传感器,PCF85063、PCF8523 和 PCF2123 可提高计时精度 https://www.nxp.com/docs/en/application-note/AN5377.pdf MKW41Z/31Z/21Z BLE 和 IEEE 802.15.4 设备的硬件设计考虑因素 https://www.nxp.com/docs/en/application-note/AN12059.pdf FRDM-KW41Z 低功耗蓝牙 (BLE) 应用射频系统评估报告   相关软件 相关软件网址 Kinetis 微控制器 MCUXpresso SDK    来自社区的相关演示 相关演示网址 https://community.nxp.com/docs/DOC-340031 https://community.nxp.com/docs/DOC-334895 https://community.nxp.com/docs/DOC-334892 https://community.nxp.com/docs/DOC-331647 https://community.nxp.com/docs/DOC-101403 框图 工业控制
View full article
Homebrew RF 设计挑战赛获胜者 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 描述 第一名 第二名 第三名 结束语 描述 今年早些时候,恩智浦为业余无线电爱好者组织了一次促销机会,让他们发挥创造力,构建自己的功率放大器设计。 NXP 在这次竞争激烈的 Homebrew RF 设计挑战赛中收到了大量富有创意的作品。我们感谢社区的奉献和热情,使这次比赛取得了成功。 第一名 MRF101AN 宽带放大器设计,具有 1 W 输入、100 W 输出 1.8-54 MHZ 放大器平台。(更多信息请访问: NXP MRF-101 - RFPowerTools ) 该放大器带宽为1.8MHz至54MHz。最大输出功率在30MHz时为100W,在50MHz时为70W。 最大电源50V至4A,电压驻波比最大为1.5:1。 PCB 的设计尺寸为 5x5 厘米(2x2 英寸)。包括风扇和散热器在内重量为310克。 第二名 采用经济实惠的 LDMOS 器件的 600W 宽带 HF 放大器(更多信息请访问: https ://qrpblog.com/2019/10/a-600w-broadband-hf-amplifier-using-affordable-ldmos-devices/) 该项目旨在展示 MRF300 晶体管作为 2-50MHz 范围内的线性宽带设备的能力,并供无线电爱好者用作中高功率放大器的起点。这也是我参加 2019 年 NXP Homebrew RF 设计挑战赛的作品。 为了实现 600W 输出的目标,同时最大限度地降低偶次谐波的水平,使用了两个晶体管的“推挽”配置。幸运的是,制造商提供了两个具有镜像引脚排列的版本(MRF300AN 和 MRF300BN),从而可以轻松设计此类产品的 PCB 布局。采用常见的TO-247封装,源极接极耳。 每个 MRF300 LDMOS 晶体管的额定输出功率为 330W,工作频率范围为 1.8-250MHz,最大增益为 28dB,效率超过 70%。建议的电源范围是 30-50Vdc。通过研究规格,看起来通过正确的宽带匹配和一些操作安全裕度,我们可以在相当大的带宽上以大约 45V 的电压获得接近 600W 的输出;目标是覆盖 1.8 至 54MHz。 设计该放大器时的主要挑战是在整个频率范围内实现良好的输入和输出匹配以及保持高而平坦的增益。良好的线性度和低水平的谐波产物是必需的。由于 TO-247 不是专门为高功率射频设计的封装,因此在热设计和 PCB 布局方面也存在一些挑战。 信息取自获奖者的文章。 第三名 用于立方体卫星等离子推进器的高效开关模式射频放大器,采用 MRF101AN LDMOS 器件(更多信息请访问:研究 - SuperLab@Stanford ) E 类放大器利用有源器件作为开关,仅在截止(关闭)和饱和(打开)条件下工作。这最大限度地减少了电压和电流的重叠,减少了有源器件的损耗。为了进一步减少损耗,E 类放大器利用电感调谐谐振网络实现零电压开关,在开启之前将开关两端的电压降至零,从而消除有源器件输出电容中存储的否则会耗散的能量。这是通过电感调谐串联谐振输出滤波器实现的。 在 E 类放大器中,损耗几乎完全由有源器件传导的电流决定,因此需要较高的漏极阻抗来最大限度提高效率。漏极阻抗最终受开关额定电压的限制。对于我们期望的 40W 输出功率和 MRF101AN 的最大额定电压 133V,该阻抗仍然小于 50 欧姆,因此使用 L 匹配电路将漏极阻抗匹配至 50 欧姆。我们设计中的负载网络提供了15.4+12.8j的漏极阻抗。 由于 MRF101AN 将在饱和状态下运行,因此需要较高的驱动水平。为了消除对前置放大器的需求并允许数字控制,我们使用开关模式电源中通常使用的高速栅极驱动芯片 LMG1020 来驱动 MRF101AN,而不是 RF 前置放大器。谐振网络用于提供基波和三次谐波的电压增益,在栅极上提供准方波,有助于确保器件保持饱和状态。 结束语 这是一场惊险刺激且竞争非常激烈的比赛!每位参与者都以自己富有创意、独特且令人印象深刻的方式展示这些新部件的功能。 NXP 始终致力于迎接新的设计挑战。 准备好迎接下一个挑战了吗? 汽车电子 工业控制 移动设备 回复:自制射频设计挑战赛获胜者 展示设备实际用户的应用程序是一个非常好的主意。
View full article
i.MX7ULP 寄存器编程辅助工具 重要提示:如果您有任何疑问或想要报告有关 DDR 工具或支持文档的任何问题,请在i.MX 社区中创建支持工单。请注意,任何私人消息或直接邮件不会被监控,也不会收到回复。 这些是与 DRAM 初始化(LPDDR3 和 LPDDR2)相关的寄存器的详细编程辅助。该工具中的最后一个工作表选项卡格式化了寄存器设置,以便与 ARM DS5 调试器一起使用。它还可以与 DDR 压力测试的 Windows 可执行文件一起使用(请注意,此选项卡中调试器特定命令的删除)。这些编程辅助工具是为内部 NXP 验证板开发的。   此工具可作为辅助工具,协助对 i.MX 7ULP 的 DDR 接口进行编程,并且基于为 NXP 板开发的 DDR 初始化脚本,此工具不提供任何保证。   以下是关于此工具的一些一般说明: 该工具的默认配置为启用银行交错存取功能。 参考工具中的"如何使用"标签页作为使用此工具的起点。 该工具可配置为 i.MX 7ULP 支持的两种内存类型之一。尽管如此,根据 DRAM 类型提供了两种单独的编程辅助:LPDDR3 和 LPDDR2。因此,您可以使用预先配置为您所需内存类型的工具作为起点。 在 DRAM 初始化脚本开头部分的一些 CCM 编程内容(位于 “DStream .ds” 文件中的“file” 标签处)是自动生成的,在极少数情况下可能会涉及写入保留位,不过,这些写入操作会被直接忽略。 请注意,在"DStream .ds 文件"标签页中有 DS5 调试器特定的命令,当将 DRAM 初始化用于非调试器特定应用(如移植到引导加载程序)时,应注释掉或删除这些命令。 本工具可能会根据需要进行更新,以修复漏洞或进行未来的改进。上述维护工作没有安排时间表。 如有疑问或需要额外协助使用此工具,请联系您当地的销售代表或现场应用工程师(FAE)。 i.MX7ULP
View full article
NXP Technology Days - トロント - 2018年9月26日 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> オートモーティブ 車両ダイナミクスと安全性(VDS)のための自動車安全およびHEV製品  i.MX 8/8X Overview  S32Kポートフォリオのアップデート  S32レーダープロセッサ、製品革命  自律システムを理解する  人工知能、イネーブリングテクノロジー、セキュリティ&ソリューション 低コストのエッジコンピューティングノードにおける機械学習(ML)と人工知能(AI)のビジョン  ハンズオン・ワークショップ: MCUXpresso IDE による高度なデバッグ  ハンズオン・ワークショップ:クロスオーバーMCUメモリ拡張の利点:Execute in Placeシリアル・フラッシュを使用した設計   i.MX RT Execute in Place シリアル フラッシュ ラボ Guide.pdf  ハンズオンワークショップ:Arm® Mbed™ OSおよびNXPプラットフォームを使用したマネージドIoTデプロイメントの開発  ハンズオンワークショップ:MCUXpressoソフトウェアとツールで迅速に立ち上げて実行する方法を学ぶ  AMF-ENT-T3024 - ラボ 2 - MCUXpresso.pdf 入門  ハンズオン ワークショップ: 設計内での MCUXpresso SDK サンプルの活用  AMF-ENT-T3025 - SDK サンプル - Labs 1-5.pdf  ハンズオンワークショップ: MCUXpresso ソフトウェアとツールを使用した FreeRTOS アプリケーションの最適化とチューニング  FreeRTOS の最適化ラボガイド  ハンズオンワークショップ:Amazon Web Services(AWS)でのMCUXpressoソフトウェアとツールの使用  AMF-ENT-T3026 - AWS Shadow - Labs 1-2.pdf  AMF-ENT-T3026 - AWS Greengrass - Labs 3-4.pdf  OpenWRT、Yocto、Ubuntu、または独自のカスタムLinux®ディストリビューションを使用していますか?NXPがソフトウェア開発へのマルチディストリビューションアプローチの活用をどのように容易にしているかをご覧ください  スマートマシナリー&インダストリアルオートメーション A71CH IoTセキュリティのためのプラグ&トラストソリューション  産業およびヘルスケアにおけるNFC-想像以上に多くのユースケース  接続されたデバイスの保護 - 脅威はどこにあり、NXPはどのようなソリューションを提供しますか?  TSN(Time Sensitive Networking)とPTP(Precision Time Protocol):課題、機会、解決策  Smarter World Solutions & Multimode Connectivity Amazon Alexa音声サービス  ハンズオンワークショップ:クラウド接続されたエンドノードを開発するためのLPC54018ベースのIoTモジュール入門  AMF-SMC-T3148 - AWS Shadow - ラボ 1-2 ハンズオンワークショップ:i.MX RTの概要とトレーニング  i.MX 8M - 高性能、スマートデザイン、高度なマルチメディアを実現する次世代アプリケーションプロセッサ  NXPワイヤレス充電のご紹介  IoTセンサーアプリケーション—産業用および車載用ユースケース  民生、医療、産業用IoT、および自動車市場向けのNXP BLE低電力ソリューション  スマートホーム、スマートビルディング、照明向けのNXPコネクティビティソリューション  ラピッドIoTプロトタイピングキット
View full article
RT1060 OTA 引导加载程序的 ISP 及交换回滚用法 1 简介 RT1060 MCUXpresso SDK 提供 ota_bootloader 项目,下载链接: https://mcuxpresso.nxp.com/en/welcome ota_bootloader路径: SDK_2_10_0_EVK-MIMXRT1060\boards\evkmimxrt1060\bootloader_examples\ota_bootloader  该 ota_bootloader 可让用户实现板载应用程序更新,RT1060 OTA 引导加载程序主要有两大功能: ISP方法更新APP 提供 API 供用户实现不同应用程序的交换、回滚功能 ISP 方式基于 flashloader 实现,flashloader 会将代码加载到内部 RAM 中。使用时,RT 芯片通常需要进入串行下载模式,并通过 sdphost 将 flashloader 下载到内部 RAM,然后运行 flashloader 以实现 ISP 功能。而 OTA_bootloader 直接将代码存储在闪存中,RT 芯片可在内部引导模式下直接运行该引导程序。芯片每次复位后,代码会先运行 ota_bootloader,此时用户可通过 blhost 直接与 RT 芯片进行 UART/USB HID 通信来下载应用程序代码。因此,对于 OTA_bootloader 中的 ISP 功能,用户也可将其用作 ISP 二级引导加载程序来直接更新应用程序。在 5 秒超时后复位,如果应用程序区域有效,代码会跳转到应用程序并运行。 对于 ota_bootloader 的交换和回滚功能,用户可在应用程序中直接使用提供的 API 来实现应用程序更新、运行不同应用程序、交换应用程序以及回滚到旧应用程序等操作。   本文档将详细介绍如何使用 ota_bootloader 的 ISP 功能更新应用程序、如何修改用户应用程序以适配 ota_bootloader、如何解决用户应用程序与 ota_bootloader 配合使用 SDRAM 时出现的问题、如何使用 ota_bootloader 的 API 实现交换和回滚功能以及相关的应用程序准备工作。 2 OTA 引导加载程序的 ISP 用法 部分用户需要 ISP 二级引导加载程序功能,由于 flashloader 需要加载到内部 RAM 中,因此用户可利用 ota_bootloader 的 ISP 功能来满足二级引导加载程序的需求。采用这种方式,用户主要需要注意两点: 1)APP需要添加ota_header以满足ota_bootloader的需求。 2)APP使用SDRAM,ota_bootloader需要添加DCD内存 2.1 应用程序修改 OTA_bootloader 位于闪存的 0x60000000 地址处,应用程序位于 0x60040000 地址处。这一点可在 ota_bootloader 的 bootloader_config.h 文件中找到: #define BL_APP_VECTOR_TABLE_ADDRESS (0x60040000u) 从 0x60040000 地址开始,前 0X400 字节应存放 ota_header,实际的应用程序代码从 0x60040400 地址开始存放。 现在以SDK中的evkmimxrt1060_iled_blinky项目为例,进行修改,使其与ota_bootloader相匹配。 应用程序代码需要添加以下文件: ota_bootloader_hdr.c, ota_bootloader_board.h, ota_bootloader_supp.c, ota_bootloader_supp.h 这些文件可从 evkmimxrt1060_lwip_httpssrv_ota 项目中获取,将上述文件放入 led_blinky 的源文件夹中。 2.1.1 内存修改 应用程序内存起始地址从 0x60000000 修改为 0x60040000,这是 ota_bootloader 定义的地址。 1.jpg 图1 2.1.2 添加 ota_hdr 相关文件  在 led_blinky 项目的源文件夹中,添加上述提到的与 ota_bootloader 相关的文件。 2.jpg 图2 2.1.3 linker file modification 在 evkmimxrt1060_iled_blinky_debug.ld 中,添加 boot_hdr,长度为 0X400。 我们可以使用 MCUXpresso IDE 的 linkscripts 文件夹,添加 .ldt 文件来修改链接文件。 在项目中,添加一个 linkscripts 文件夹,添加 boot_hdr_MIMXRT1060.ldt 文件,然后进行构建。 3.jpg 图3 构建完成后,可以发现 ld 文件已在开头的 0x400 范围内添加了 ota_header。 4.jpg 图4 以上是生成的 evkmimxrt1060_iled_blinky_ota_0x60040000.bin 文件,可以发现其中已包含 boot_hdr。 从偏移地址 0x400 开始,将放置实际的 APP 代码。 2.2 ISP 测试相关命令 测试板是MIMXRT1060-EVK,首先下载evkmimxrt1060_ota_bootloader项目,可以使用MCUXpresso IDE直接下载,然后按下重置按钮,将blhost和evkmimxrt1060_iled_blinky_ota_0x60040000.bin放在同一文件夹中,使用以下命令: blhost.exe -t 50000 -u 0x15a2,0x0073 -j -- get-property 1 0 blhost.exe -t 2048000 -u 0x15a2,0x0073 -j -- flash-erase-region 0x60040000 0x6000 9 blhost.exe -t 5242000 -u 0x15a2,0x0073 -j -- write-memory 0x60040000 evkmimxrt1060_iled_blinky_ota_0x60040000.bin blhost.exe -t 5242000 -u 0x15a2,0x0073 -j -- read-memory 0x60040000 0x6000 flexspiNorCfg.dat 9 5.jpg 图5 下载完成后,按下复位键,等待 5 秒,会跳转到应用程序,此时可以发现 MIMXRT1060-EVK 板上的 LED 在闪烁。这种方法实现了闪存 ISP 引导加载程序的下载和应用程序的运行。 上述命令使用 USB HID 进行下载,若需要使用 UART,也可使用如下命令: blhost.exe -t 50000 -p COM45,19200 -j -- get-property 1 0 blhost.exe -t 50000 -p COM45,19200 -j -- flash-erase-region 0x60040000 0x6000 9 blhost.exe -t 50000 -p COM45,19200 -j -- write-memory 0x60040000 evkmimxrt1060_iled_blinky_ota_0x60040000.bin blhost.exe -t 50000 -p COM45,19200 -j -- read-memory 0x60040000 0x6000 flexspiNorCfg.dat 9 对于UART通信,由于ota_bootloader存在自动波特率检测问题,建议使用波特率不超过19200bps,或者在ota_bootloader代码中定义固定波特率,例如115200。 2.3 引导加载程序 DCD 注意事项 一些用户将 ota_bootloader 与其自己的应用程序配合使用,该应用程序使用外部 SDRAM,他们发现虽然下载成功,但引导后应用程序无法正常运行。在应用程序代码中,虽然添加了 DCD 配置,但由于 ota_bootloader 已经位于 QSPI 的前面,应用程序会使用 ota_hdr,这会删除 dcd 部分,因此,在这种情况下,用户可以在 ota_bootloader 中添加 dcd。SDK 的 ota_bootloader 在默认情况下没有添加 dcd 部分。 现在,首先修改 ota_bootloader,然后准备 sdram 应用程序并进行测试。 2.3.1 Ota_bootloader add dcd 2.3.1.1 添加 dcd 文件 ota_bootloader 添加 dcd.c 和 dcd.h 这两个文件,可从 SDK 的 hello_world 项目中找到。将这两个文件复制到 ota_bootloader 的 board 文件夹中。从 dcd.c 代码中可以看到,dcd_data [] 数组存放在 “.boot_hdr.dcd_data” 区域,并且需要定义预处理器: XIP_BOOT_HEADER_DCD_ENABLE=1 2.3.1.2 添加 dcd 链接器代码 修改 MCUXpresso IDE 的 ld 文件,并添加 dcd 范围。    .ivt : AT(ivt_begin) { . = 0x0000 ; KEEP(* (.boot_hdr.ivt)) /* ivt section */ . = 0x0020 ; KEEP(* (.boot_hdr.boot_data)) /* boot section */ . = 0x0030 ; KEEP(*(.boot_hdr.dcd_data)) __boot_hdr_end__ = ABSOLUTE(.) ; . = 0x1000 ; } > m_ivt 6.jpg 图6 0x60001000 : IVT 0x6000100c:DCD入口点 0x60001020:引导数据 0x60001030:DCD详细数据 2.3.1.3 添加 IVT dcd 入口点  ota_bootloader->MIMXRT1062 文件夹 ->hardware_init_MIMXRT1062.c,修改 image_vector_table,将 DCD 地址填充到 dcdc_data 数组地址作为 dcd 入口点。 7.jpg 图7 至此,完成了 ota_bootloader 的 dcd 添加,构建项目,生成镜像,可以发现 DCD 已添加到 ota_bootloader 镜像中。 8.jpg 图8 DCD 入口点在 IVT 中正确,且 DCD 数据正确,我们可以将修改后的 ota_bootloader 烧录到 MIMXRT1060-EVK 开发板上。 2.3.2 准备 SDRAM 应用程序 仍以 evkmimxrt1060_iled_blinky 项目为基础,只需将一些函数放入 SDRAM 中。从内存中可以发现,SRAM 在 RAM4 中: 9.jpg 图9 在 led_blinky.c 中,添加以下头文件: #include 然后,将 systick 延迟代码放入 RAM4,也就是 SDRAM 区域。 __RAMFUNC(RAM4) void SysTick_DelayTicks(uint32_t n) { g_systickCounter = n; while (g_systickCounter != 0U) { } } 现在,我们已经完成了简单的 SDRAM 应用程序,也可以对其进行测试,并在 SysTick_DelayTicks 中设置断点,可以发现地址也是与 SDRAM 相关的地址,生成 evkmimxrt1060_iled_blinky1_SDRAM_0x60040000.bin。 如果使用旧的 ota_bootloader 下载此 .bin 文件,可以发现 LED 没有闪烁。 2.3.3 测试结果 参考 2.2 节 ISP 测试相关命令,使用新修改的 ota_bootloader 项目下载 evkmimxrt1060_iled_blinky1_SDRAM_0x60040000.bin,可以发现复位后 LED 会闪烁。因此,SDRAM 应用程序与修改后的 ota_bootloader 能够正常工作。 3 OTA 引导加载程序的交换和回滚 OTA 引导加载程序可以实现交换和回滚功能,本部分将测试 ota_bootloader 的交换和回滚,准备两个应用程序并下载到不同的分区区域,然后使用 UART 输入字符来选择交换或回滚功能,以查看当前运行的是哪个应用程序。 3.1 内存映射 ota 引导加载程序的内存信息。 10.jpg 图10 以上映射基于外部 8Mbyte QSPI 闪存。 OTA引导加载程序:RT SDK ota引导加载程序代码 Boot meta 0:包含 3 个分区的起始地址、大小等信息,ISP 外设信息。 Boot meta 1:包含3个分区的起始地址、大小等信息,以及ISP外设信息。 Swap meta 0:引导加载程序将使用元数据执行交换操作 Swap meta 1:引导加载程序将使用元数据执行交换操作 分区 1:APP1 位置 Partition 2:APP2 所在位置 Scratch part:APP1 的备份位置,起始点在 0x60441000 之前,足以存放 APP1 和多个扇区大小,例如,APP1 为 0X5410,扇区大小为 0x1000,APP1 需要 6 个扇区,因此临时区域的起始地址为 0x60441000-0x6000=0x43b000。 用户数据:用户使用的数据区域 3.2 交换和回滚基础 11.jpg 图11 位于 partition1 和 partition2 中的 APP1 和 APP2 需要包含满足引导加载程序要求的 ota_header,引导加载程序会检查应用程序的 CRC,如果检查通过,则会引导该应用程序,否则,会进入 ISP 模式。Partition2 镜像需要有有效的头部,否则,交换将会失败。 交换功能会擦除 partition2 的临时区域,然后将 partition1 的代码放入临时区域,擦除 partition1 的位置,并将 partition2 的镜像写入 partition1 的位置。 回滚功能会运行之前的 APP1,擦除 partition2 的位置,将 partition1 的镜像复制回 partition2,擦除 partition1 的位置,将 partition2 临时区域的镜像复制回 partition1。 3.2.1 启动元数据 boot_meta 0: 0x0x6003c000 size: 0x20c boot_meta 1: 0x0x6003d000 size: 0x20c   OTA 引导加载程序可以从两个不同的地址读取引导元数据,当两个地址的元数据都有效(标签为 'B'、'L'、'M'、'T')时,引导加载程序会选择版本号较大的元数据。如果两个元数据都无效,引导加载程序会将默认的引导元数据复制到 boot meta 0 地址。   引导元数据包含 3 个分区的起始地址、大小等信息,以及 ISP 外设信息。SDK 演示程序可以调用引导加载程序 API 来获取分区信息,然后进行镜像编程。 Boot meta 还包含 ISP 外设信息、超时(5秒)信息,结构为: //!@brief Partition information table definitions typedef struct { uint32_t start; //!< Start address of the partition uint32_t size; //!< Size of the partition uint32_t image_state; //!< Active/ReadyForTest/UnderTest uint32_t attribute; //!< Partition Attribute - Defined for futher use uint32_t reserved[12]; //!< Reserved for future use } partition_t; //!@brief Bootloader meta data structure typedef struct { struct { uint32_t wdTimeout; uint32_t periphDetectTimeout; uint32_t enabledPeripherals; uint32_t reserved[12]; } features; partition_t partition[kPartition_Max];//16*4*7 bytes uint32_t meta_version; uint32_t patition_entries; uint32_t reserved0; uint32_t tag; } bootloader_meta_t; 3.2.2 swap meta 交换元数据 0:0x6003e000,大小 0x50 交换元数据 1:0x6003f000,大小 0x50   OTA 引导加载程序会从两个不同的位置读取交换元数据,如果无效,引导加载程序会将默认数据设置到 swap meta 0(0x6003e000)。如果两个镜像都有效,引导加载程序会选择版本号较大的元数据。 引导加载程序会参考元数据执行交换操作,有时复位后,元数据会自动修改。这主要取决于 swap_type: kSwapType_ReadyForTest:复位后,执行交换操作。 将 meta swap_type 修改为 kSwapType_Test。 复位后,由于元数据为 kSwapType_Test,引导加载程序可执行回滚操作。 kSwapType_Test:重置后,执行回滚 操作完成后,swap_type 更改为 kSwapType_None。 kSwapType_Rollback 引导加载程序会将 kSwapType_Test 写入元数据,复位后,引导加载程序会参考 kSwapType_Test 执行操作。 kSwapType_Permanent 重置后,将元数据修改为kSwapType_Permanent,然后APP将从分区1启动。 交换结构: //!@brief Swap progress definitions typedef struct { uint32_t swap_offset; //!< Current swap offset uint32_t scratch_size; //!< The scratch area size during current swapping uint32_t swap_status; // 1 : A -> B scratch, 2 : B -> A uint32_t remaining_size; //!< Remaining size to be swapped } swap_progress_t; typedef struct { uint32_t size; uint32_t active_flag; } image_info_t; //!@brief Swap meta information, used for the swapping operation typedef struct { image_info_t image_info[2]; //!< Image info table #if !defined(BL_FEATURE_HARDWARE_SWAP_SUPPORTED) || (BL_FEATURE_HARDWARE_SWAP_SUPPORTED == 0) swap_progress_t swap_progress; //!< Swap progress #endif uint32_t swap_type; //!< Swap type uint32_t copy_status; //!< Copy status uint32_t confirm_info; //!< Confirm Information uint32_t meta_version; //!< Meta version uint32_t reserved[7]; //!< Reserved for future use uint32_t tag; } swap_meta_t; 3.3 常用的API Bootloader提供了API供客户使用,常用的API有: 3.3.1 update_image_state 更新交换元数据,更新前会检查 partition1 的镜像是否有效,若镜像无效,则不更新交换元数据,并返回失败。 3.3.2 get_update_partition_info 获取分区信息,然后定义映像程序地址。 3.3.3 get_image_state 获取当前启动映像状态。 无/永久/UnderTest 3.4 Swap回滚APP准备 准备两个应用程序:APP1 和 APP2 的 bin 文件,并通过 USB HID 下载到分区 1 和分区 2。复位后,默认运行 APP1,然后通过 COM 输入选择交换和回滚功能。 代码是: int main(void) { char ch; status_t status; /* Board pin init */ BOARD_InitPins(); BOARD_InitBootClocks(); /* Update the core clock */ SystemCoreClockUpdate(); BOARD_InitDebugConsole(); PRINTF("\r\n------------------hello world + led blinky demo 2.------------------\r\n"); PRINTF("\r\nOTA bootloader test...\r\n" "1 - ReadyForTest\r\n" "3 - kSwapType_Permanent\r\n" "4 - kSwapType_Rollback\r\n" "5 - show image state\r\n" "6 - led blinking for 5times\r\n" "r - NVIC reset\r\n"); // show swap state in swap meta get_image_swap_state(); /* Set systick reload value to generate 1ms interrupt */ if (SysTick_Config(SystemCoreClock / 1000U)) { while (1) { } } while(1) { ch = GETCHAR(); switch(ch) { case '1': status = bl_update_image_state(kSwapType_ReadyForTest); PRINTF("update_image_state to kSwapType_ReadyForTest status: %i\n", status); if (status != 0) PRINTF("update_image_state(kSwapType_ReadyForTest): failed\n"); else NVIC_SystemReset(); break; case '3': status = bl_update_image_state(kSwapType_Permanent); PRINTF("update_image_state to kSwapType_Permanent status: %i\n", status); if (status != 0) PRINTF("update_image_state(kSwapType_Permanent): failed\n"); else NVIC_SystemReset(); break; case '4': status = bl_update_image_state(4); // PRINTF("update_image_state to kSwapType_Rollback status: %i\n", status); if (status != 0) PRINTF("update_image_state(kSwapType_Rollback): failed\n"); else NVIC_SystemReset(); break; case '5': // show swap state in swap meta get_image_swap_state(); break; case '6': Led_blink10times(); break; case 'r': NVIC_SystemReset(); break; } } } 下载APP时,您需要在前0x400区域使用正确的ota_header,否则swap将会失败。 const boot_image_header_t ota_header = { .tag = IMG_HDR_TAG, .load_addr = ((uint32_t)&ota_header) + BL_IMG_HEADER_SIZE, .image_type = IMG_TYPE_XIP, .image_size = 0, .algorithm = IMG_CHK_ALG_CRC32, .header_size = BL_IMG_HEADER_SIZE, .image_version = 0, .checksum = {0xFFFFFFFF}, }; 这是一个正确的示例: 12.jpg 图12 镜像大小和校验和需使用应用程序镜像的实际信息,附件中提供了一个 image_header_padding.exe,它可以输入无 ota 头部的镜像,然后输出在前 0x400 范围内添加了包含镜像大小和镜像 CRC 数据的 ota 头部的完整镜像。 3.5 测试步骤和结果 准备无头部的 APP1 镜像 evkmimxrt1060_APP1_0X60040400.bin、APP2 镜像 evkmimxrt1060_APP2_0X60240400.bin,并将 blhost.exe、image_header_padding.exe 放在同一文件夹中。APP1 和 APP2 仅 printf 版本不同,一个为版本 1,另一个为版本 2。 printf 结果: 你好,世界 + LED 闪烁演示 1 你好,世界 + LED 闪烁演示 2 附带的 OTAtest 文件夹用于测试,但需从以下链接下载 blhost.exe,并将 blhost.exe 复制到 OTAtest 文件夹中。 https://www.nxp.com/webapp/sps/download/license.jsp?colCode=blhost_2.6.6&appType=file1&DOWNLOAD_ID=null 然后运行以下 bat 命令: image_header_padding.exe evkmimxrt1060_APP1_0X60040400.bin 0x60040400 sleep 20 blhost.exe -t 50000 -u 0x15a2,0x0073 -j -- get-property 1 0 sleep 20 blhost.exe -u -t 1000000 -- flash-erase-region 0x6003c000 0x4000 sleep 50 blhost -u -t 5000 -- flash-erase-region 0x60040000 0x10000 sleep 50 blhost -u -t 5000 -- write-memory 0x60040000 boot_img_crc32.bin sleep 100 image_header_padding.exe evkmimxrt1060_APP2_0X60240400.bin 0x60040400 sleep 20 blhost -u -t 5000 -- flash-erase-region 0x60240000 0x10000 sleep 50 blhost -u -t 5000 -- flash-erase-region 0x6043b000 0x10000 sleep 50 blhost -u -t 5000 -- write-memory 0x60240000 boot_img_crc32.bin sleep 100 pause 其功能是生成带有正确 ota 头部的 APP1,擦除分区 1,将 APP1 编程到分区 1,生成带有正确 ota 头部的 APP2,擦除分区 2 和临时区域,将 APP2 编程到分区 2。 运行 .bat 文件需在复位后 5 秒内进行,然后使用 ISP 连接: blhost.exe -t 50000 -u 0x15a2,0x0073 -j -- get-property 1 0 ota_bootloader 可通过 ota_bootloader 项目直接下载到 0X60000000 区域。 下载后,重置芯片,等待 5 秒钟,APP 将会运行。 这是测试结果: 13.jpg 图13 从测试结果可以看出,首次启动时,运行 APP1,镜像状态为:无 输入 1,执行交换,会发现运行 APP2,镜像状态为:测试中 输入3,选择永久,重置后仍能找到,APP2仍在运行,图像状态:永久 输入 4,选择回滚,复位后会发现运行 APP1,镜像状态为:无 到目前为止,请完成 swap 和 rollback 功能。 输入 6,您会发现 APP 包含 SDRAM 指示灯闪烁功能正在运行。 i.MXRT 106x 回复:RT1060 OTA 引导加载程序的 ISP 及交换回滚用法 一些客户还需要 IAR 版本,因此在此附上 IAR 应用程序版本。 基于 led_blinky IAR 项目,修改如下: 1. 将 ota_bootlaoder_board.h、ota_bootloader_hrd.c、ota_bootloader_supp.c、ota_bootloader_supp.h 复制到源文件夹 2. 删除 XIP 文件夹。 3. 在 led_blinky.c 中添加: #include "ota_bootloader_supp.h" 4. MIMXRT1062xxxxx_flexspi_nor.icf 修改如下:     1.jpg /* ** ################################################################### ** Processors: MIMXRT1062CVJ5A ** MIMXRT1062CVL5A ** MIMXRT1062DVJ6A ** MIMXRT1062DVL6A ** ** Compiler: IAR ANSI C/C++ Compiler for ARM ** Reference manual: IMXRT1060RM Rev.1, 12/2018 | IMXRT1060SRM Rev.3 ** Version: rev. 0.1, 2017-01-10 ** Build: b210227 ** ** Abstract: ** Linker file for the IAR ANSI C/C++ Compiler for ARM ** ** Copyright 2016 Freescale Semiconductor, Inc. ** Copyright 2016-2021 NXP ** All rights reserved. ** ** SPDX-License-Identifier: BSD-3-Clause ** ** http: www.nxp.com ** mail: [email protected] ** ** ################################################################### */ define symbol m_ota_boot_hdr_start = 0x60040000; define symbol __ram_vector_table_size__ = isdefinedsymbol(__ram_vector_table__) ? 0x00000400 : 0; define symbol __ram_vector_table_offset__ = isdefinedsymbol(__ram_vector_table__) ? 0x000003FF : 0; define symbol m_interrupts_start = 0x60040400; define symbol m_interrupts_end = 0x600407FF; define symbol m_text_start = 0x60040800; define symbol m_text_end = 0x6023FFFF; define symbol m_interrupts_ram_start = 0x20000000; define symbol m_interrupts_ram_end = 0x20000000 + __ram_vector_table_offset__; define symbol m_data_start = m_interrupts_ram_start + __ram_vector_table_size__; define symbol m_data_end = 0x2001FFFF; define symbol m_data2_start = 0x20200000; define symbol m_data2_end = 0x202BFFFF; define symbol m_qacode_start = 0x00000000; define symbol m_qacode_end = 0x0001FFFF; /* Sizes */ if (isdefinedsymbol(__stack_size__)) { define symbol __size_cstack__ = __stack_size__; } else { define symbol __size_cstack__ = 0x0400; } if (isdefinedsymbol(__heap_size__)) { define symbol __size_heap__ = __heap_size__; } else { define symbol __size_heap__ = 0x0400; } define exported symbol __NCACHE_REGION_START = m_data2_start; define exported symbol __NCACHE_REGION_SIZE = 0x0; define exported symbol __VECTOR_TABLE = m_interrupts_start; define exported symbol __VECTOR_RAM = isdefinedsymbol(__ram_vector_table__) ? m_interrupts_ram_start : m_interrupts_start; define exported symbol __RAM_VECTOR_TABLE_SIZE = __ram_vector_table_size__; define memory mem with size = 4G; define region TEXT_region = mem:[from m_interrupts_start to m_interrupts_end] | mem:[from m_text_start to m_text_end]; define region QACODE_region = mem:[from m_qacode_start to m_qacode_end]; define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__]; define region DATA2_region = mem:[from m_data2_start to m_data2_end]; define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end]; define block CSTACK with alignment = 8, size = __size_cstack__ { }; define block HEAP with alignment = 8, size = __size_heap__ { }; define block RW { readwrite }; define block ZI { zi }; define block NCACHE_VAR { section NonCacheable , section NonCacheable.init }; define block QACCESS_CODE { section CodeQuickAccess }; initialize by copy { readwrite, section .textrw, section CodeQuickAccess }; do not initialize { section .noinit }; place at address mem: m_interrupts_start { readonly section .intvec }; place at address mem:m_ota_boot_hdr_start { object ota_bootloader_hdr.o }; keep { object ota_bootloader_hdr.o }; place in TEXT_region { readonly }; place in DATA_region { block RW }; place in DATA_region { block ZI }; place in DATA_region { last block HEAP }; place in DATA_region { block NCACHE_VAR }; place in CSTACK_region { block CSTACK }; place in QACODE_region { section .textrw}; place in QACODE_region { block QACCESS_CODE }; 然后构建项目,以获取 evkmixrt1060_iled_blinky_ota_0x60040000_iar.bin 文件。 下载 ota_bootloader 后,在板子复位后使用 blhost 进行连接: C:\KerryPC\IMXRTCode\Question\RT1060\bootloader\AN12604\kerry\OTAtest>blhost.exe -t 50000 -u 0x15a2,0x0073 -j -- get-property 1 0 { "command" : "get-property", "response" : [ 1258424320 ], "status" : { "description" : "0 (0x0) Success.", "value" : 0 } } C:\KerryPC\IMXRTCode\Question\RT1060\bootloader\AN12604\kerry\OTAtest>blhost.exe -t 2048000 -u 0x15a2,0x0073 -j -- flash-erase-region 0x60040000 0x6000 9 { "command" : "flash-erase-region", "response" : [], "status" : { "description" : "0 (0x0) Success.", "value" : 0 } } C:\KerryPC\IMXRTCode\Question\RT1060\bootloader\AN12604\kerry\OTAtest>blhost.exe -t 5242000 -u 0x15a2,0x0073 -j -- write-memory 0x60040000 evkmixrt1060_iled_blinky_ota_0x60040000_iar.bin { "command" : "write-memory", "response" : [], "status" : { "description" : "0 (0x0) Success.", "value" : 0 } } 在原始帖子中找到 iar 应用程序。
View full article
LPC804电容式触摸演示测试报告 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 近期,NXP发布了新的子系列LPC80x,目前包含LPC802和LPC804两种,有多种封装类型可供选择,其中LPC804似乎是LPC802的升级版。 详细内容可以参考这两篇文章: 《小巧‘零’珑的MCU:LPC80X面面观》 《LPC800系列选型指南》 下面是LPC802和LPC804的框图。经过比较,我们很容易就能发现它们之间的差异。 图1 LPC802系统框图 图2 LPC804系统框图 根据上面两张图,我们可以发现LPC804具有电容式触摸接口、可编程逻辑单元(PLU)、10位DAC输出、以及I2C接口。但LPC802不支持这些外设。另外,LPC804的内存是LPC802的两倍,特别是电容式触摸界面为LPC804设计实现复杂的HMI提供了硬件支持。 在接下来的部分中,我想说明电容式触摸演示中的问题并分享一些克服该问题的经验。 电容式触摸演示测试1.评估板( OM40001 ) 图3 LPCXpresso804 开发套件 2.演示代码 CapTouch_5ch 演示来自代码包(支持 Keil、IAR 和 MCUXpresso),重置后,所有 5 个 LED 将逐个亮起和熄灭并一起闪烁。在此期间请不要触摸垫子。在所有 LED 都静音后,触摸任意触摸板,响应的 LED 都会亮起,直到您的手指移开。同时,运行Freemaster项目来监控运行时的传感值。 图4 电容式触摸屏蔽 图5 FreeMASTER监控传感值 3.测试摘要 总体来说,测试结果不太好,比如触摸S4、S3时,D1~D5的LED可能会任意亮起,即使是性能最好的S1、S2,触摸时响应的LED也往往亮起,有时其他LED也会响应触摸事件。 结合FreeMaster的观察,可以得出这样的结论:这些触摸板的区分度不足以相互区分。 4.解决方法 根据AE同事的反馈,触摸板的辨别性能主要由PCB设计和供电电源决定。 显然,触摸板是无法修改的,所以我们应该考虑消除电源的噪音来提高性能。 我尝试了这三种电源供电。 使用笔记本电脑的USB端口,同时笔记本电脑由220 V,50 Hz供电 使用笔记本电脑的 USB 端口 使用移动电源 经过几轮测试,说明demo代码在使用移动电源供电时可以正常工作,因为移动电源足够干净,噪音最小。 注意:减慢 FCLK 可以延长通道的扫描周期(每个充电周期通过 YL 释放更多能量),然后提高可辨别性能。 移动电源
View full article
TWR-KM34Z75M メンテナンスモード Hi TWR-KM34Z75M ボードがメンテナンス モードになります。J-Linkでメモリを消去しているのですが、再度リセットボタンを押すとメンテナンスモードになります。そのために私がしなければならないことは何ですか? ありがとう 日時:TWR-KM34Z75Mメンテナンスモード こんにちは、各ボードのボードMK20に同じデバッガーがあることを確認しましたが、J-Linkドライバーで試してみていただけますか? SEGGER - The Embedded Experts - ダウンロード - J-Link / J-Trace Pavel_Hernandez_0-1727216503409.png Pavel_Hernandez_1-1727216511671.png よろしくお願いいたします パベル 日時:TWR-KM34Z75Mメンテナンスモード こんにちは@Pavel_Hernandez  OpenSDAシリアルおよびデバッグアプリケーションに記載されている手順を試しましたが、cmsis-dapを正常にアップロードできました.bin私のボードのブートローダーセクションにあるファイル。しかし、再接続してMCUXPressoを使用すると、ボードが表示されない(PFA)だけでなく、ボードはメンテナンスボードから来ていません。 ブートローダーセクションに入った後、コピーファイルが表示されていません。 Screenshot 2024-09-23 101945.png 日時:TWR-KM34Z75Mメンテナンスモード こんにちは、ボード上のデバッガは同じである必要があるため、同じファームウェアを使用できることを心配しないでください。 試してみませんか?さらに疑問がある場合はお知らせください。 よろしくお願いいたします パベル 日時:TWR-KM34Z75Mメンテナンスモード ご回答ありがとうございます@Pavel_Hernandez、 しかし、与えられたリンクにはTWR-KM34Z50Mのファイルがあり、TWR-KM34Z75Mに必要です。 日時:TWR-KM34Z75Mメンテナンスモード こんにちは、私の名前はPavelです、そして私はあなたのケースをサポートします、私はあなたの情報を確認しました、そして時々メンテナンスモードのモードは時々frdmのMK20(デバッガー)がファームウェアを更新する準備ができているときです。 *したがって、このスレッドは、ボード上のデバッガーがメンテナンスモードから抜け出すのに役立ちます。 OpenSDAシリアルおよびデバッグ・アダプタ |NXPセミコンダクターズ よろしくお願いいたします パベル
View full article
IMX93EVK no uart log 购买了 imx93evk,启动它并将 USB DBG 连接到我的电脑,打开 tty 以检查 115200 的日志,但在使用 sudo ./uuu 刷新后没有看到任何日志LF_v6.6.52-2.2.0_图像_IMX93EVK.zip,仍然看不到 usrt 日志,我错过了什么? Re: IMX93EVK no uart log 我发现实际上有多个端口处于打开状态,而我只针对第一个,结果没有输出,谢谢 Re: IMX93EVK no uart log HI lykaios1203 i.MX 93 应用处理器有六个独立的 UART 端口(UART1 – UART6)。在 MCIMX93-EVK 板上,UART1 用于 Cortex-A55 内核,UART2 用于 Cortex-M33 内核。单芯片 USB 至双 UART、JTAG 和 I2C 用于 UART 调试和远程调试。零件编号为 FT4232H。开发人员可以从 FTDI 网站下载该驱动程序。 安装 FT4232H 的驱动程序后,当 USB 电缆插入 J1401 连接器时,PC 将枚举四个 COM 端口,第三个端口用于 A55,第四个端口用于 M33 系统调试。 此致 Daniel Re: IMX93EVK no uart log 已安装针脚
View full article
i.MX 8M系列 DDR 工具发布 Important: If you have any questions or would like to report any issues with the DDR tools or supporting documents please create a support ticket in the  i.MX community. Please note that any private messages or direct emails are not monitored and will not receive a response. 注意: 请注意,i.MX 8M 系列已添加 DDR 支持,并且此功能也已在Config Tools for i.MX Applications Processors | NXP Semiconductors中添加。请考虑使用此工具以获取更多增强功能。 i.MX 8M系列 DDR 工具概览 i.MX 8M 系列 DDR 工具是一款基于 Windows 的软件,旨在帮助用户进行 LPDDR4/DDR4/DDR3L 培训、压力测试以及为 u-boot SPL 生成 DDR 初始代码。 本页面包含 i.MX 8M 系列 DDR 工具的最新版本,支持以下 SoC: i.MX 8M Quad及其衍生产品i.MX 8M Quadlite和i.MX 8M Dual i.MX 8M Mini Quad 及其衍生产品 i.MX 8M Mini Quadlite/Dual/DualLite/Solo/SoloLite i.MX 8M Nano Quad 及其衍生产品 i.MX 8M Nano Quadlite/Dual/DualLite/Solo/SoloLite i.MX 8M Plus NOTE: For the i.MX 8/8X Family of DDR tools please refer to the: i.MX 8/8X Family DDR Tools Release   i.MX 8M 系列 DDR 工具旨在让用户能够根据设备配置(密度、芯片选择数量等)和板布局(数据总线位切换等)生成和测试自定义 DRAM 初始化。此过程使用户能够继续进行引导加载程序和操作系统的启动。操作系统启动后,建议运行基于操作系统的内存测试(如 Linux memtester)以进一步验证和测试 DDR 内存接口。   i.MX 8M 系列 DDR 工具包括: DDR 寄存器编程辅助工具 (RPA) MSCALE DDR 工具   有关这些 DDR 工具及其使用的更多详细信息,请参阅 i.MX 8M DDR Tools 用户指南。   i.MX 8M系列DDR工具 i.MX 8M 系列 DDR 压力测试工具是一款基于 Windows 的软件工具,用于验证 DDR 初始化是否正常工作,以便与 u-boot 和操作系统启动过程配合使用。要安装 DDR 压力测试,您需要保存并解压缩 zip 文件 mscale_ddr_tool_vXXX_setup.exe.zip  (其中“xxx”为当前版本号)并按照屏幕上的安装说明进行操作。 i.MX 8M 系列 DDR 工具 需求 该工具需要访问Windows注册表,因此用户必须以管理员模式运行它。 当用户设计新的 i.MX 8M 系列开发板时,请务必遵循《硬件开发指南》和《MSCALE_DDR_Tool_User_Guide》中所述的规则,这将有助于用户在各自的 i.MX 8M 开发板上启动 DDR 设备。 i.MX 8M 系列 DDR 工具 用户指南 i.MX 8M DDR 工具包含以下文档:MSCALE_DDR_Tool_User_Guide NOTE: Please read the MSCALE_DDR_Tool_User_Guide inside the package carefully before you use this tool. i.MX8M DDR工具修订历史 版本 主要变更*(特性) 备注 3.31 集成针对 8MQ ERR051273 的解决方案   3.30 修复所有 i.MX 8M 系列的 DBI 启用问题 自动识别 i.MX 8M Nano 板上的 ROHM 和 PCA9450 电源管理IC (PMIC) 修复 4GB/8GB 内存测试工具问题   3.20 为 i.MX 8M Plus 添加支持   3.10 修复PC软件与目标板之间某些特定字符的UART通信问题。 在生成的C代码中微调DDRPHY寄存器。   3.00 为 i.MX8M-nano 添加支持 添加对不同PMIC或PMIC配置的支持 为所有DDR频率点添加压力测试支持 Nano 版 RPA 工具新增对 DDR3L 和 DDR4 的支持 请注意:DDR3L 和 LPDDR4 的 RPA 文件中包含"preliminary"标识,仅表示这些 RPA 基于 NXP 内部验证板开发,而 DDR4 RPA 则基于已发布的 EVK 开发。 2.10 更改 DDR4 容量计算方法   2.00 添加对 i.MX8M-mini 的支持   * 更多详细信息请参阅发行说明 i.MX 8M 调试 UART2 的.ds 脚本示例配置: ################step 0: configure debug uart port. Assumes use of UART IO Pads.   ##### ##### If using non-UART pads (i.e. using other pads to mux out the UART signals), ##### ##### then it is up to the user to overwrite the following IO register settings   ##### memory set 0x3033023C 32 0x00000000 #IOMUXC_SW_MUX_UART2_RXD memory set 0x30330240 32 0x00000000 #IOMUXC_SW_MUX_UART2_TXD memory set 0x303304A4 32 0x0000000E #IOMUXC_SW_PAD_UART2_RXD memory set 0x303304A8 32 0x0000000E #IOMUXC_SW_PAD_UART2_TXD memory set 0x303304FC 32 0x00000000 #IOMUXC_SW_MUX_UART2_SEL_RXD sysparam set debug_uart   1 #UART index from 0 ('0' = UART1, '1' = UART2, '2' = UART3, '3' = UART4) i.MX 8M 调试 UART3 的.ds 脚本开头示例配置 ################step 0: configure debug uart port. Assumes use of UART IO Pads.   ##### ##### If using non-UART pads (i.e. using other pads to mux out the UART signals), ##### ##### then it is up to the user to overwrite the following IO register settings   ##### memory set 0x30330244 32 0x00000000 #IOMUXC_SW_MUX_UART3_RXD memory set 0x30330248 32 0x00000000 #IOMUXC_SW_MUX_UART3_TXD memory set 0x303304AC 32 0x0000000E #IOMUXC_SW_PAD_UART3_RXD memory set 0x303304B0 32 0x0000000E #IOMUXC_SW_PAD_UART3_TXD memory set 0x30330504 32 0x00000002 #IOMUXC_SW_MUX_UART3_SEL_RXD sysparam set debug_uart   2 #UART index from 0 ('0' = UART1, '1' = UART2, '2' = UART3, '3' = UART4) i.MX 8M Mini PMIC 配置的.ds 脚本开头示例配置 ##############step 0.5: configure I2C port IO pads according to your PCB design.   ##### ########### You can modify the following instructions to adapt to your board PMIC ####### memory set 0x30330214 32 0x00000010  #IOMUXC_SW_MUX_I2C1_SCL memory set 0x30330218 32 0x00000010  #IOMUXC_SW_MUX_I2C1_SDA memory set 0x3033047C 32 0x000000C6 #IOMUXC_SW_PAD_I2C1_SCL memory set 0x30330480 32 0x000000C6  #IOMUXC_SW_PAD_I2C1_SDA sysparam set pmic_cfg 0x004B #bit[7:0] = PMIC addr,bit[15:8]=I2C Bus. Bus index from 0 ('0' = I2C1, '1' = I2C2, '2' = I2C3, '3' = I2C4) sysparam set pmic_set 0x2F01 #bit[7:0] = Reg val, bit[15:8]=Reg addr. #REG(0x2F) = 0x01 sysparam set pmic_set 0x0C02   #REG(0x0C) = 0x02 sysparam set pmic_set 0x171E   #REG(0x17) = 0x1E sysparam set pmic_set 0x0C00   #REG(0x0C) = 0x00 sysparam set pmic_set 0x2F11    #REG(0x2F)=0x11 i.MX 8M 系列 DDR 寄存器编程辅助工具 (RPA) i.MX 8M DDR RPA(或简称为 RPA)是一款用于为用户特定的 DDR 配置(如 DDR 设备类型、密度等)开发 DDR 初始化的 Excel 电子表格工具。RPA 生成 DDR 初始化(在单独的 Excel 工作表标签中):   DDR 压力测试脚本:此格式专用于 DDR 压力测试,首先将本工作表中的内容复制到文本文件中,然后将该文件命名为“.ds”文件扩展名的文档。用户在执行DDR压力测试时将选择此文件。 《如何使用Excel工作表》选项卡提供了使用 RPA 的说明。   i.MX 8M 系列 DDR 寄存器编程辅助 (RPA):当前版本 要获取最新的 RPA,请参考以下链接(注意,现有的 RPA 已从本主页面移除,并移至下方特定于 SoC)的链接中): i.MX 8M Quad: https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/i-MX8M-m850D-DDR-Register-Programming-Aid-RPA/ta-p/1172441 i.MX 8M Mini : https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/i-MX8MMini-m845S-DDR-Register-Programming-Aid-RPA/ta-p/1172443 i.MX 8M Nano: https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/i-MX8MNano-m815S-DDR-Register-Programming-Aid-RPA/ta-p/1172444 i.MX 8M Plus: https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/i-MX-8MPlus-m865S-DDR-Register-Programming-Aids-RPA/ta-p/1235352   处理器 掩模版本 支持的存储器 最新 RPA 版本 * i.MX 8M Quad & Derivatives 全部 LPDDR4 启示录 33 i.MX 8M Quad & Derivatives 全部 DDR4 版本 18 i.MX 8M Quad & Derivatives 全部 DDR3L Rev 9 i.MX 8M Mini& 衍生产品 A0 LPDDR4 启示录 22 i.MX 8M Mini及衍生产品 A0 DDR4 版本 21 i.MX 8M Mini & 衍生产品 A0 DDR3L 版本 10 i.MX 8M Nano & 衍生产品 A0 LPDDR4 Rev 9 i.MX 8M Nano及其衍生产品 A0 DDR4 版本 12 i.MX 8M Nano及其衍生产品 A0 DDR3L Rev 6 i.MX 8M Plus 及其衍生产品 A1 LPDDR4 Rev 9 i.MX 8M Plus 及其衍生产品 A1 DDR4 Rev 9 * 有关更新的详细信息,请参阅相应 RPA 的“修订记录”选项卡。 要修改自定义设置的 DRAM 频率,请参阅iMX 8M Mini 寄存器编程辅助工具 DRAM PLL 配置 相关资源链接: i.MX 应用处理器的配置工具 | NXP 半导体 i.MX 8M Mini 寄存器编程辅助工具 DRAM PLL 设置 i.MX 8/8X 系列 DDR 工具发布 i.MX 6/7 DDR 压力测试 GUI 工具 i.MX 8M 应用处理器相关资源 i.MX8M (m850D) DDR 寄存器编程辅助工具 (RPA) i.MX8MMini (m845S) DDR 寄存器编程辅助 (RPA) i.MX8MNano (m815S) DDR 寄存器编程辅助 (RPA) i.MX 8MPlus (m865S) DDR 寄存器编程辅助工具 (RPA) i.MX 8ULP DDR 工具:i.MX 软件和开发工具 | NXP Semiconductors 向下滚动到“其他资源 --> 工具 --> DDR 工具” i.MX 8M | i.MX 8M Mini | i.MX 8M Nano 回复:i.MX 8M 系列 DDR工具发布 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 太好了。谢谢!
View full article
i.MX8MM & i.MX8MQ USB2.0 設計(USB TYPE-C 非搭載) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -背景 i.MX8MQおよびi.MX8M Miniのリリース以来、一部のお客様から、これら2つのプロセッサのUSB2.0の設計に関する質問が寄せられています。プロジェクトのニーズにより、USB3.0およびUSB TYPE-Cを使用する必要はありません。したがって、これらのアプリケーションでは、i.MX6Qと同様に従来のUSB2.0インターフェース設計を使用する必要があります。同様のニーズを持つお客様がスムーズに設計を完了できるように、このドキュメントでは、過去の顧客に対する回答をまとめ、2つのUSB2.0設計回路図を描いています。同時に、i.MX専門ハードウェア・チームのメンバーが2つの図面のレビューを手伝い、i.MX専門ソフトウェア・チームがソフトウェアの調整に関する提案を行いました。 -始める i.MX8MQはUSB3.0をサポートし、USB2.0と互換性があります。i.MX8M MiniはUSB2.0のみをサポートし、USB3.0はサポートしていません。どちらの開発ボードでも、USB TYPE-C設計方式が使用されています。USB TYPE-C、PDチップ、ロジック・チップを取り外す必要があります。同時に、コネクタをMicroUSBとUSB TYPE-A-Fに変更します。 1 ハードウェア設計 1. IOMUX リスト 2 、USB 回路設計 (1) USB 電源&OC 制御 I.MX8MM i.MX8MQ                                                 i.MX8MQ                                              i.MX8MQ [コメント] i.MX8MQに関して -USB1はデュアル・ロール・モードとして構成され、USB1 OTG IDが検出に使用されます -USB2は固定ホスト・モードに設定され、USB2 OTG IDが検出に使用されます -i.MX8M Mini USB2.0                                        i.MX8M Mini                                     i.MX8M Mini [コメント] i.MX8M Miniに関して -USB1はデュアル・ロール・モードとして構成され、USB1 OTG IDが検出に使用されます -USB2は固定ホスト・モードに設定され、USB2 OTG IDが検出に使用されます (3) 付加的な説明 --i.MX8M MiniのUSB1_VBUS & USB2_VBUSに関して i.MX8M Miniのデータシートによると、USB1_VBUSとUSB2_VBUSは0~3.9Vの入力を許可します。以下をご覧ください。 そのため、I.MX8M Mini-EVKのUSB1_VBUSについて疑問を持っているお客様がおられます。図面によると、外部入力電圧がこの範囲を超えています。 実際、お客様はこの問題について心配する必要はありません。USB1_VBUSピンとUSB2_VBUSピンには内部の分圧抵抗があります。お客様がI.MX8M Mini-EVKの設計方法を参照している限り、これら2つのピンの入力電圧は内部で保証されます。 USBx OTG IDおよびUSBx_IDについて (1) USBx_OTG_ID USBx OTG IDはGPIO IDとも呼ばれ、i.MX6Qのものと同じです。作業プロセス中、ソフトウェアはIDピンのレベルが高から低、または低から高に変わると、デバイスとホストの役割を切り替えます。 (2)USBx_ID USBx_IDはUSB PHY IDと呼ばれ、USBx OTG IDと同様の機能を果たすことができます。 (3) USBx_OTG_IDまたはUSBx_IDを使用する USBx_OTG_IDをお勧めします。しかし、i.MX8MQにUSBx_IDを使用したい場合は、それも可能です USB_CTL0_ADDR[utmiotg_iddig_sel]レジスタを設定します。 I.MX8M Miniの場合、USBNC_n_CTRL2[DIG_ID_SEL]レジスタを設定します。 [コメント] この構成は、これら2つのプロセッサのリファレンスマニュアルから取得されていますが、適切なボードがないため、ボード上での検証は行われていません。お客様はそれをお試しいただけます。 (4) ボードのストレージへのイメージのフラッシュについて         空のボードまたは更新イメージが必要なボードの場合、USBインターフェースを使用してイメージをプログラムする必要があります。このとき、USBインターフェースはデバイスモードで動作する必要があります。このため、CPU内のROMコードがUSBをデバイスモードで動作させることを保証します。 2 チューニング・ソフトウェア 1.IOMUX 実際のアプリケーションに応じて、使用される信号はdtsファイル内で多重化されます。このステップは比較的簡単であるため、ここでは説明しません。 2. u-boot / デバイスツリーにおけるUSB設定の調整 i.MX8M Miniおよびi.MX8MQの場合、i.MX専門ソフトウェア・チームは次の提案をしています。ここでその提案を引用します。 imx8mm_evk_defconfiのCONFIG_USB_TCPCを削除し、fsl-imx8mm-evk.dtsのtypec_ptn5110_1/2 依存関係を削除することで、これを試すことができます。ubootはタイプCのICの状態をチェックし、ICが取り外されるとクラッシュしたり停止したりします。 --i.MX8M Mini U-BOOT:CONFIG_USB_TCPC=n デバイス・ツリー: &usbotg1 {     status = "okay"; }; &usbotg2 {     status = "okay"; --------------------------------------------------------- --i.MX8MQ --u-boot CONFIG_USB_TCPC=n --Node of Device tree &usb_dwc3_0 {              status = "okay";              /*extcon = <&typec_ptn5100>;*/              dr_mode = "otg";              hnp-disable;              srp-disable;              adp-disable;              maximum-speed = "high-speed"; }; ---------------------------------------------- -END [コメント] このドキュメントの使用中に問題が発生した場合は、チケットを提出してください。チケットを提出する手順は以下のとおりです。 1. 次のサポート・サイトを開き、中央の青い[Go to Tickets(チケットへ移動)]をクリックします。 http://www.nxp.com/support/support:SUPPORTHOME 2. 次にログインを求められます。アカウントがない場合は、まずビジネス用メールで登録してください。 3. ログイン後、中央の[Create New Cases(新しいケースを作成)]ボタンをクリックすると、質問を送信できます。 NXP TICチーム Weidong Sun 2020/3/30 i.MX 8ファミリ | i.MX 8QuadMax (8QM) | 8QuadPlus Re: i.MX8MM & i.MX8MQ USB2.0 デザイン USB TYPE-Cなし Hi Weidong Sun, このメッセージがお役に立てば幸いです。 CORAL SOM (NXP i.MX8MQ) カスタム・キャリア・ボードで、特にUSBカメラ・モジュールが認識されないという問題が発生しています。 USB1にUSBホストType-Aを実装したいと考えています。USB1_OTG_ID が Google によって実装されていないことを考えると、USB1_IDをDGNDにプルダウンするだけで十分ですか?それともUSB2だけではできないのでしょうか?さらに、MIC2026 IC なしでこの実装を進めることはできますか?それとも必須ですか? ご協力に感謝いたします。ご返答をお待ちしております。 よろしくお願いいたします。 Tibor Gajdar Re: i.MX8MM & i.MX8MQ USB2.0 デザイン USB TYPE-Cなし Hi, 私はImx8mmのUSB1でタイプBを使用しており、ボードのu-bootデバイスツリーで同じ変更を行っています。しかし、ボードの起動時に以下のメッセージが表示されます。 Log : In: serial Out: serial Err: serial extcon_ptn5150_init: Can't find device id=0x3d extcon_ptn5150_setup: port init failed, err=-19 「extcon_ptn5150_init:」が無効になっているにもかかわらず表示される理由がわかりません。以下は私のデバイス・ツリーの詳細です。 &i2c2 { clock-frequency = <100000>; pinctrl-names = "default", "gpio"; pinctrl-0 = <&pinctrl_i2c2>; pinctrl-1 = <&pinctrl_i2c2_gpio>; scl-gpios = <&gpio5 16 GPIO_ACTIVE_HIGH>; sda-gpios = <&gpio5 17 GPIO_ACTIVE_HIGH>; status = "okay"; ptn5150: ptn5150@3d { compatible = "nxp,ptn5150"; pinctrl-names = "default"; reg = <0x3d>; i2c-bus = <0x1>; status = "disabled"; }; }; および &usbotg1 { dr_mode = "peripheral"; /*extcon = <&ptn5150>;*/ status = "okay"; }; &usbotg2 { dr_mode = "host"; /* Regulator requires jumper J3.12 to J3.18 */ vbus-supply = <&reg_usb_otg2_vbus>; status = "okay"; }; ホストはUSBデバイスを感知できますが、ボードが起動すると、ホストはデバイスを検出できません。問題を理解できるよう助けていただけますか。 Re: i.MX8MM & i.MX8MQ USB2.0 デザイン USB TYPE-Cなし <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> IMX8M MiniでUSBx_OTG_IDの代わりに USBx_IDを使用する場合の注意点: IMX8MMRMのUSBNC_n_CTRL2[DIG_ID_SEL]はIOMUXC_USB_OTG1_ID_SELECT_INPUTを使用しますが、これはimx7用のiomuxです。 解決策: IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO10とIOMUXC_SW_MUX_CTL_PAD_GPIO1_IO11を使用します Re: i.MX8MM & i.MX8MQ USB2.0 Design Without USB TYPE-C 2020年6月12日時点の8MMEVKで確認済み。USBx_IDはOTGピンとして使用できます。   Snipaste_2026-04-08_12-18-26.png Snipaste_2026-04-08_12-18-06.png diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile index a11846b86fb2..186e5a8a233a 100644 --- a/arch/arm64/boot/dts/freescale/Makefile +++ b/arch/arm64/boot/dts/freescale/Makefile @@ -130,7 +130,7 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mm-evk.dtb imx8mm-evk-rpmsg.dtb imx8mm-evk-rm67191 imx8mm-evk-qca-wifi.dtb \ imx8mm-evk-dpdk.dtb \ imx8mm-evk-rm67199.dtb imx8mm-evk-rm67191-cmd-ram.dtb imx8mm-evk-rm67199-cmd-ram.dtb \ - imx8mm-evk-lk.dtb imx8mm-evk-rpmsg-wm8524-lpv.dtb + imx8mm-evk-lk.dtb imx8mm-evk-rpmsg-wm8524-lpv.dtb imx8mm-evk-usb1id.dtb dtb-$(CONFIG_ARCH_MXC) += imx8mm-evk-rpmsg-wm8524.dtb dtb-$(CONFIG_ARCH_MXC) += imx8mm-evk-ak4497.dtb imx8mm-evk-ak5558.dtb imx8mm-evk-audio-tdm.dtb dtb-$(CONFIG_ARCH_MXC) += imx8mm-evk-8mic-revE.dtb imx8mm-evk-8mic-swpdm.dtb \ diff --git a/arch/arm64/boot/dts/freescale/imx8mm-evk-usb1id.dts b/arch/arm64/boot/dts/freescale/imx8mm-evk-usb1id.dts new file mode 100644 index 000000000000..eae648c764d7 --- /dev/null +++ b/arch/arm64/boot/dts/freescale/imx8mm-evk-usb1id.dts @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright 2019-2020 NXP + */ + +/dts-v1/; + +#include +#include "imx8mm-evk.dts" + +/delete-node/ &ptn5110; + +&usbotg1 { + /delete-property/ usb-role-switch; + /delete-node/ port; +}; \ No newline at end of file diff --git a/arch/arm64/configs/imx_v8_defconfig b/arch/arm64/configs/imx_v8_defconfig index 31eabe2708ea..3fe1ea66c0da 100644 --- a/arch/arm64/configs/imx_v8_defconfig +++ b/arch/arm64/configs/imx_v8_defconfig @@ -843,13 +843,6 @@ CONFIG_USB_AUDIO=m CONFIG_USB_ETH=m CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m -CONFIG_TYPEC=y -CONFIG_TYPEC_TCPM=y -CONFIG_TYPEC_TCPCI=y -CONFIG_TYPEC_FUSB302=m -CONFIG_TYPEC_TPS6598X=m -CONFIG_TYPEC_HD3SS3220=m -CONFIG_TYPEC_SWITCH_GPIO=y CONFIG_MMC=y CONFIG_MMC_BLOCK_MINORS=32 CONFIG_MMC_ARMMMCI=y
View full article
S32K344 SPI数据错误 你好,恩智浦团队。 我尝试配置 SPI,CPOL = 1,CPHA = 1。 当我使用 100K 波特率时波形是正确的, 但当我使用1M波特率时,波形就会错误。 通常数据引脚长时间维持高电压后就会出现数据错误。 波特率100k {BC7AB95C-0000-43AE-B266-63F0C802412B}.png 波特率 1M 123.png 以下是我的项目 谢谢 回复:S32K344 SPI数据错误 我目前解决了这个问题,我清除了RxBuffer 回复: S32K344 SPI数据错误 感谢您告知我们您已发现该问题。 如果您有任何其他问题或遇到任何其他未解决的问题,请随时联系我们。 -RomanVR。 回复: S32K344 SPI数据错误 你好@RomanVR ,经过几天的测试,我发现问题似乎出在 main.c 的 C 代码上 回复: S32K344 SPI数据错误 你好@RomanVR ,谢谢你的回复 我不知道如何将 MOSI 连接到 MISO 来验证数据,有什么说明吗? 我正在这个板上跑步。 20250302_203741.jpg 顺便说一句,我使用了此网页上的示例(使用 LSPI2,没有 dma),删除了配置,使用了 1M 波特率,并对其进行了测试。波形正确。 使用 DMA DS3.5 RTD500 的 S32K344 SPI 发送和接收示例 - NXP 社区 以下是我的修改示例。我比较了 SPI 和 PORT 设置,它们是一致的。我不知道我创建的项目出了什么问题。 回复:S32K344 SPI数据错误 你好@IanHsueh 。 我在我这边测试了您的项目,没有进行任何修改,将 MOSI 连接到 MISO,以验证数据是否在分析仪的信息之外正确传输。我成功地在缓冲区中接收到了正确的数据。您能做同样的测试吗?这将帮助我们排除逻辑分析仪的任何潜在问题,因为我们在观察数据帧时遇到了问题。 另外,请告诉我测试是在定制板上进行的还是在我们的某个评估板上进行的。 我将等待你的答复。 -RomanVR。
View full article
GuruCE 发布 iMX6 BSP 重要新版本 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 在这个新版本中, GuruCE的专家在性能上取得了一些重大改进,并增加了相当多的新功能: 比我们之前的版本快 4.75 倍 这是>6x比我们竞争对手的 BSP 更快…… 增加了完整的HDMI 支持,包括显示器自动检测、热插拔和 CE 中的动态分辨率变化 这意味着您可以插入 1360x768 显示器并以该分辨率显示 CE 桌面,然后拔下显示器并插入 1920x1080 显示器,CE 将动态更改分辨率并以 1920x1080 分辨率显示桌面,当然,所有这一切不会出现左侧的紫线(所有其他可用的 iMX6 BSP 中长期存在的问题)。 HDMI、LVDS 和 LCD显示输出现在可以在引导加载程序中配置 这意味着您可以为所有内容创建一个内核映像。只需进入引导加载程序菜单并选择您正在使用的显示器的分辨率并启动内核。就这么简单! 增加了对所有 UART 的 DMA支持 UART1、2、3、4 和 5 上的完整 RX 和 TX DMA 支持。 升级到最新的 Vivante GPU GALCORE 驱动程序 v5.0.11(25762) 我们还添加了所有教程和测试代码。结合此版本令人惊叹的性能提升,您现在可以在全屏 1920x1080 分辨率下享受 110+ fps(窗口模式下为 350+ fps)的 OpenGL-ES 1.1/2.0!OpenVG 旋转老虎样本现在非常快,您只能看到模糊的图像,当然我们完全支持 Dual 和 Quad 上的 OpenCL。 现在异步加载驱动程序以实现更快的启动 为 QKIT-ARM 上的Congatec-QMX6(双/四,1 GB 模块)添加了可免费下载的演示内核 静止时 CPU 最高温度: 45°C / 113°F 运行 OpenGL-ES 2.0 反射球时的最高 CPU 温度: 65°C / 149°F 这远没有达到我们所希望的水平,但已经好多了。我们的下一个版本将重点关注减少功耗和减少热量产生。 提高网络性能 性能提升也显著提升了以太网吞吐量。iMX6 的理论最高吞吐量约为 45 Mbyte/s,目前我们只完成了一半(这个问题已经列入了我们的修复清单),但至少以太网速度现在已经超出了千字节(KByte)的范围(在 WEC7 和 WEC2013 上使用NETIO进行测试): NETIO - Network Throughput Benchmark, Version 1.32 (C) 1997-2012 Kai Uwe Rommel TCP connection established. Packet size 1k bytes: 19.11 MByte/s Tx, 19.22 MByte/s Rx. Packet size 2k bytes: 21.22 MByte/s Tx, 20.38 MByte/s Rx. Packet size 4k bytes: 22.44 MByte/s Tx, 20.85 MByte/s Rx. Packet size 8k bytes: 23.06 MByte/s Tx, 22.43 MByte/s Rx. Packet size 16k bytes: 20.67 MByte/s Tx, 19.38 MByte/s Rx. Packet size 32k bytes: 20.79 MByte/s Tx, 20.58 MByte/s Rx. Done. UDP connection established. Packet size 1k bytes: 13.84 MByte/s (0%) Tx, 13.76 MByte/s (0%) Rx. Packet size 2k bytes: 15.97 MByte/s (0%) Tx, 15.97 MByte/s (0%) Rx. Packet size 4k bytes: 20.25 MByte/s (0%) Tx, 19.83 MByte/s (0%) Rx. Packet size 8k bytes: 22.39 MByte/s (0%) Tx, 22.49 MByte/s (0%) Rx. Packet size 16k bytes: 19.34 MByte/s (0%) Tx, 17.95 MByte/s (0%) Rx. Packet size 32k bytes: 21.78 MByte/s (0%) Tx, 21.17 MByte/s (0%) Rx. Done. 更多详细信息请参阅发行说明。 不相信炒作吗?亲自尝试一下! 我们为 RIoTboard 、 SABRE-Lite 、 Nitrogen6X 、 Opal6 、 ConnectCore6 以及现在的 Conga-QMX6 提供了 可免费下载的演示内核 。 GuruCE 网站: https://guruce.com iMX6登陆页面: https://guruce.com/imx6 最新 iMX6 BSP r474: https://guruce.com/imx6-bsp-releases/imx6-r474 概述
View full article
如何:从 S32R45 EVB 上的 S32 Design Studio 启动 S32 调试器 S32 平台的 S32 设计工作室支持带有 S32 调试器的 S32R45 设备。本文档详细介绍了如何在 S32R45 评估板上设置和开始调试会话。 准备工作 设置软件工具 安装 S32 设计工作室 IDE  使用 S32 Design Studio for S32 平台中的扩展和更新菜单添加 S32R4xx 开发包。 DanielBarbu_0-1726841775849.png 设置硬件 确认S32R45评估板的设置。 配置JTAG。S32R45 评估板支持 10 针和 20 针 JTAG 连接。默认板配置设置为 20 针,如果您使用 10 针 JTAG 接口,请将跳线 J59 的位置从 2-3(默认)更改为 1-2。两者都受 S32 调试器和 S32 调试探针支持。 连接电源线 设置 S32 调试探针 通过 JTAG 电缆将 S32 调试探针连接到评估板。有关安装说明,请参考《S32 调试探针用户手册》。使用上一步中已确认的 JTAG 连接。 通过 USB 或以太网(通过局域网或直接连接,并配置为静态 IP 地址)将 S32 调试探针连接到主机 PC,同时通过 USB 端口连接电源。 启动 S32 Design Studio for S32 Platform 创建新项目或打开现有项目,并确认其能成功构建。如果创建新项目,请确保在 “新建项目向导” 中选择了 S32 调试器。 DanielBarbu_1-1726841818690.png 流程 打开“调试配置”菜单,然后根据您的项目是否存在 S32 调试器配置执行以下步骤。如果该项目是使用 S32 Design Studio for S32 平台中的新项目向导创建的,并且选择了 S32 调试器作为调试器,那么它可能具有现有的调试配置。 DanielBarbu_2-1726841892502.png S32调试器配置存在 如果现有的 S32 调试器配置,请继续进行探测配置。否则,跳至下一部分。下面显示了所提供的 SDK 示例项目“hello_world_s32r45”的调试配置。后缀“debug”、“ram”和“s32debugger”指的是项目的构建方式以及配置所针对的调试器。 选择与项目、构建类型调试和主核心(如果是多核项目)相对应的调试配置 选择“调试器”选项卡 选择连接 S32 调试探针的接口(以太网/USB)。 如果通过 USB 连接并且为接口选择了此选项,则将自动检测 COM 端口(在极少数情况下,当 2 个或更多 S32 调试探针通过 USB 连接到主机 PC 时,可能需要为连接到 EVB 的探针选择正确的 COM 端口) 如果通过以太网连接,请输入探测器的 IP 地址。有关确定 IP 地址的方法,请参阅 S32 调试探针用户手册。 S32调试器配置不存在 如果项目是从另一个 IDE 移植过来的,或者是使用另一个调试器创建的,则可能没有现有的调试配置。 选择 S32 调试器标题并单击“新建启动配置”(或双击 S32 调试器标题,或右键单击 S32 调试器标题并从上下文菜单中选择“新建”) 出现一个新的调试配置,其名称设置为项目资源管理器窗口中活动项目的名称(可以通过从项目中打开文件或在编辑器中从项目中选择已打开的文件来设置),以及用于构建它的构建类型。如果这与您的预期项目不匹配,则可以在将活动项目更改为所需项目后对其进行修改以匹配或删除并重新创建。根据需要调整项目名称。 从“主”选项卡中,检查“项目”字段是否设置为正确的项目名称(如“项目资源管理器”中所列),以及“C/C++ 应用程序”是否设置为构建的 ELF 文件。项目名称可以自定义,但必须使用‘_’代替空格。 如果项目字段未设置或不正确,请单击浏览...,然后从列表中选择正确的项目名称。如果工作区中打开了多个项目,则会列出每个项目。这表明,无论 C/C++ 视角中哪个项目处于活动状态,都可以关联任何可用的工作区项目。当在一个项目中重复使用另一个项目的调试配置时,这很有用。 如果 C/C++ 应用程序未设置或不正确,请单击搜索项目...,然后选择正确的二进制文件(仅当项目字段正确且项目成功构建时才有效)。 切换到“调试器”选项卡, 单击“选择设备和核心”,然后从列表中选择正确的核心。 在这种情况下,M7_0核心是正确的。 如果这不是主要核心,则取消选中“初始核心”旁边的框。这仅适用于非启动核心的多核项目。这会导致脚本跳过核心的初始化,因为启动核心将启动其他核心,因此不需要额外的初始化。 选择连接 S32 调试探针的接口(以太网/USB)。 如果通过 USB 连接并且为接口选择了此选项,则将自动检测 COM 端口(在极少数情况下,当 2 个或更多 S32 调试探针连接到主机 PC 时,可能需要为连接到 EVB 的探针选择正确的 COM 端口) 如果通过以太网连接,请输入探测器的 IP 地址。有关确定 IP 地址的方法,请参阅 S32 调试探针用户手册。 点击应用 单击“调试”。这将启动 S32 调试器。成功启动调试器后,将打开“调试”透视图并执行应用程序,直到到达 main() 第一行的断点。 DanielBarbu_3-1726841922809.png
View full article
示例模型:RDDRONE-BMS772 简介 RDDRONE-BMS772 是一种独立的 BMS 参考设计,适用于无人机和漫游车等移动机器人,支持 3 至 6 节电池。 安装在板上的主要组件是: MCU:S32K144(通用型 S32K1 微控制器); BCC:MC33772B(6 通道锂离子电池单元控制器 IC); SBC:UJA1169TK(迷你高速 CAN 系统基础芯片); RFID:NTAG5-Boost(NTAG 5 Boost:符合 NFC 论坛标准的 I2C 桥接器,适用于微型设备) 下文将概述板上可用的引脚以及 IC 之间的连接。如需了解更多详情,请查看产品页面上的数据表和原理图。 SorinIBancila_0-1677833690900.png SorinIBancila_2-1667932284009.png 先决条件软件 若要在 RDDrone BMS772 上创建、构建和部署 Simulink 模型,需要以下软件: MATLAB ® R2016a 或更高版本 Simulink ® MATLAB ® Coder™ Simulink ® Coder™ ARM ® Cortex ® -M 处理器 Embedded Coder ® 支持包 S32K1xx MBDT工具箱版本4.3.0 JLink Debug Probe Segger FreeMASTER 运行时调试工具   先决条件硬件 此示例所需的硬件为: RDDrone BMS772 CAN 总线终端电阻 (DRONE-CAN-TERM) OLED显示屏128x32像素 12V DC 电源(不包括在 RDDRONE 套件中) 带电缆的外部热敏电阻 用于 USB 的 CAN 接口 6 节电池模拟器(需要单独的 12V 直流电源,请查阅用户手册) JLink Debug Probe 烙铁:默认情况下,BCC 配置为 3S 配置。若要配置为 4S、5S 或 6S,则必须在板上进行多项修改。(有关详细信息,请参阅 SPF-45742) 创建模型并配置组件 初始化模型 要使用 S32K1xx 工具箱中的模块配置模型,必须添加 MBD_S32K1xx_Config_Information 模块。 SorinIBancila_0-1667933938068.png RDDRONE 属于 S32K144 系列,配备 32 MHz 外部晶体。下载接口为 JTAG,使用 Segger Link。 注意! Segger JLink 软件不包含在工具箱中,必须 单独安装。 SorinIBancila_0-1667989585506.png 初始化系统基础芯片 板载的系统基础芯片(SBC)是UJA1169TK,这是一款微型高速CAN收发器。此外,它还具有看门狗功能,并可通过LPSPI0(低功耗串行外设接口)进行配置。 出厂时,SBC 处于强制正常模式,这意味着看门狗被禁用,但 CAN 收发器继续工作。如果初始化并配置了 SBC,它将退出强制正常模式并进入正常模式。现在,必须根据配置重置看门狗,否则将触发重置。  一种特殊操作模式是软件开发模式控制,这种模式允许在看门狗保持禁用状态时配置 SBC(CAN、电源调节器)。要启用 SDMC,SBC 必须处于强制正常模式(更多详细信息请参见此处:7.11.2 恢复出厂预设值)。 注意!MCU 通过 SPI 配置 SBC。因此,必须在 SBC 配置块之前初始化 LPSPI0。 SorinIBancila_0-1675156021682.png SBC 的基本配置可以在下方找到。 SorinIBancila_1-1675156286353.png   初始化 FreeMASTER FreeMASTER 是一款用户友好的实时调试监视器和数据可视化工具,支持嵌入式软件应用程序的运行时配置和调整。MCU 和 FreeMASTER 应用程序之间的连接可以通过以下方式实现: UART CAN 调试探头/板载调试器接口 在本示例中,使用 CAN0 接口从 FreeMASTER 应用程序发送/接收消息。所需的 RxD 和 TxD 引脚分别为 PTE4 和 PTE5 (两者均路由至 J3 连接器)。默认比特率为 1000 Kbit/s,但根据用例,可以降低比特率。 SorinIBancila_1-1668006198467.png 注意!如果用户界面以非常快的刷新率监视多个变量,FreeMASTER 可能会增加大量开销,并导致步进函数超时。 初始化BCC 电池单元控制器 (BCC) MC33772B 可以通过 SPI/TPL 由 MCU 进行配置和使用。与SBC类似,必须在初始化 BCC 之前初始化通信接口 (LPSPI1)。作为一项功能,BCC 模块可以帮助您配置 LPSPI 接口以正常工作。  首先,添加 LPSPI 配置模块,并将实例选择为 1(因为此实例通过 MCU从RDDRONE 板路由至 MC33772B )。转到“引脚”选项卡,选择 LPSPI1 和 BCC 使用的引脚。角色、波特率和其他高级设置将在 BCC 配置模块中稍后配置。  SorinIBancila_1-1668007100972.png 由于未添加TPL收发器,MC33772B 通过 LPSPI 实例 1(之前已配置)与 MCU 通信。在“常规”选项卡中,“实例”指的是 BCC 的实例(不要与 LPSPI 实例混淆)。在 “SPI 模式”区域,必须选择 BCC 的类型。在本例中,安装在 RDDRONE 上的 BCC 为 MC33772B。电池节数为 6。 接下来,切换到SPI选项卡,将SPI 实例设置为1,并将SPI CS 选择设置为LPSPI_PCS0。 最后,在“电池组设置”中,必须将分流电阻设置为 500 微欧(因为这是安装在板上的分流电阻 R1 的值)。 在 MC33772B 配置块中,必须修改以下设置: 配置选项卡 常规设置 实例:0 模式:SPI SPI 模式 设备:MC33772B 单元编号:6 SPI tab SPI 实例:1 SPI CS 选择:LPSPI_PCS0 电池组设置 关断电阻:500 微欧姆(关断电阻R1 直接安装在 RDDRONE 上) SorinIBancila_2-1668007526055.png   在正确配置 MC33772B(特别是选择了 SPI 实例)后,您可以单击 SPI 选项卡中的“将 BCC 配置为主设备的 SPI”(在上图中用橙色矩形突出显示)。   注意!MCU 通过 SPI 配置 BCC。因此,必须在 MC33772B 配置模块之前初始化 LPSPI1。   初始化SSD1306 OLED 本示例中使用的 OLED 显示屏为 128 x 32 像素,通过 LPI2C0 (J32) 与 MCU 通信。 LPI2C 的配置如下所示: SorinIBancila_1-1668165633605.png 在配置完LPI2C后,可以添加并配置用于配置OLED的模块,具体如下: LPI2C 实例:0 SSD1306 地址:60(以十进制表示,十六进制:0x3C) 宽度:128 高度:32 Font: 11 x 18 背景颜色:黑色 SorinIBancila_3-1668165874330.png 注意!MCU通过I2C配置LCD。因此,必须在 LCD 配置块之前初始化 LPI2C0。 初始化栅极驱动器 栅极驱动器由 D 型触发器控制,允许 MCU 在电池放电或发生各种故障时断开连接到电源输出焊盘的电气负载(电机、伺服器)与电源输入的连接。 GPIO PTC2 连接到 D 型触发器 (U10) 的“数据输入”引脚,且为低电平有效(将引脚设置为 0 以启用栅极驱动器,设置为 1 以禁用它)。GPIO PTC1 连接到触发器的 “CLK” 引脚,这是一个上升沿触发的时钟信号输入引脚。因此,要控制栅极驱动器,必须将 PTC2 设置为所需状态,然后切换PTC1两次。为确保序列按顺序执行,请设置每个 GPIO 写入模块的优先级。 SorinIBancila_1-1668166606665.png 应用程序结构 使用 NXP MBD 工具箱在 Simulink 中开发应用程序时,推荐的设计风格是将应用程序分为以下三类: 输入:从外设读取/接收感兴趣值的硬件相关模块 算法:处理从输入模块接收到的值的硬件无关模块。 输出:从算法模块接收处理后的值的硬件相关模块 SorinIBancila_0-1673875764671.png 这种方法的一个优点是,无需对算法部分进行任何修改,即可将经过全面测试的应用程序转换为新硬件。但是输入模块和输出模块必须更新至新硬件。此外,在开发应用程序时,您可以在软件在环 (SIL) 或处理器在环 (PIL) 中验证算法部分。这两种模拟方法对于测试难以复现的案例非常有用,因为可以将特定数据作为输入。 考虑到这些因素,本示例可以按如下方式构建: SorinIBancila_2-1673879108411.png 输入 (绿色区域): 此区域中的模块从 MC3377xB BCC 读取数据,并将其存储在多个数据存储中。 如果检测到任何故障,MC3377xB_Fault_Get_Status 会读取错误并将其存储在 FaultStatus 数据存储器中。 为确保 MCU 不会停止运行,将在每个步骤切换板载 LED (PTB13)。 算法(蓝色区域): 由于此示例更像是一个虚拟示例,因此算法部分仅处理 PackVoltage 和 PackCurrent,以便在 OLED 显示屏上正确显示。 toggleLED 变量在每一步都被取反,以切换板载 LED。 输出(粉色区域) 重置 SBC UJA116x 的看门狗,以避免强制重启板 将在输入区域接收并在算法区域处理的电池组电压和电池组电流显示在 OLED 显示屏上。 切换LED,并将新值保存到toggleLED数据存储器中。   部署 现在,应用程序已完成(请确保正确遵循“创建模型并配置组件”->“初始化模型”中的步骤),可以将其部署到目标设备上。 首先,JLink 探针必须正确连接到 RDDRONE 板的 J2 接头。然后,使用12V电源通过J4焊盘为电路板供电。 重要提示!在 J4 焊盘上焊接接头时,请确保正确遵循极性,否则可能会永久损坏板。 CAN 分析仪必须连接到 J3,CAN 终端器必须连接到 J20(位于板背面,J3 接头正下方)。 OLED显示屏必须插入J23接头。 重要提示!请确保正确遵循显示屏的极性,否则可能会永久损坏显示屏。 6 节电池模拟器必须连接到 JP1 接头。根据 RDDrone 背面的配置,将电池连接到板上的相应引脚(请参阅本文开头提供的引脚图概述)。JP1[7] 引脚必须连接到电池模拟器的 CTREF[33] 引脚。 最后,可以根据 Simulink 模型生成、编译代码并将其部署到目标设备上。为此,请转到 Simulink ->应用程序->嵌入式编码器,然后单击“构建”按钮。 SorinIBancila_0-1673882761829.png 现在,可以在诊断查看器中分析部署过程,查看应用程序是否存在任何错误,以及是否成功下载到目标设备上,如下面的图像所示,从中我们可以看到: 已成功生成 .elf 文件及其大小 下载已完成 SorinIBancila_0-1673884358229.png 重要提示!为了能够将代码下载到目标设备上,必须断开从 SBC 到 S32K144 的复位线,即在部署过程中移除 J5 上的接头。   FreeMASTER 现在应用程序已部署到目标设备,FreeMASTER 可以配置为通过 CAN 连接到目标设备。请转到 TOOLS -> Connection Wizard,然后选择通过 CAN BUS 使用 CAN 卡或 USB-to-CAN 模块进行连接。在提示窗口中,根据您的硬件和 Simulink 模型中的配置相应地配置 CAN 接口。 SorinIBancila_0-1675154330174.png 现在,FreeMASTER 与目标设备的连接已完成,必须选择 .ELF 文件以访问变量并在实时中监视它们。 SorinIBancila_1-1675155231015.png 最后,启动 FreeMASTER 与目标设备之间的通信,显示的数据应类似于以下内容: SorinIBancila_0-1675155723073.png   结束语 在本文中,我们介绍了如何使用 NXP S32K1xx 模型设计工具箱来处理自定义硬件设计(如 RDDRONE BMS772),从外设配置到目标设备下载和应用程序验证。本示例涵盖了 S32K1xx工具箱 4.3.0 为 RDDRONE 支持的所有外设。如有任何问题,请随时在下方评论。 NXP 是 NXP B.V. 的商标。所有其他产品或服务名称均为其各自所有者的财产。© 2023 NXP B.V. Arm 和 Cortex 是 Arm Limited(或其子公司或关联公司)在美国和/或其他地区拥有的商标或注册商标。相关技术可能受到任何或所有专利、版权、设计和商业秘密的保护。保留所有权利。MATLAB、Simulink、Stateflow 和 Embedded Coder 均为注册商标,MATLAB Coder、Simulink Coder 是 MathWorks 公司的商标。有关其他商标的列表,请访问 mathworks.com/trademarks。
View full article
在 Yocto 构建中创建和应用 Git 补丁? 大家好!如果您正在寻找在 Yocto 构建中创建和应用补丁的简明步骤,本文将对您大有帮助。 本文参考的是 iMX93EVK 的 Yocto 构建环境。本次示例中我们修改 BSP 的 lpspi dts 文件并创建补丁,但您同样可将此流程应用于 BSP 中的其他文件。 步骤 1:在您的目录中更改 dts 文件示例 - arch/arm64/boot/dts/freescale/imx93-11x11-evk-lpspi.dts 步骤 2 进入 Yocto 构建环境的 git 目录 cd imx-yocto-bsp-home/build_11x11/tmp/work/imx93_11x11_lpddr4x_evk-poky-linux/linux-imx/6.1.36+gitAUTOINC+04b05c5527-r0/git 步骤 3 执行 'git diff' 对比您的修改与默认版本差异 gauravsharma7_1-1707236992081.png 通过执行“git status”命令查看状态。 gauravsharma7_2-1707237129604.png 步骤 4 执行 'git add '、'git commit -m ' 和 'git format-patch -1' 以添加文件并为您的更改创建 Git 格式补丁文件。 gauravsharma7_3-1707237447073.png   将生成的补丁文件复制到 Yocto 构建查找补丁的位置 示例:我的 Yocto 构建在多个位置查找补丁,其中之一是: sources/meta-imx/meta-bsp/recipes-kernel/linux/files, 因此,在创建目录 'files' 后,我们可以将补丁文件移动到此文件夹 gauravsharma7_5-1707238332064.png   步骤 5 编辑 Linux 内核配方的 .bb 文件例如:打开 /home/nxg06361/imx-yocto-bsp-home/sources/meta-imx/meta-bsp/recipes-kernel/linux/linux-imx_6.1.bb 用于编辑 将补丁文件名附加到SRC_URI变量中 gauravsharma7_4-1707237771771.png   您还可以通过执行“git log”来验证您的补丁是否已成功应用 gauravsharma7_6-1707238632342.png 瞧!这就是您需要做的全部操作,以便为您的 Yocto 构建创建并应用 Git 补丁。 嵌入式组件 回复:如何在 Yocto 构建中创建和应用 git 补丁? 是的,下次触发构建时会重新获取 dts 源码导致修改被覆盖。这正是我们通过补丁机制确保每次构建自动应用修改的原因。 回复:如何在 Yocto 构建中创建和应用 git 补丁? 您好,@Blake001我在原始 DTS 中所做的更改,具有一定主观性。有时您可能不希望为微小改动维护多个 dts 副本,而另一些场景下保留独立副本反而是更合适的选择——这并非硬性要求。 回复:如何在 Yocto 构建中创建和应用 git 补丁? 是因为 tmp 目录中的 dts 文件吗?如果下次 Yocto 构建内核时,是否会获取原始代码覆盖我们的修改? 我尝试将 dts 复制到新 layer 并修改,但似乎方法有误。再次感谢您的指导。
View full article
フレームバッファを使用してiMXでLGVLを実行する方法 LGVLとは何ですか? LVGLは、リソースが限られたデバイスで動作するグラフィック・ライブラリです。 LVGLは完全にオープンソースで、外部依存関係がなく、最新の各種MCUやMPUで動作し、あらゆる(RT)OSやベアメタル環境で使用できます。 https://lvgl.io/   フレームバッファとは何ですか? Linuxフレームバッファ(fbdev)は、グラフィックをディスプレイに表示するために使用されるLinuxのサブシステムで、通常はシステム・コンソールで操作されます。   フレームバッファに書き込む方法 デバイスはデバイス・リストにあり、通常iMXでは「fb0」です。 Chavira_0-1713985008756.png 1. ウィンドウ・マネージャ(このBSPではWeston)を停止します。 $ systemctl stop weston   2. 次のコマンドを使用して、フレームバッファにランダム・データを書き込みます。 $ cat /dev/urandom > /dev/fb0   画面に色付きのピクセルが表示されます。 Chavira_0-1714056022934.jpeg   3. ウィンドウマネージャーを再起動してください。 $ systemctl start weston   Chavira_1-1713985008756.png アプリケーションのクロスコンパイル   1. ホストコンピュータで LGVL リポジトリをクローンします。 $ git clone https://github.com/lvgl/lv_port_linux_frame_buffer.git -b release/v8.2 $ cd lv_port_linux_frame_buffer $ git submodule update --init --recursive 2. 画面の解像度、回転、タッチ入力を設定します。       2.1 解像度の設定はmain.cの33行目と34行目にあります。 disp_drv.hor_res = 1080; disp_drv.ver_res = 1920;      2.2 回転の設定は main.c の32行目と57行目にあります。 disp_drv.sw_rotate = 3; lv_disp_set_rotation(NULL, LV_DISP_ROT_270);     2.3 タッチ入力の設定はlv_drv_conf.hの450行目にあります。 # define EVDEV_NAME "/dev/input/event2"   注:私の場合は/dev/input/event2で、入力を確認するにはコマンド「evtest」を使用します。 Chavira_2-1713985008757.png   3. コマンド「make」を使用してアプリケーションをコンパイルします。   注:ホスト・コンピュータでアプリケーションをコンパイルするには、環境を設定する必要があります。   4. 「demo」というファイルをボードと共有し、ボード上でそのコマンドを実行します。 $ ./demo   注意:アプリケーションを実行するには、westonサービスを停止する必要があります。 Chavira_1-1714056439321.jpeg Chavira_2-1714056464298.jpeg Chavira_3-1714056470761.jpeg Chavira_4-1714056477679.jpeg Chavira_0-1714147274371.jpeg メモ: BSP 6.1.36を使用してiMX8MN EVKでテスト済み マルチメディアとフルイメージで動作します。 グラフィックスとディスプレイ i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Linux
View full article