Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
KE KEA看门狗无法复位问题分析 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 在KE KEA实际使用过程中,很多客户遇到了看门狗无法复位的问题。有些客户发现当他们想要启用看门狗时,却无法通过设置寄存器 WDOG_CS1 中的 EN 位置位来真正启用看门狗;有些客户发现在调试模式下,WDOG_S1 寄存器的 EN 位始终是清零的,但从参考手册来看,该位应该在复位后设置,即使他们检查了代码,也确保没有禁用看门狗;还有一些客户发现当他们使用 KEXX_DRIVERS_V1.2.1_DEVD 代码时,自己设置了超时值寄存器,但看门狗无法在超时值内复位。现针对这些问题,本文进行分析并给出避免这些问题的建议。 从以上问题描述中,我们可以得知,导致这些问题的原因其实主要有两个:1、软件配置;2、调试器的使用 1.软件配置 1)启动代码禁用看门狗 在KE KEA示例代码中,芯片复位后会首先进入启动代码,启动代码总是先禁用看门狗,如果看门狗被禁用,则不能仅通过设置寄存器WDOG_CS1中的EN位置位来启用看门狗,因为寄存器WDOG_CS1中的EN位是复位后只能写入一次的位。仅当设置了 UPDATE 位并且执行解锁写入序列后经过 128 个总线时钟才可以修改它。 现在如何在启动代码中找到禁用代码?以KEXX_DRIVERS_V1.2.1_DEVD示例代码为例 IAR:从crt0.s中,会在启动函数中找到看门狗禁用代码WDOG_DisableWDOGEnableUpdate();。 上面的IAR启动图片是针对KE的,但是在KEA启动文件中,您无法在从飞思卡尔网站下载的KEA示例代码中看到启动函数,只有在重置发生后才能在cstartup_M_KEA128.s中找到__iar_program_start,但是__iar_program_start函数在哪里,无法在整个项目中搜索到它。其实__iar_program_start是默认的程序入口函数,它包含以下函数: 你会发现它会进入__low_level_init函数,看门狗禁用代码就在__low_level_init函数中。 MDK:来自 startup_MK0XZ4.s将会在SystemInit函数中找到看门狗禁用代码。 Codewarrior:来自__arm_start.c文件,会在__init_hardware函数中找到看门狗禁用代码。 2)Codewarrior脚本init_kinetis.tcl禁用看门狗 对于 Codewarrior,只需在 __arm_start.c 中注释禁用看门狗代码文件不足以检查复位后的看门狗启用情况,因为在codewarrior连接脚本init_kinetis.tcl中,还有看门狗禁用代码。 如果要在复位后找到寄存器 WDOG_S1 中 EN 位的状态,则必须禁用所有这些看门狗禁用代码。 3)超时寄存器配置不正确 从头文件MKE02Z2.h中,我们可以发现超时寄存器定义如下: 联合 { /* 偏移量:0x4 */ __IO uint16_t TOVAL; /**< WDOG_TOVAL 寄存器,偏移量:0x4 */ 结构 { /* 偏移量:0x4 */ __IO uint8_t TOVALH; /**< 看门狗超时值寄存器:高,偏移量:0x4 */ __IO uint8_t TOVALL; /**< 看门狗超时值寄存器:低,偏移量:0x5 */     } TOVAL8B; 这种结构意味着客户可以通过单独的 unit8 TOVALH、TOVALL 来定义看门狗超时值,或者仅使用 unint16 TOVAL 来定义它。但实际上在IAR项目使用中,举个例子,使用1khz作为看门狗的时钟源,然后要将超时值设置为1s,这意味着超时值应该是1000=0x03e8,所以其中一个客户这样配置它: 您可以发现,我们需要TOVALL = 0XE8,TOVALH = 0X03,但从测试结果来看,寄存器是TOVALL = 0X03,TOVALH = 0Xe8,这将导致超时值远大于1000,这就是为什么客户无法在1秒后重置mcu,因为寄存器配置不正确。这是由 IAR int16 存储字节序模式引起的,默认的 IAR 字节序模式是小端模式。 所以在实际使用中,建议使用单独的超时值定义。 2. debugger usage 在使用 IDE 进行调试模式时,一些客户发现即使他们注释掉所有看门狗禁用代码,他们仍然无法通过看门狗重置 MCU。检查寄存器WDOG_S1后,位EN为0,表示看门狗被禁用。但从参考手册中我们得知,复位后,EN位应该为1。是什么原因造成的?经过测试,我们发现这实际上是由调试器,即您正在使用的调试器硬件引起的。例如,在同一个项目中,已经注释了所有看门狗禁用代码,SEGGER JLINK仍然会禁用看门狗,但是PE opensda或PE multilink不会这样做,EN位默认启用,以下是测试图片,以codewarrior为例: 1) JLINK 2)PE Opensda 或 PE Multilink 因此,如果您想在调试模式下测试看门狗,并希望在重置后设置 EN,您可以选择 PE 调试器工具而不是 JLINK,但此 JLINK 功能只会影响调试模式,在将代码下载到芯片闪存后,重置后,WDOG_S1 中的 EN 位仍将被设置。 希望本文档能够帮助您解决看门狗无法重置的问题。 Freedom开发平台 Kinetis E系列MCU Kinetis EA系列MCU
View full article
适用于 S32 平台的 S32 Design Studio v3.4 Update 1(适用于 S32G2)已发布!       产品发布公告 汽车处理 S32 Design Studio v3.4 S32G2 更新 1 mikedoidge_0-1624918289889.png       Austin, Texas, USA 2021年4月30日 NXP 半导体汽车处理软件开发工具工程团队很高兴地宣布发布 适用于 S32G2 的 S32 Design Studio v3.4 更新 1 以下是一些主要功能: S32 配置工具框架 1.4,包含引脚、时钟、外设、DCD、IVT、DDR 和 QuadSPI 配置工具(需要 SDK/RTD 包才能获得特定设备的支持) 更新S32调试器 更新了 S32 Flash 工具 更新可在更新站点上在线安装,也可在 flexera 上下载 S32G2支持: (SW32G2_S32DS_3.4.1_D2104.zip) 按照 RM Rev 3 更新了头文件版本 更新可在更新站点上在线安装,也可从 flexera 下载。 笔记 S32G2 支持包需要更新 1(S32DS 平台包版本 3.4.1 和 S32DS 平台工具包版本 3.4.1)。它包含在可供下载的档案中。 安装说明 此更新可用于在线(通过 Eclipse Updater)或离线安装 在线安装: 进入菜单"帮助" -> "S32DS 扩展和更新" 对话框 从可用项目中选择,然后点击“安装/更新”按钮 image.png   离线安装: 转到 S32 Design Studio 产品下载页面: S32 Design Studio for S32 Platform -> Downloads ,单击 S32 Design Studio 3.4 -- Windows/Linux 旁边的“下载”按钮 image.png 从产品信息页面,选择S32 Design Studio 3.4 Update 1,支持S32G2系列 image.png 然后选择“SW32G2_S32DS_3.4.1_D2104.zip” 下载更新存档 zip 文件 image.png 启动 S32 Design Studio,然后转到“帮助” -> “S32DS 扩展和更新” image.png 将下载的存档添加为软件站点。点击“添加软件站点”,浏览并选择上一步下载的存档文件 image.png 从可用项目中选择并单击“安装/更新”按钮。 mikedoidge_1-1624999657510.png 此时将启动更新安装过程。   技术支持 请使用公共社区提问https://community.nxp.com/community/s32/s32ds   mikedoidge_1-1624918522979.png
View full article
感应烹饪 描述 结构框图 产品 相关文档 工具 培训 描述 恩智浦家用电器致力于提供智能、可靠和有吸引力的解决方案,使日常生活更轻松。 家电是我们日常生活的一部分,并一直在与我们一起发展。 我们的无线MCU添加了HAN、WiFi和NFC,同时我们的安全设备确保高质量的无线连接。 我们拥有广泛的精确传感器和完整的解决方案,可为任何家电轻松添加语音控制。 从燃气灶到感应性射频烹饪;低能耗充电型牙刷;带高效、可靠和稳健电机控制的搅拌机,所有这些都需要传感选件和安全连接,以提供个性化的最佳体验。 框图 Block-Diagram-Induction-Cooking-PNG.png 产品 类别名称1: MCU 产品网址 1 Arm Cortex-M4|Kinetis KE1xF 32 位 5V MCU | NXP 产品描述 1 Kinetis KE1xF MCU 属于 Kinetis E 高端系列 MCU,提供强大的 5V 解决方案,配备运行速度高达 168 MHz 的高性能 Arm ® Cortex ® -M4 内核。KE1xF 具有 Flextimer 功能,8 通道 PWM 支持具有死区插入和故障检测功能的三相电机控制。 类别名称2: 栅极驱动器 产品网址 1 GD3100 | IGBT/SiC 单通道栅极驱动器 | 恩智浦 产品描述 1 GD3100 是一款用于 IGBT/SiC 的先进单通道栅极驱动器。集成的电流隔离和低导通电阻驱动晶体管可提供高充电和放电电流。GD3100 具有 SPI,可实现可编程和诊断。 类别名称 3: LED驱动器 产品网址 1 PCA9955BTW | NXP  产品描述 1 PCA9955B 是一款 I2C 总线控制的 16 通道恒流 LED 驱动器,针对娱乐产品中的 57 mA 红/绿/蓝/琥珀色 (RGBA) LED 的调光和闪烁进行了优化。PCA9955B 工作频率为 31.25 kHz,占空比可在 0% 至 100% 之间调节,从而允许将 LED 设置为特定的亮度值。 类别名称 4: AC/DC 产品网址 1 TEA19363LT: GreenChip SMPS 初级侧控制 IC,具有 QR/DCM 操作和主动 x 电容放电功能 产品描述 1 TEA19363LT 是 GreenChip 系列开关电源控制器 IC 的成员之一。 类别名称5: 小型发动机控制 产品网址 1 MC33813: 单缸小型发动机控制IC 产品描述 1 NXP ® MC33813 是一款发动机控制模拟电源 IC,为管理单缸发动机提供成本优化的解决方案。 类别名称 6: 温度传感器 产品网址 1 PCT2075:I2C 总线 Fm+,精度为 1 摄氏度,数字温度传感器和热看门狗 产品描述 1 PCT2075 是一款温度数字转换器,在 -25 °C 至 +100 °C 范围内具有 ±1 °C 的精度。 相关文档 Document URL 主题 https://www.nxp.com/docs/en/application-note/AN5380.pdf 使用 KE1xF 上的 FTM、PDB 和 ADC 来驱动双 PMSM FOC 和 PFC 工具 工具网址 TWR-KE18F|塔式开发板|Kinetis ® MCU|恩智浦 训练 培训网址 电源调节/市场趋势以及恩智浦AC/DC电源解决方案概述 先进的模拟解决方案 框图 智能家居
View full article
LA1224RDB-B FreeRTOS PCIe Driver RC-EP 我正在尝试通过 PCIe 链路实现 LA12xx 设备的通信。LA12xx (1) PCIe RC 控制器使用支持 PCIe Gen3 速度的 M4 板(使用 LA1224-RDB-B 板)连接到 LA12xx 控制器 (2) 的 PCIe EP 控制器。 (BSP 附录 D)。 我设置了适当的 DIP 开关。使用 PCIe 驱动程序 BSP 2.4 构建 FreeRTOS。 链接无法打开。RC 和 EP 上的 LTSSM 均处于 Poll_comp 0x3 状态。 SW6[3] = 1 SW4[5-7] = 0x2 (010) SW5[5] = 1 RC 0 EP。 原因可能是什么?相同的代码和接线图,但 EP - Xilinx FPGA - 获得链接。 回复:LA1224RDB-B FreeRTOS PCIe 驱动程序 RC-EP 问题出在电路部分。谢谢大家的回答! 回复:LA1224RDB-B FreeRTOS PCIe 驱动程序 RC-EP 你好! 我们将 LA(1) 上的 PCIe2 作为 RC 连接到 LA(2) 上初始化为 EP 的 PCIe2。我们按照BSP 3.0的附录D进行连接。 在图中,与 LX 相关的端口在每个 RDB 上以黑色突出显示。(忽略箭头的颜色)。 设置 DIP 开关: On LA1 SW5[5]=1.(RC) On LA2 SW5[5]=0.(EP) 两块板上的 SW6[3] 都等于 1。(SD_MUX_SEL)。 SW4[5-7]=010(对应x4,CFG_SD_PRTCL=2)。 回复:LA1224RDB-B FreeRTOS PCIe 驱动程序 RC-EP Hello, 您的框图中有些内容没有意义: Oswalag_1-1743617509815.png  LA1224 只有 2 个 pcie 控制器,pcie1 只能配置为 EP,那么如何将 LX2160A 作为 RC 连接到 LA 作为 EP,以及如何将 LA 作为 RC(pcie2 控制器)连接到同一个 LA EP(pcie1)? 回复:LA1224RDB-B FreeRTOS PCIe 驱动程序 RC-EP 下午好,感谢您的回复! 我将其作为 EP 设备 - Xilinx Kintex FPGA 进行连接并成功连接。所以我排除了RC设备端的问题。 我还附上了示意图。 感谢您的帮助。 回复:LA1224RDB-B FreeRTOS PCIe 驱动程序 RC-EP 您好。 请分享连接的框图,并尝试将任何其他设备连接为 PCIe EP,以消除 RC 配置方面的任何问题。 此致
View full article
使用基于 S32K 模型的设计工具箱为 NXP Cup 创建自主智能自动驾驶汽车 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   1. 简介 1.1 NXP杯赛车的全新控制选项 NXP Cup 汽车开发套件通常基于 NXP 的Freedom KL25Z 板进行电机控制和图像评估。然而,赛车的控制可以通过多种 NXP 解决方案来完成。 本文将介绍基于S32K144EVB 板的解决方案以及基于 MATLAB/Simulink基于模型的设计工具箱的 S32K编程方法。此外,NXP 提供的另一个工具 - FreeMASTER - 将用于实时调试应用程序。 由于 S32K144 引脚排列与默认的 Landzo 板引脚排列不兼容,因此构建了一个额外的板来将引脚路由到所需的目的地。教程中提供了有关引脚映射的完整详细信息。 本文以教程的形式详细介绍了所有步骤并提供了所有源代码,以便人们使用该解决方案。然而,控制应用程序做得非常简单 - 这是故意的 - 并且只使用 10% 的速度来证明这个概念。 表 1.Freedom KL25Z 对比S32K144功能 Freedom KL25Z 主板功能 S32K144主板特性 32 位 ARM Cortex-M0+ 内核,最高运行频率 48 MHz 32 位 ARM Cortex-M4F 内核,运行频率高达 112 MHz 电压范围:1.71至3.6 V 电压范围:2.7 V 至 5.5 V • 高达 128 KB 的程序闪存 • 高达 16 KB SRAM • 高达 512KB 的程序闪存 • 高达 64 KB SRAM • 带有 FLL 和 PLL 的时钟生成模块,用于系统和 CPU 时钟生成 • 4 MHz 和 32 kHz 内部参考时钟 • 支持外部晶体或谐振器的系统振荡器 • 用于 RTC 和 COP 看门狗的低功耗 1kHz RC 振荡器 • 4 - 40 MHz 快速外部振荡器 (SOSC),在外部时钟模式下具有高达 50 MHz DC 外部方波输入时钟 • 48 MHz 快速内部 RC 振荡器 (FIRC) • 8 MHz 慢速内部 RC 振荡器 (SIRC) • 128 kHz 低功耗振荡器 (LPO) • 16 位 SAR ADC • 12 位 DAC • 模拟比较器 (CMP) 包含 6 位 DAC 和可编程参考输入 • 每个模块最多配备两个 12 位模数转换器 (ADC),最多配备 32 个通道模拟输入 • 一个模拟比较器 (CMP),带有内部 8 位数模转换器 (DAC) • 低功耗硬件触摸传感器接口 (TSI) • 最多 66 个通用输入/输出 (GPIO) • 不可屏蔽中断(NMI) • 最多 156 个具有中断功能的 GPIO 引脚 • 两个 8 位串行外设接口 (SPI) • 带有内置 FS/LS 收发器的 USB 双角色控制器 • USB 电压调节器 • 两个 I2C 模块 • 一个低功耗 UART 模块和两个标准 UART 模块   • 最多三个低功耗通用异步接收器/发射器 (LPUART/LIN) 模块,支持 DMA 并具有低功耗可用性 • 最多三个低功耗串行外设接口 (LPSPI) 模块 • 最多两个低功耗集成电路 (LPI2C) 模块 • 最多三个 FlexCAN 模块 • FlexIO 模块用于仿真通信协议和外设(UART、I2C、SPI、I2S、LIN、PWM 等) • 六通道定时器/PWM(TPM) • 两个双通道定时器/PWM 模块 • 2 通道周期性中断定时器 • 16 位低功耗定时器 (LPTMR) • 实时时钟 • 最多八个独立的 16 位 FlexTimers (FTM) 模块 • 一个 16 位低功耗定时器 (LPTMR),具有灵活的唤醒控制 • 两个带有灵活触发系统的可编程延迟块 (PDB) • 一个 32 位低功耗中断定时器 (LPIT),具有 4 个通道 • 32 位实时计数器 (RTC) • 4通道DMA控制器,支持最多63个请求源 • 16 通道 DMA,最多可容纳 63 个请求源 1.2 资源 基于模型的设计工具箱——用于创建复杂应用程序并直接从 MATLAB/Simulink 环境对 S32K144 MCU 进行编程的工具。该工具允许根据用户对 Simulink 模型的配置自动生成 S32K144 外设的代码。 S32K144-Q100 评估板– S32K14x 系列评估板,用于快速应用原型设计和演示。 NXP Cup 开发套件——有关开发套件硬件组件的信息以及有关汽车组装的说明。本文还介绍了有助于项目设计的软件。 FreeMaster 调试工具——实时数据监控工具,以图形模式(例如示波器)和文本模式显示变量随时间的变化。它适合在代码执行期间实时监控应用程序行为。 TSL1401 数据表– 有关相机配置的信息。 Excel 电子表格(附在文档末尾)包含用于将引脚从 Landzo 映射到 S32K144 板的路由信息。 2.硬件设置 按照开发套件所示组装所有硬件模块后,汽车将如下图所示。值得一提的是,为了将 S32K144 EVB 连接至系统板,我们创建了一个 S32K 适配器板。 图 1. 硬件设置 2.1 硬件模块 图 2 总结了此应用的硬件模块以及 S32K144 MCU 外设与这些模块的通信方式。如需了解有关电机控制的更多信息,请参阅第3.4.4章和3.4.5.要了解如何使用 Freemaster 软件调试应用程序,请参阅第4章,其中提供了详细的描述。对于摄像机信息收集也给出了类似的指示。第3.4.1和3.4.2章提供为了让汽车“看见”而需要进行的操作的特写图像。 图2.系统框图 2.2 硬件验证步骤 连接好所有硬件模块后,将USB线连接到PC。将 USB 电缆的另一端连接到 FRDM-KEA 上 J7 处的 mini-B 端口。通过 USB 供电时,LED D2 和 D3 应亮起绿色,如下图所示。此外,一旦识别出 S32K144 板,它应该会作为大容量存储设备出现在您的电脑中,名称为 EVB-S32K144。        图 3. 用于验证设置是否正确的 LED 3.基于模型的设计应用 3.1 应用描述 基于模型的设计方法包括一种基于块的可视化编程方式。一个块实现特定的功能,例如将两个数字相加。对于专为 S32K14x 系列开发的 NXP 基于模型的设计工具箱,一个块实现了 MCU 外设的功能,例如打开电路板上的绿色 LED。每个块都有不同的功能,对于复杂的应用程序,应该一起使用多个组件,以便它们可以为所提出的问题提供最佳解决方案。例如,如果您想每 10 秒切换一次绿色 LED,您将在设计中添加一个新块,该块可以计数这 10 秒,然后在计数结束时触发一个动作,即切换 LED。应根据您的应用系统模型建立块之间的连接。在构建模型时,块背后实现它们之间的连接逻辑的代码会自动生成并下载到嵌入式目标上。这样做肯定可以消除代码错误,并实现更快的设计过程。 要使用基于模型的 S32K 设计工具箱,应在您正在使用的 PC 上安装 MATLAB 编程平台。确保您遵守以下链接(基于模型的设计工具箱)上可以找到的所有系统要求。按照安装和配置步骤中的安装步骤,现在您就可以开发自己的基于模型的设计应用程序了。           3.2 应用方案 Simulink 模型生成的代码下载到 S32K144 MCU 上。下图说明了此应用程序的硬件和软件之间的映射: 图 4. 硬件到软件的映射 应用程序通过 S32K144 MCU 的外设功能控制硬件组件。该板通过转接板连接到其他硬件模块。在NXP Cup 开发套件链接中,有关于如何在系统板和驱动板上连接摄像头、伺服和电机模块的信息。这样,软件生成的信号就会传输到需要配置和控制的模块(摄像头、伺服、电机)。 图5. 应用方案 打开Simulink模型,会显示如图6所示的结构。这些功能被分组到不同的区域,每个区域包含对其内部计算内容的简短描述。如前所述,它们之间存在着块和连接。根据摄像头提供的图像,控制汽车的转向和速度。有关每个子系统如何工作的更多详细信息将在以下章节中提供。 图 6.Simulink顶层系统 3.3 应用逻辑 应用程序逻辑由下面的框图描述。来自相机的信号被转换,并且数据存储在数组中。根据数组的元素(汽车前方图像的描述),算法将计算出汽车需要转向多少前轮。这以信号的占空比值来表示,该信号将直接传输到伺服模块。恒定速度,即汽车最大可达速度的 10%,它还作为控制两个后置电机的信号的占空比给出。 图7. 应用程序逻辑图   3.4 Simulink 模型组件 3.4.1 相机配置          摄像头模块在项目中具有重要意义,因为它用于扫描和处理汽车前方的轨迹。首先,对于应用的主要目的:控制汽车并保持其在所需方向上的位置,应配置摄像头模块以便它能够正确接收模拟信号。摄像机接收到模拟信号后,应用程序会将其转换为 128 个数字值,并据此做出控制决策。由于线扫描相机模块由 128 像素的线性传感器阵列和可调节镜头组成,因此转换有 128 个数字值。按照数据表的规定,对于相机模块配置,必须生成两个信号,一个时钟和一个串行输入(CLK 和 SI)。 图 8. 相机配置波形 为了验证此模块的功能,您应该打开 FreeMaster 并检查相机是否正常工作。打开 .pmp文件并观察记录器上conv变量的变化。在相机前放一张白纸,然后移动一个物体到它前面。每当相机发现深色时,其图形演变就会呈现出容易观察到的下降,如下图所示(蓝色图形)。                                                                                      图 9. 暗物体造成的凹陷 CLK信号 对于 CLK 信号的生成,使用 FTM (FlexTimer) 块。该模块生成一个 PWM 信号,其占空比作为输入( DTC - 占空比相机)。占空比必须为数据表中指定的 0.5 (50%)。然后PWM信号通过S32K144板传递到摄像头模块的相应引脚。检查Landzo_car 引脚到 S32K144EVB文件的映射和连接。 时钟信号的频率是根据数据表中规定的值范围来选择的。(fclock 在 5 至 2000 kHz 之间)。   图 10.生成 CLK 信号   配置 FTM 块时,以下块参数将可用:                    图 11。FTM 块参数 FTM 功能有 4 个不同的模块,每个模块有 8 个成对分组的通道(每个通道可以选择一个输出引脚)。在检查了 Landzo_car 引脚与 S32K144EVB 文件中摄像头 CLK 对应引脚后,需要选择 FTM 模块及其引脚对(FTM0_CH1 表示该引脚连接到 FTM0 模块,引脚对 0-1)。还应该提到的是,在本应用程序的硬件设置中,相机模块连接到系统板的 CCD1 接口上。另有一个线性接口CCD2可供用户使用,具体使用方法见开发套件的说明。信号的频率也可以从频率设置组框中的编辑框中设置。根据数据表设置初始占空比值为 0.5。 每对通道有两种操作模式,可以从对选择旁边的弹出框中进行选择。这些模式被称为独立和互补。让我们对它们做一个简短的描述。 通过在互补模式下设置通道 n,通道 n+1 的输出将是通道 n 输出的反转,并且该模块将只有一个输入。在独立模式下,通道具有独立的输出,每个输出取决于该通道输入的占空比(在这种情况下,块有 2 个输入)。摄像头的CLK信号传输到硬件模块的单个引脚,因此不需要配置两个通道。只需一个即可输出所需的波形(在互补模式下,只会设置一对中的第一个通道;例如:通道 0、通道 2、通道 4、通道 6)。这就是为什么在这种情况下选择补充选项。输入将是 50% 的占空比,CLK 信号将在此基础上生成。通道 7 现在将是通道 6 的反向,但在下图中可以观察到通道 7 没有输出信号的引脚,因为当前应用中不需要反向的 CLK 信号。                   图 12. FTM 输出信号 SI信号 SI 信号的周期必须为 129 个 CLK 周期提供足够的时间,因为时序需要(数据表)。需要 129 个 CLK 周期来获取摄像机接收到的模拟信号的 128 个样本。为了满足正常运行模式的所有指定条件,根据需要创建 CLK 和 SI 波形的算法使用两个周期性中断定时器 (PIT) 块。 图 13。PIT块 中断表示由硬件或软件传输到处理器的信号,指示需要立即关注的重要事件。处理器通过暂停其当前活动、保存其状态并执行称为中断处理程序的函数来处理该事件,以此来响应该信号。中断是暂时的,中断处理程序完成后,处理器将恢复其正常活动。 PIT 块用于在计数器每次超时时触发中断处理程序执行。链接到 PIT 块的函数调用子系统代表中断处理程序内部的操作。中断处理程序将每隔 Period(us) 触发一次。对于第一个 PIT,它将每 20000us 触发一次,对于第二个 PIT,它将每 100us 触发一次。这意味着每次计数器达到块配置参数中指定的值时,就会触发函数调用子系统,执行其中的操作并重新初始化计数器。 图 14。PIT块参数 PIT功能有4个通道,它们基于独立的计数器实现。通道 0 不可供用户使用,因为它配置为在模型配置参数中指定的每个时间段触发整个模型的执行。 块参数中的最后一个复选框用于在应用程序初始化后立即启动计数器,而无需等待其他事件。 考虑到上述所有信息,按要求创建波形的时间涉及以下操作: 每 100µs(CLK 信号的周期)就会发生以下事情: 图 15。100us中断内的操作           用于计数时钟周期的 C 变量递增; 如果 C >=2,则 SI 信号从高变为低。(选择值 2 是为了将 SI 信号保持在高位,并保持 tw、tsu、th 和 ts 参数指定的合适时间。它们的值可以在数据表中找到)                    图 16.相机配置时间 为此使用了一个 GPIO(通用输入/输出)块,它的作用是将给定的值作为输入发送到所选引脚,该引脚可以从块配置参数中的下拉菜单中选择。 图 17。将 SI 信号设置为低 图 18. GPIO 块参数 开始转换,如果 C < 128,则转换后的值(从相机接收的信号的模数转换)将存储在 128 个元素的数组中(触发将转换后的值存储到数组子系统中)并存储到 conv 数组中。Conv变量用于调试过程,稍后将详细说明。 每 20ms(SI 信号的周期)就会发生以下事情: SI 信号使用相同的 GPIO 功能从低变为高; 时钟周期计数器C重新初始化; 根据数组的值(高值表示白色,低值表示深色)及其索引,占空比( DTS – 计算控制伺服器的占空比伺服器(它控制汽车以一定角度向左或向右转动); 图 19。20ms 中断内的操作 3.4.2相机读数 配置完相机模块(按规定生成SI和CLK信号)后,即可开始数据采集。相机给出的信号被转换成数字值并存储在数组中。转换意味着使用 ADC(模数转换器)功能。考虑到这一点,应该将 ADC 的配置块添加到 Simulink 模型中。         图 20。ADC配置块 S32K144的ADC有两个模块(ADC0、ADC1),每个模块最多有16个外部模拟输入通道,转换分辨率高达12位。摄像头模块连接到系统板的CCD 1线性接口。Landzo_car pins to S32K144EVB文件指定接收模拟信号的摄像头模块引脚为ADC1_CH10,因此应配置ADC 1模块。选择12位转换分辨率来提高采样数据的准确性。 模拟到数字的转换应该每 100us 发生一次,如时间部分所述,因为需要获取输入信号的 128 个样本(每次 C 变量增加时,都应在转换数组中存储一个值)。 图 21。转换开始 考虑到上一段中提到的事实,每次触发 PIT 块的子系统时,就会开始转换(使用 ADC 启动块),并且如果 C < 128,则采样数据将存储到数组中,该数组将包含做出伺服控制决策依据的信息。变量C是数组元素的索引,每个转换结果代表一个元素的值。按照该算法,创建了 Y 数组,它将在下一章中使用,其中描述了根据汽车前方轨道图像计算汽车应转向多少的算法。为了将值放入数组,使用赋值块。 图 22. 将转换值存储到 Y 数组     3.4.3摄像头转向算法 该算法提出了一种基本方法并使用了 if-else 逻辑。在进行简短描述之前,应该提到几件事。   考虑到微控制器的ADC模块的参考电压为5V,转换分辨率为12位,因此量子上的分辨率为5/4095。但相机的供电电压约为 3.4V,因此得出的值在 3.4 / ( 5/4095) = 2785 左右变化。该值是当摄像机前方出现白色斑点时 ADC 可以提供的最大值。房间内的光照条件是导致该值变化的主要因素。   该套件的伺服器需要一个周期为 20ms 的 PWM 信号,其脉冲持续时间为 600µs(车轮处于中立位置)、400µs(车轮最大向左转动)和 800µs(车轮最大向右转动)。这会导致占空比的以下值(0.03 - 汽车向前行驶,0.02 - 汽车向右最大转弯,0.04 - 汽车向左最大转弯)。由于伺服器的结构特殊性,应将 0.02 值替换为 0.023,以获得正确的操作模式。   对转换后的值 (Y) 的数组进行迭代。如果发现暗值(“最大白色”和当前元素的值之间的差大于阈值),则计算占空比以确定前轮应该向右转多少或向左转多少。如果在数组的前半部分发现暗值,则汽车应该向右转,如果在另一半部分发现暗值,则汽车应该向左转。但是相机从右到左拍摄图像,因此转动方向是相反的(如果在数组的前半部分发现暗值则向左,如果在数组的第二半部分发现暗值则向右)。 确定转向方式(左转或右转)后,将根据找到暗值的数组索引按比例计算 DTS。如果在数组的开头或结尾发现了代表深色的值,则意味着需要避开的东西并不正好在汽车前面,而是在汽车的一侧,因此小角度的转向应该是有效的,以使汽车保持在跑道上。另一方面,如果在数组中间发现较小的值,则应计算更大的转向角度,以确保避免深色和汽车偏离轨道。   图 23。用于计算DTS的Matlab函数 3.4.4设置伺服 然后将 DTS 传递到另一个 FTM_PWM_Config 块以生成控制伺服所需的信号。       图 24。用于控制伺服的FTM块   为此,应使用以下参数配置该块,这些参数具有与第 3.4.1 章中提到的含义相同的含义:                 图 25。FTM 块参数 根据 S32K 适配器板的硬件连接和当前设置,仅使用一个伺服电机,这是文件中提到的 STEERINGPWM1,其中包含 Landzo 汽车引脚和 S32K144 板之间的映射。该模块分配的外设是FTM0_CH1,这意味着应该从配置参数中选择模块0以及0-1对通道。为了控制伺服器,只需要一个信号,因此不需要使用2个通道。这里可以使用互补模式,就像在相机 CLK 信号配置中一样,但这样做只能配置通道 0,而应用程序需要通道 1。通过选择独立模式,占空比输入将可用于该对的两个通道,并且由于只需要通道 1 来控制该模块,因此将为另一个通道提供等于 0 的输入。考虑到电机结构的特殊性,频率设置为 50Hz,并将占空比设置为 0.03(车轮不转向)作为初始值。     图 26。FTM输出信号 3.4.5设置电机 对于两个后置电机,也适用同样的原理。占空比 (DT) 默认配置为 0.1 值,这将导致汽车以其最大速度的 10% 沿轨道移动。 控制电机的PWM信号频率为5000Hz。该值在原理图中所提到的电机驱动器数据表中指定的范围内。                 图 27。用于控制牵引电机的 FTM 模块 对于单个电机的控制,需要两个信号。电机驱动板的原理图表明,每个电机的控制使用了两个集成电路(BTN7960)。它们形成一个 H 桥,如下图所示。                 图 28。H桥 为了使电机旋转,电机连接点之间的电位差必须不为0。可以观察到每个集成电路都需要一个输入信号。向电路提供输入信号的引脚与 FTM 块的输出通道相对应。我们以第一个后置电机为例。它由 FTM 配置块控制,该块在以下通道上输出。                     图 29。FTM输出信号 通过将 FTM 配置块通道的通道 3 设置并保持为 0,等于 0 的输入将作为 IN 引脚上的输入传输到其中一个 BTN 模块(例如,传输到右边的模块)。这将触发右下方晶体管像闭合开关一样起作用。其上方的晶体管将保持断开状态,因此 OUT 点的电压将为 0V。通道 2 对应于另一个集成电路,该集成电路将在 IN 引脚上接收正输入(图片左侧)。现在,左上方的晶体管将像一个闭合的开关一样工作,而下面的晶体管将保持打开状态,从而使 OUT 点的电位表示正值(取决于作为 FTM 块输入的占空比)。因此,就会产生电位差,电机就会开始旋转。 3.4.6配置块 除此之外,该模型还需要一个配置块,用于配置目标MCU、编译器、系统时钟频率等。所有模型都需要一个配置块,因为它可以确保与目标的通信。 图 30。模型配置块 可以从块参数窗口的 MCU 选项卡中选择操作频率。对于此模型,它设置为 80Hz。还可以从 MCU 选项卡设置电路板型号、SRAM 和时钟频率。 图 31。配置块 MCU 选项卡 如果您想更改编译器和优化级别,请单击“构建工具链”选项卡并查看下图中显示的可用选项。从此选项卡中,您还可以选择模型的目标内存,可以是 FLASH 或 SRAM。                   图 32。配置块构建工具链选项卡 该应用程序通过 OpenSDA 下载到目标上。OpenSDA 是一个开放标准串行和调试适配器。它桥接 USB 主机和嵌入式目标处理器之间的串行和调试通信。确保选中“构建后下载代码”选项,以便查看应用程序在目标上运行的情况。                   图 33。配置块目标连接选项卡 有关此模型中使用的块的更多信息,请右键单击它们并选择菜单中的“帮助”选项。 4.如何使用FreeMaster调试应用程序 为了使用 FreeMaster 调试和管理来自应用程序的信息,必须在 Simulink 模型中使用 FreeMaster 配置块。 图 34。FreeMaster 配置块 区块参数配置如下图所示: 图 35。FreeMaster 配置块参数 接口字段指定应用程序和 FreeMaster 之间的通信接口。本例中选择了 LPUART1,因为它直接连接到 OpenSDA。OpenSDA 是一个开放标准串行和调试适配器。它桥接 USB 主机和嵌入式目标处理器之间的串行和调试通信。波特率表示应用程序和 FreeMaster 之间的数据传输速度,以 kbps 为单位。接收数据引脚和发送数据引脚应始终配置为 PTC6 或 PTC7(用于 LPUART1 接口),因为这些引脚连接到 OpenSDA 接收和发送引脚,如 HMI 映射中所指定。 图 36。OpenSDA 至 LPUART1 连接 通过单击“显示高级选项”复选框,可以使用多种设置,并且它们的功能都在帮助文件中指定,单击“块参数”选项卡中的“帮助”按钮后将打开该文件。 需要观察随时间变化的变量必须声明为 Volatile。已经添加到 FreeMaster 项目的变量是使用数据存储内存块声明的。                 图 37. 全局变量 可以从“块参数”选项卡中选择“易失性”选项。双击数据存储内存块后,单击信号属性选项卡,然后在代码生成组框中将存储类选项设置为易失性(自定义),如下图所示。 图 38。数据存储内存块参数 为了在每次触发子系统时调用 FreeMaster 数据采集,应在计算要记录的变量的子系统中添加一个 FreeMaster Recorder Call 块。因此,在子系统中放置了一个记录器块,该记录器块在 100us 时触发,用于记录 C 和 conv 变量的演变。 图 39。FreeMaster 录音电话 要检查 FreeMASTER 的功能,请打开 .pmp与 Simulink 模型同名的文件,然后单击红色的 STOP 按钮,以初始化与 S32K144 评估板的通信。 图 40。启动/停止 FreeMaster 通信 如果出现错误,请单击“项目”菜单并打开“选项”窗口。确保端口值与 S32K144 连接的端口值相同(您可以在设备管理器窗口中检查评估板的 COM 号)。还要确保速度与 FreeMaster 配置块的波特率相同。       图 41。FreeMaster 通信设置 单击 MAP Files 选项卡并确保默认符号文件是 .elf从构建 Simulink 模型时创建的文件夹中获取文件。它应该被称为(your_model_name.elf)。           图 42。FreeMaster .elf文件 一旦连接建立并且应用程序运行,您将观察到变量监视中的变量值如何变化。 单击窗口左侧的记录器选项,即可查看变量的图形演变。 您可以通过右键单击变量监视区域并选择监视属性选项来从监视中添加或删除变量。 右键单击录音机也将提供属性选项。使用它来选择您想要显示的变量和许多其他选项。           图 43。FreeMaster 录音机属性 5. 自主智能汽车演示及改进建议 5.1 Demo 如果您想确保在将汽车实际驶上赛道之前一切都按预期运行,您可以使用 FreeMaster 工具来可视化项目变量的演变。考虑到每个设置都是按照指定进行的,以下是您应该看到的内容。 图 44。变量监视 两个后置电机的占空比以及摄像机 CLK 信号的占空比应始终具有恒定值(分别为 0.1 和 0.5)。DTS 的值应在 0.023 和 0.04 之间变化,如“摄像机转向算法”一章中所述。C 变量必须每 100us 增加一次,每 20ms 重置一次,这意味着当它达到 200 时,应该将其设置回 0。也可以使用记录器选项以图形方式观察这种演变。Conv变量和Y数组表示转换结果,conv图形演变的所有底部表示汽车视野中存在深色。 当前内容附有汽车沿赛道行驶一圈的演示视频。   5.2 改进领域 所提出的应用程序使用基本的 if-else 算法来根据汽车前方的轨道计算前轮的转向。在所提出的解决方案中,证明了可以使用 S32K144 板和基于模型的设计方法来控制车辆并使其保持在路径上的概念。通过开发一种控制汽车速度(目前速度处于恒定值)的方法,可以实现单圈时间的重大改进。为了获得恩智浦杯最快的自动驾驶汽车,可以设计和实施许多其他硬件和软件解决方案。 NXP CUP - 线路跟随器,配备基于模型的设计工具箱,适用于 S32K 微处理器 (在 “我的视频” 中查看) 回复:使用基于S32K模型的设计工具箱为NXP Cup创建自主智能自动驾驶汽车 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi, [email protected]‌ 感谢您对本文的反馈:smileyhappy: 当然,请随时向我询问有关该主题的任何问题。 此致, Irina
View full article
LIN S32K Hi, 我希望你一切安好。我目前正在使用 S32K312NHT0MPAST 演示板(带 EB28)进行 LIN 通信测试,遇到了一些挑战,非常感谢您的指导。 首先,当将 MCU 配置为 LIN 主站时,示波器上测得的比特率与配置的波特率不匹配。其次,在从属模式下(尝试从 CANoe 接收 0x10 消息),我注意到以下问题: MCU 在检测到 RXD 信号时触发中断,但没有明确的从模式 API 可用 林 或者 Lin_ipw.c.您能否确认这是否是预期的实现? 使能BRK13寄存器(检测CANoe发送的13位Break字段)后,MCU进入 LPUART_LIN_IP_节点_状态_接收_同步 状态,但无法读取同步字节 0x55 来自 DATA 寄存器,导致程序停止。 启用 RX FIFO 并将 WATER 寄存器设置为 1 允许从 DATA 寄存器检索数据,但接收到的值不正确。根据芯片手册进行的手动寄存器调整并未解决此问题。 考虑到收发器的 220pF 电容器(类似于从属配置),我怀疑可能存在硬件/软件不匹配的情况。您能否就同步字节错位、缺少从属 API 或我可能忽略的任何关键寄存器设置的根本原因提出建议? 真诚感谢您付出的时间和专业知识。任何见解或文献参考都是无价的。 顺祝商祺! Re: LIN S32K Hello Daniel, 希望这条信息能找到您,祝您一切安好。 我想分享的是,我已经成功解决了我们讨论的所有问题。根据您的宝贵反馈,我已停止所有写入寄存器的尝试,并专注于处理 Linif.c 中接收到的 PID文件。现在,系统可以正确处理是否发送或接收响应。 此外,我集成了来自 CANoe 的消息模拟,这使我能够在调试器上成功读取 CANoe 发送的 LIN 消息和 MCU 作为从站传输的数据。 非常感谢您在整个过程中给予的支持和指导。我真的很感激。 最好的祝愿, Dongxun Re: LIN S32K Hi @dongxun, 您使用哪个 NXP 驱动程序/LIN 堆栈版本? LIN 波特率可在 LIN 驱动程序的配置器中配置,但受 LPUART 模块所选时钟的限制。LPUART 模块如何计时?LIN_Init() 之后 LPURT_BAUD 的值是多少? LIN Stack APIS:请参阅 LIN Stack 安装目录中的 LIN_UserManual.pdf。请参阅使用 API 的 Lin Stack Slave 示例。 danielmartynek_0-1743601916323.png danielmartynek_1-1743601959990.png BRK13:不要修改 UART 寄存器。这是由 LIN 驱动程序完成的。 UART 驱动程序不使用 FIFO。 我认为这里的问题不是总线电容,必须先修复波特率。 此致, Daniel
View full article
Arcturus Demo <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> uCP1020 IoTゲートウェイモジュールとMbarx IoTミドルウェア uCP1020 IoT ゲートウェイモジュールハードウェア Mbarx IoT ゲートウェイ ミドルウェア TLS の安全なリモート・サイト接続 リモートIoTデバイスのデータ集約とプロキシ ローカルとリモートのIoTサイト間のシームレスな切り替え Mbarx System Manager GUI IoTサイト管理ツール uCP1020 IoT ゲートウェイ システムオンモジュール ハードウェア このデモは、次のような方に参考になるでしょう。 中央で接続する必要があるさまざまなリモート・サイト・サイトがある リモートサイトのデータ集約と、パブリックネットワークを介した安全な接続が必要 プライベートクラウドサービスアーキテクチャを実装する必要がある(例:独自のデバイスインタラクション/ワークフローを開発します) さまざまなゲートウェイサービスをデプロイするための汎用性の高いLinuxプラットフォームが必要 RYOまたは商用IoTゲートウェイハードウェアのオプションを評価しています 差別化 このデモのハイライト モジュール式の既製のIoTゲートウェイハードウェア Mbarx IoTソリューションとツールのエコシステム GUIによるシンプルなリモート・サイト管理 プライベートクラウドまたはパブリッククラウドのIoT展開のための完全なシステムレベルのソリューション   このデモの内容 ビデオリンク : 4542 uCP1020 IoT Gatewayデモ - Mbarx IoTゲートウェイミドルウェア、エンドポイント、およびシステムマネージャーツールを使用。 デモ図 IoT物理コンポーネント ゲートウェイ SOC: QorIQ P1020デュアルコア通信プロセッサ ボード/モジュール: uCP1020 IoT ゲートウェイモジュールハードウェア ソフトウェア: Arcturus Mbarx IoT ゲートウェイ ミドルウェア Arcturus 管理ミドルウェア Arcturus PBX/通信ソフトウェアパッケージ アルクトゥルス Mbarx-Operations Controllerワークフロー管理ミドルウェア オープンソースのLinuxソフトウェア(カーネルメインラインブランチ) Edge Devices SOC:2x 10/100/1000BaseTネットワーキング は 、P1020プロセッサ およびオンボードネットワークPHYによってネイティブにサポートされます モジュール:さまざまなPCIeおよびminiPCIeベースの接続オプション(以下のワイヤレスを参照) ソフトウェア:Linux ワイヤレス・コネクティビティ モジュール:GSM/LTE/HSPA/UMTS/EVDOデータ(プロバイダー、地域、認証によって異なります)。 Telit HE910ファミリ(HEPCHGPS204T701)を使用してテスト済み モジュール:Wi-Fi(地域と認証によって異なります)。Atheros AR9390ファミリーを使用してテスト済み。 ソフトウェア:Linux センサ SOC: SPI、I2C、UART、USB、SDHC、PCIe、miniPCIeでサポートされるペリフェラル接続 クラウドインフラストラクチャ/サービス ソフトウェア/サービス: Arcturus Mbarx IoT ゲートウェイ ミドルウェアは、 K60 、 K64 に基づく uCMK60 などの Mbarx IoT エンドノードと完全に互換性があります。 Mbarx IoTプロトコルは、TLSセキュリティとシンプルな文字駆動型プロトコルを備えたTCP/IPソケットをサポートします Mbarx IoT Gatewayミドルウェアは、リモートサイトの集約、安全な接続、およびデバイス管理プロキシをサポートします。 MQTT、CoAP、およびその他の一般的なIoT / M2Mプロトコル用のオプションのプラグイン。 スマートデバイス/アプリ ソフトウェア: Mbarx-Operations Controller は、レスポンシブ HTML5 アーキテクチャを使用して、クロスプラットフォームのワークフロー駆動型の運用制御をサポートします。 Mbarx-System Managerは、PC用のサイトワイドIoTデバイス/ノード管理ツールです。 IoTシステムの機能 デバイス管理 安全なリモート・サイト接続 リモート・サイトのIoTノード/デバイス・アグリゲーション デバイス ファームウェアの一括更新、一括構成、サイト全体のプロビジョニング 安全なIoTノード/デバイスの管理と構成 クラウド/アプリケーション通信/インターワーキング Wi-Fiアクセスポイント(ホストAPモード)、セルラーデータ Security SSL/TLS 1.1,1.2 サーバーおよびクライアント (X.509) IoT開発力 組み込みプラットフォーム Kinetisマイクロコントローラ、 QorIQ 32ビットPower Architectureプロセッサ 組み込みツール Linux - カーネル、ドライバー、ミドルウェア、ユーザースペースアプリケーション開発 U-bootの開発とカスタマイズ MQX - KSDK サービス 直接のエンゲージメントを通じて利用可能なカスタマイズおよびシステムソリューション - Arcturusにお問い合わせください 利用可能なハードウェアおよびソフトウェアサービス - Arcturus にお問い合わせください IoT製品タイプ 製品/コンポーネント Vendor この製品/コンポーネントを研究または調達する エンドユーザーハードウェア ラップトップPC Win7、Win8、Win10、またはMac コマーシャル ラップトップPC エンドユーザーソフトウェア Arcturus Mbarx システムマネージャーツール コマーシャル Arcturus Mbarx IoTおよびM2Mソリューション エンドユーザースマートデバイス Arcturus uCMK60 - VoIP / IoT Board/Modules Arcturus uCMK64 - IoTボード/モジュール コマーシャル Arcturus uCMK60 - VoIP / IoT Boards/Modules エンド ユーザー エッジ デバイス TP-Link TL-SF1008P 802.3af PoE スイッチ コマーシャル TPリンクTL-SF1008P エンド ユーザー エッジ デバイス LinksysEA6100デュアルバンドスマートWi-Fiルーター コマーシャル LinksysEA6100デュアルバンドスマートWi-Fiルーター 通信インフラストラクチャ
View full article
HOWTO:生成 S-Record/Intel HEX/二进制文件 有时您需要标准 ELF 之外的其他输出文件,例如 FLASH 映像。本说明展示如何通过设置构建类型来生成支持的附加输出文件类型。 转到项目属性 右键点击 Project Explorer 中的项目名称 -> Properties,或 在 Project Explorer 中选择项目名称,从下拉菜单选择 Project -> Properties image.png 导航至 C/C++ Build -> Settings -> Cross Settings,勾选 'Create flash image' 选项。请确保 Configuration 字段中的构建配置选择正确。此处修改仅对当前选定的配置生效。 image.png 向下滚动窗口直至看见 'Apply' 按钮并点击。 image.png 您可以在新出现的 Standard S32DS Create flash image 选项中指定输出格式 image.png 构建项目后,将生成新的输出文件。 image.png image.png 概述 回复:如何生成 S-Record/Intel HEX/二进制文件 在生成二进制文件后,我注意到 S32DS ARM IDE 的 HEX 编辑器中某些区块填充了 00。这些值代表什么?如何判断这些值是真实的 0 还是空值?据我所知,闪存擦除后 MCU 通常显示 0xFF 值,但二进制文件却显示 00 #Binaryfile, #mpc5775b, Screenshot 2024-08-08 225543.png 回复:如何生成 S-Record/Intel HEX/二进制文件 Hello, 我已按照您的步骤操作。使用位置无关代码创建引导加载程序的二进制文件。但是我的应用程序正在生成 .srec。文件。我相信这将无法与引导加载程序一起工作。所以我尝试使用原始二进制选项,创建 .bin 文件。我尝试使用引导加载程序闪存此文件。但是,将二进制文件闪存到 S32K144 EVB 后,无法启动应用程序代码。请大家帮忙 谢谢
View full article
K61/K64/K66 SDHC时序 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 从 K61/K64/K66 参考手册/数据表中可以提到 SDHC 时钟可以设置为高达 50MHz。但是从 SDHC 时序规范来看,如果 SDHC 时钟为 50MHz,则 SDHC 输出时序违反 SD 规范,因为输出延迟(SD6 tOD)最大为 6.5ns。SD 规范要求 SD 卡的设置时间为 6ns,如果 SDHC 时钟为 50MHz,则输出延迟应小于 4 ns。换句话说,根据SD卡规范,输入建立时间最小为6ns,那么SD6的最大值应该是4ns,以支持50MHz的时钟频率。 因此我们建议客户将 SDHC 时钟频率降低到 40MHz,这样 6.5ns 的输出有效时间将允许他们满足卡的 6ns 设置要求。 回复:K61/K64/K66 SDHC 时序 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 我正在使用 Kinetis SDK 2.3.1 中的 sdmmc 驱动程序。如果检测到卡为高速( kSDMMCHOST_SupportHighSpeed或kSD_TimingDDR50Mode或kSD_TimingSDR25HighSpeedMode ),则使用 SD_CLOCK_50MHZ 参数调用函数SDHC_SetSdClock 。把这个参数改成40MHz就够了吗?
View full article
如何添加USB HID通信支持? FRDM-MCXN947 LCD-PAR-S035  我知道如何通过 MCUXpresso 创建 USB HID 演示。 但我不知道如何在 GUI Guider 项目中添加 USB HID 通信。 您能为这个问题添加一些文档吗? 回复:如何添加 USB HID 通信支持? Hi @GYAN, 恰恰! 如果您对如何执行此操作还有其他问题,请告诉我。 BR, Edwin. 回复:如何添加 USB HID 通信支持? Hi @EdwinHz , 感谢您的回复。 我懂了。 我可以通过 GUI Guider 开发 UI 并生成代码。 然后在 MCUXpresso 上调试 else 函数。 回复:如何添加 USB HID 通信支持? Hi @GYAN, 您不想使用 GUI Guider 打开“lvgl_guider”示例项目。此示例项目只是 MCUXpresso 中任何 LVGL/GUI Guider 项目的模板。 您要做的是将“lvgl_guider”项目放在 IDE 中,然后为同一个板/MCU 单独创建一个 GUI Guider 项目,一旦完成 GUI 创建,就用模板“lvgl_guider”MCUXpresso 项目覆盖 GUI Guider 项目中的“custom”和“generated”文件夹。 EdwinHz_0-1721412795374.png 换句话说,您只是将在 GUI Guider 中创建的实际 GUI 传递到 MCUXpresso 中的“基础”或“模板”项目。 BR, Edwin. 回复:如何添加 USB HID 通信支持? Hi @EdwinHz , 谢谢您的回复! 我按照你建议的步骤操作。 首先,在 MCUXpresso 上导入“lvgl_guider”示例代码。 GYAN_1-1721348945575.png 但我不知道如何在 GUI Guider 上打开这个项目。 GUI Guider 似乎需要识别 *.guiguiderh 才能打开该项目。 回复:如何添加 USB HID 通信支持? Hi @GYAN, 我们没有任何文档描述将 USB HID 通信添加到 GUI Guider 项目的过程。最好的选择是导入“lvgl_guider”示例代码以及您选择的 USB HID 示例代码,然后将它们合并到一个项目中。我会将 USB HID 迁移到 lvgl_guider 中,而不是相反。然后,您可以打开 GUI Guider,创建您的 GUI,并构建它。最后,您将使用 GUI Guider 项目的“自定义”和“生成”文件夹替换 MCUXpresso 项目中的“自定义”和“生成”文件夹。 如果您在此过程中遇到任何问题,请随时告诉我。 BR, Edwin.
View full article
i.MX 8M Plus 上的 AVB 支持 - 首选 MAC 您好,NXP 支持人员, 这款 SOC (iMX 8M Plus) 中的两个 MAC,哪一个更适合 AVB?它们在质量、兼容性和认证方面有哪些优势? 两个 MAC 分别是: ENET(由fec驱动)和 ENET_QOS(dwmac-eqos). 我在手册“IMX8MP_RM(修订版 2,2024 年 2 月)”中查看了这两种 MAC 的功能,它重点介绍了 ENET_QOS 上的 AVB 的高级用途。这与GenAVB_TSN所举例的参考软件形成了对比。在linux-imx-rtedge发行版中,该软件堆栈似乎使用 ENET(由 fec 驱动程序探测)。此外,它还利用了linux-imx中没有的 fec 驱动程序(特别是 CONFIG_AVB_SUPPORT)的增强功能。 同时,这篇较旧的KB 文章似乎正在使用 ENET_QOS。我还没有尝试过,但快速阅读显示它基于linux-imx但不使用 GenAVB_TSN。 我倾向于将 ENET_QOS 与 GenAVB_TSN 结合起来。目前尚不清楚这种组合是否受到支持。如果有任何技术限制,请告知。有没有一种方法可以让 GenAVB_TSN 使用linux-imx的驱动程序在 ENET_QOS 上运行? 任何见解或建议都将不胜感激。 非常感谢! Linux 多媒体 Yocto Project 回复:i.MX 8M Plus 上的 AVB 支持 - 首选 MAC 抱歉,我收到了 AE 团队的回复。目前,MPU 的 AVB 端点配置仅在 FEC 接口上受支持。 回复:i.MX 8M Plus 上的 AVB 支持 - 首选 MAC 你好@jimmychan , REALTIMEEDGEUG 中的第 5.2 章似乎重点关注 TSN 端点。但是,我对 AVB 端点很感兴趣,为此我参考了本文档 (GENAVBTSNUG)[ https://www.nxp.com/docs/en/user-guide/GENAVBTSNUG.pdf ] 就 GenAVB 堆栈而言,我找不到任何关于 ENET_QOS 是否支持 AVB 端点的明确信息。 您能否具体说明一下,AVB 端点的 GenAVB 堆栈是否支持 ENET_QOS。 感谢您的支持。 回复:i.MX 8M Plus 上的 AVB 支持 - 首选 MAC 仅供参考。请参阅以下文档中的第 5.2 章。 https://www.nxp.com.cn/docs/en/user-guide/REALTIMEEDGEUG.pdf 该设置连接到 i.MX8MP TSN 接口(EQOS)。 回复:i.MX 8M Plus 上的 AVB 支持 - 首选 MAC 你好@jimmychan , 您能否澄清一下 i.MX8M Plus 是否支持“GenAVB_TSN + ENET_QOS”组合?文档对此并不明确。 如果不支持,您能否解释一下这是否是由于 ENET_QOS MAC 的技术限制造成的?我更喜欢 ENET_QOS,因为 ENET 上有 pinmux 配置。 谢谢您的帮助。 回复:i.MX 8M Plus 上的 AVB 支持 - 首选 MAC 供您参考。 https://github.com/NXP/GenAVB_TSN https://github.com/NXP/GenAVB_TSN/releases/tag/6_1_0
View full article
MediaTek USB Wifi ドングルを有効にする 皆さん、こんにちは。 MediaTek USB WiFiドングル(Mediatek mt7921au)を有効にしようとしていますが、 defconfigで次のことを有効にしました。 CONFIG_WLAN=y CONFIG_WLAN_VENDOR_MEDIATEK=y CONFIG_MT76_CORE=y CONFIG_MT7921U=y CONFIG_MT7921_COMMON=y USB ドングルを接続して lsusb を実行すると、次のように表示されます。 root@localhost:~# lsusb バス 001 デバイス 002: ID 0e8d:7961 MediaTek Inc. Wireless_Device バス001デバイス001:ID 1d6b:0002 Linux Foundation2.0ルートハブ ただし、 ipa または nmcliにWiFiインターフェイスが表示されません。 誰かが私が欠けているかもしれないものについて何か考えを持っていますか?どんな助けでも大歓迎です。 ありがとうございます! i.MX 8ファミリ | i.MX 8QuadMax (8QM) | 8QuadPlus Yocto Project Re:MediaTek USB Wifiドングルを有効にする Hi @pilotnite! Linuxユーザーガイドを参照してください。 https://www.nxp.com/docs/en/user-guide/IMX_LINUX_USERS_GUIDE.pdf https://www.nxp.com/design/design-center/software/embedded-software/i-mx-software/embedded-linux-for-i-mx-applications-processors:IMXLINUX ワイヤレスドライバーは、WEP / WPA / WPA2 / WPA3暗号化認証ツールであるwpa_supplicantをサポートしています。 • Wi-Fiドライバ:SDIOインターフェースを備えたNXP 88W8987ベースのモジュール、PCIeおよびSDIOインターフェースを備えたNXP 88W9098ベースのモジュール、PCIeおよびSDIOインターフェースを備えたNXP 88W8997ベースのモジュール、SDIOインターフェースを備えたNXP IW416ベースのモジュール、SDIOインターフェースを備えたNXP 88W8801ベースのモジュール、およびSDIOインターフェースを備えたNXP IW612ベースのモジュールをサポートします。 •ファームウェア NXPリリースパッケージには、すべてのNXP、Wi-Fi / Bluetoothファームウェアがすでに含まれています。NXPライセンスに同意する必要があります。 Wi-Fiを実行するには、最初に次のコマンドを実行し、以下の一般的なコマンドに従います。 • 次の手順では、connman を使用して次のコマンドを実行します # For all the Wi-Fi modules: modprobe moal mod_para=nxp/wifi_mod_para.conf $connmanctl connmanctl> enable wifi connmanctl> scan wifi connmanctl> services /* This should list of the network. For example wifi_c0e4347f5053_4a62726f_managed_psk*/ connmanctl> agent on connmanctl> connect wifi_c0e4347f5053_4a62726f_managed_psk /* Enter Passphrase */ Agent RequestInput wifi_c0e4347f5053_4a62726f_managed_psk Passphrase = [ Type=psk, Requirement=mandatory ] Passphrase? connmanctl> quit よろしくお願いいたします! Chavira Re:MediaTek USB Wifiドングルを有効にする @Chavira  ご意見ありがとうございました。 機内Wi-Fiを手伝ってもらえますか?defconfig と linux-firmware (もしあれば) は何が必要ですか? Re:MediaTek USB Wifiドングルを有効にする Hi @pilotnite! 残念ながら、そのWiFiモジュールをボードで使用した経験はありません。 ボードに取り付けられているwifiの使用をお勧めします。 よろしくお願いいたします! Chavira
View full article
使用 USB C 转以太网转换器将 Ubuntu 主机笔记本电脑连接到 S32R274。 Hello, 我正在尝试将 NXP 主板(S32R274)连接到我的 Ubuntu 笔记本电脑,以便使用 S32 Design Studio 在 S32R274 主板上执行一些代码。我正在使用 USB-C 转以太网转换器通过以太网端口连接到电路板。我可以 ping NXP 开发板,并且主机笔记本电脑可以识别以太网连接。然而,当我尝试调试 S32 项目并在主板上执行它时,我收到以下错误: 最终启动序列 中的 错误 无法 执行 MI 命令:-target- 选择 远程 fe80:: 24 bb: 4778 :e687:da56%enxa0cec8abc033: 10000 来自 调试器 后端 的 错误 消息: 无法 连接:网络 不 可达。无法连接:网络不可达。 在我的调试配置中,我选择了通用 TCP/IP 作为 GDB 硬件调试下的 JTAG 设备,然后输入 NXP 板的 IPv6 地址作为 IP 地址。 我想知道这种类型的连接是否可行,因为 NXP 文档提到应该使用 PEmicro Multilink Universal JTAG 调试器来部署代码。还应该注意的是,我尝试执行的项目是一个 S32DS 应用程序项目,其中包括两个核心的永久循环。 我将非常感谢您的帮助! Best, Hadi 回复:使用 USB C 转以太网转换器将 Ubuntu 主机笔记本电脑连接到 S32R274。 Hi, 我猜想的问题在于没有多链路调试探测器。因此,如果没有它,就不可能通过以太网对微机进行编程。现在,我想尝试编写一个代码,让微机通过以太网从我的主机接收随机数据包。主机PC作为发送方,使用简单的UDP客户端向微机发送数据包。我的问题是我找不到任何关于如何初始化 S32R274 micro 上的以太网端口的资料,即使在其数据表中也没有这样的信息。我可以运行一个向 CAN 引脚传输信号的示例,并且运行良好。我将非常感谢您的帮助! 回复:使用 USB C 转以太网转换器将 Ubuntu 主机笔记本电脑连接到 S32R274。 Hello, 好的,我看到这里有两个选项: 1.您的调试没有物理连接或您的调试会话配置不正确。 2.你的微机已死。——我不认为事实如此。 您还可以尝试 PE 本机 GUI 进行调试。PPCNexus: https://www.pemicro.com/products/product_viewDetails.cfm?product_id=15320181 我们也在这里发布了一些示例代码,您可以在 S32DS 中尝试它们。 https://community.nxp.com/t5/MPC5xxx-Knowledge-Base/MPC5-software-example-list/ta-p/1102445#S32R274 顺祝商祺! Peter 回复:使用 USB C 转以太网转换器将 Ubuntu 主机笔记本电脑连接到 S32R274。 Hi, 如前所述,本教程中也进行了解释( https://community.nxp.com/t5/S32-Design-Studio-Knowledge-Base/How-To-Download-Install-Activate-and-Use-the-S32-Design-Studio/ta-p/2015086) 。 我尝试对微控制器进行编程,但仍然出现与以前相同的错误。 “服务启动序列错误 PEmicro GDB 启动失败:GDB 服务器无法与目标处理器建立连接。请检查您的连接和电源。验证调试配置中的启动设置是否准确。” “服务启动序列错误 PEmicro GDB 启动失败:无法自动检测调试硬件。请在命令行上指定。如果从 Eclipse 运行,请检查启动调试配置设置。停止。” 最好的, Hadi 回复:使用 USB C 转以太网转换器将 Ubuntu 主机笔记本电脑连接到 S32R274。 Hi, 谢谢您的回复! 我会检查并通知你。 Best, Hadi  回复:使用 USB C 转以太网转换器将 Ubuntu 主机笔记本电脑连接到 S32R274。 Hello, 好吧,如果你不编写微程序,那么你就无法与它通信。 以下是一些关于如何在 S32DS 中执行此操作的教程: https://community.nxp.com/t5/S32-Design-Studio-Knowledge-Base/S32DS-list-of-HOWTOs/ta-p/1113475 顺祝商祺! Peter 回复:使用 USB C 转以太网转换器将 Ubuntu 主机笔记本电脑连接到 S32R274。 Hello, 谢谢您的回复! 不,我只是打开 S32Ds 并尝试调试它。如果您能告诉我如何操作或者给我发送一些教程以确保以太网连接正常,我将不胜感激。 最好的, Hadi  回复:使用 USB C 转以太网转换器将 Ubuntu 主机笔记本电脑连接到 S32R274。 Hello, 但是,您是否将其编程到微控制器 RAM 或 Flash 中? 编程后,您是否验证了微机确实已编程?(查看内存/运行没有调试器的示例代码)。 或者您只是在 S32DS 中打开项目并尝试调试它? 在我看来,你的微博是空的。 顺祝商祺! Peter 回复:使用 USB C 转以太网转换器将 Ubuntu 主机笔记本电脑连接到 S32R274。 Hello, 不,没有特定的代码。我只是尝试执行如上所述的示例项目。 Best, Hadi 回复:使用 USB C 转以太网转换器将 Ubuntu 主机笔记本电脑连接到 S32R274。 Hello, 好的,但是你对 uC 编写了什么程序吗? 顺祝商祺! Peter 回复:使用 USB C 转以太网转换器将 Ubuntu 主机笔记本电脑连接到 S32R274。 你好, 谢谢您的回复! 开发套件是S32R274RRUEVB。https://www.nxp.com/docs/en/user-guide/S32R274-S32R372-QSG.pdf 是的,我尝试使用 S32 Design Studio 工具运行一个简单的 S32Ds 应用程序项目。例如,您会看到以下内容中的一个核心代码: /* * main implementation: use this 'C' sample to create your own application * */ #include "derivative.h" /* include peripheral declarations */ extern void xcptn_xmpl(void); int main(void) { volatile int counter = 0; xcptn_xmpl (); /* Configure and Enable Interrupts */ /* Loop forever */ for(;;) { counter++; } } 我没有向该项目添加任何代码,这是一个示例 S32DS 项目。 如上所述,S32 Design Studio 无法连接到 S32R274RRUEVB。我将非常感谢您的帮助! Best, Hadi 回复:使用 USB C 转以太网转换器将 Ubuntu 主机笔记本电脑连接到 S32R274。 Hello, 嗯,您指的是哪个具体的评估板? 你在其中编写了任何 SW 程序吗? 对我来说,好像板上没有编程的 SW。 顺祝商祺! Peter
View full article
第 13 节:记忆服务 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 该视频演示是MQX RTOS 应用程序开发基础知识培训课程的第十三部分。在本课程中,我们将向您介绍内存服务。 该培训由Embedded Access Inc.创建,该公司是 Freescale 赞助的培训提供商和可靠的合作伙伴。 第 13 节课程线 实验室概要 嵌入式系统中 RAM 的不同用途 不同类型的数据存储在哪里 创建内存池 从内存池分配内存 创建分区 从分区分配内存 轻量级内存管理器与全功能内存管理器 添加用于记录健康记录的队列 添加定时器和定时器 ISR 添加健康记录结构 处理发送给健康任务的消息以填写健康记录条目并将其存储在队列中 添加新的 UI 命令来打印健康记录 首先,观看第 13 节“记忆服务”的视频。 然后,完成下面的交互式实验室作业。 第 13 节:实验作业 简介 在本实验中,我们将把数据记录添加到从系统内存池分配的内存中。我们将继续充实我们在这个实验室中的应用,并将重点放在健康任务上。健康任务通过消息传递从各种任务接收数据。当周期性计时器到期时,健康任务会将其收到的数据放入队列,然后 UI 任务会打印出该数据。本课程到目前为止尚未涉及队列结构,因此您可能需要在 MQX 参考手册中简要回顾一下,但您应该很快就能掌握它。队列只是一个可以读取和添加数据的顺序列表。 请注意,我们的实现并没有对最终可以分配的数据量设置上限,因此最终系统将耗尽内存,并且不会记录额外的健康记录。对于您打算部署到现场的系统,显然最好不要耗尽可用内存,而理想的方法是使用分区。您可以自行更新此实验室,从您定义的分区分配内存,而不是直接从系统池分配内存。 目的 本实验的目标是使用内存服务来支持我们的应用程序的健康数据记录。我们还将介绍队列的使用并实现计时器。第 8 节介绍了轻量级计时器。 转让 添加队列 我们需要做的第一件事是添加一个队列结构,最好的位置是在 main.c 中我们其他全球机构的所在地。添加以下行,并确保它也在 main.h 中声明为 extern。 QUEUE_STRUCT 日志队列; 在健康任务中,为我们的log_queue添加以下初始化函数。“0”参数表示队列不受限制,可以增长到任意大小(假设系统有内存)。            _queue_init(&log_queue, 0 ); 添加计时器 为了设置计时器,我们需要在健康任务中声明一个 LWTIMER_PERIOD_STRUCT 类型的结构,以及另一个 LWTIMER_STRUCT 类型的结构。 在健康任务的初始化部分,使用 _lwtimer_create_periodic_queue() 函数创建周期为 1 秒且无等待时间的周期队列。请注意,对于 MQX 的这个 BSP,定义 BSP_ALARM_FREQUENCY 设置为 200 个滴答,每个滴答为 5 毫秒,因此代表 1 秒。然后使用_lwtimer_add_timer_to_queue()函数将计时器添加到队列中。您不需要偏移量,计时器应该调用稍后定义的“health_timer”ISR 函数。传递的参数是健康任务队列 ID。请注意,“my_qid”变量在 _msgq_open() 函数之后才有效,因此这些新行应该在 _msgq_open() 调用之后。 创建计时器函数 在 HealthTask.c 的顶部创建“health_timer”函数,该函数将在计时器到期时调用。它将接收健康任务的队列 ID 作为其唯一参数,该参数必须转换为“_queue_id”类型。 该函数将向健康任务发送一条消息,主要是让它知道是时候写入当前值的日志条目了。就像在应用程序中其他地方所做的那样,声明一个类型为“APPLICATION MESSAGE *”的消息,设置目标队列 ID,将消息类型设置为“LOG_TICK_MESSAGE”,然后发送该消息。这就是该函数需要做的全部事情。此新消息类型需要添加到 main.h 中的“APPLICATION_MESSAGE_TYPE_T”数据结构中。 健康信息结构 健康任务需要一个结构来保存其所有健康数据,因此在 main.h 中声明一个如下所示的结构。由于这将被复制到队列,因此第一个元素应该是 QUEUE_ELEMENT_STRUCT 类型,MQX 使用该类型来管理队列条目。该结构还应有一个数字来指示它在队列中的哪个条目、温度、电压以及加速度计 x、y 和 z 数据。 typedef struct {    QUEUE_ELEMENT_STRUCT    QE;      uint32_t               NUM;      uint32_t               TEMP;      uint32_t               MV;      uint16_t               X;      uint16_t               Y;      uint16_t               Z; } HEALTH_RECORD; 在健康任务的顶部声明一个类型为“HEALTH_RECORD *”的指针。 在健康任务的初始化部分(即 while(1) 循环之前)使用 _mem_alloc_system_zero() 函数从设置为零的系统池中为“HEALTH_RECORD”实例分配内存。现在您不需要检查这是否成功,我们稍后会检查。 声明一个 32 位变量,用于计算健康记录的数量,在创建第一个记录后(在上面的步骤 9 中),将此变量设置为 1。 更新消息处理 在健康任务的 while(1) 循环中,它会检查传入消息是否来自临时任务,如果存在过热情况,则会向显示任务发送消息。健康任务现在需要处理几种类型的消息,因此在接收的消息类型上使用 switch 语句是有意义的。向 switch 添加一个案例来处理 TEMP_MESSAGE 类型的消息,该案例将包含与 TEMP_MESSAGE 类型消息的 while(1) 循环中已有的相同功能。并为 LOG_TICK_MESSAGE 类型的消息添加另一个案例,目前它不会执行任何操作,我们稍后会修复它。 当收到 TEMP_MESSAGE 时,我们需要存储传入的温度,因此在处理 TEMP_MESSAGE 的情况下,将健康记录的“TEMP”参数更新为此消息中传入的温度。在这里,最好先检查一下我们的健康记录是否为 != NULL。 添加一个 ACCEL_MESSAGEs 案例,它将把传入的 x、y 和 z 轴运动值记录到健康记录中(假设它是有效的)。 添加 ADC_MESSAGEs 的案例,它将把传递的电压记录到健康记录中(假设它是有效的)。 我们现在准备添加 LOG_TICK_MESSAGE 的处理。由于在处理其他消息时健康记录已经更新,我们只需要将记录号(计数)保存到健康记录中,下次增加记录号,然后使用 _queue_enqueue() 函数将此健康记录添加到队列中,如下所示: _queue_enqueue(&log_queue,&health_record->QE) 健康任务已通过健康记录完成,因为它只是将其放入队列中,因此“health_record”指针应设置为 NULL,以便其余代码不会尝试使用它。当然,下一个记录需要一个有效的 health_record 指针,现在就需要它,以便在新消息到达时可以填充其字段。使用 _mem_alloc_system_zero() 函数(如之前所述)为另一条记录分配内存。 目前,在 while(1) 循环结束时,所有接收到的消息都被传递给显示任务。但是,我们不想传递 LOG_TICK_MESSAGE 类型的消息,因此需要更新代码以便只传递其他类型的消息。这可以通过测试 msg->MESSAGE_TYPE != LOG_TICK_MESSAGE 条件来完成,但为了更加通用并适应不应传递给显示任务的未来消息类型,处理 LOG_TICK_MESSAGEs 时最好使用 _msg_free() 函数释放消息并将“msg”指针设置为 NULL。然后在 while 循环结束时检查是否仅将非 NULL 消息发送到显示任务。 更新 UI 任务 目的是可以使用 UI 任务打印出健康记录。这是一个菜单驱动的界面,所以我们需要添加一个新命令来读取日志文件。在 UiTask.c 中为用户按下字母“l”(小写 L)来记录日志文件,并使用 queue_dequeue() 函数从队列中获取健康记录。对于这样的项目来说,使用一个小函数是一个好主意,因为代码中可能有多个地方需要执行类似的任务。这样的函数可能如下所示: 健康记录 * 获取日志记录(无效) { 返回(HEALTH_RECORD *)_queue_dequeue(&log_queue); } 添加记录号和健康记录中的所有其他数据的打印语句。处理完健康记录后,请释放其内存,以避免内存泄漏。 这将涵盖第一条记录的打印,但此 UI 命令的目的是打印出存储在队列中的所有健康记录。使用 while 循环通过我们的新 get_log_record() 函数从日志中获取记录,直到该函数返回 NULL 条目,表示没有更多记录可从队列中获取。请注意,该函数返回指向 HEALTH_RECORD 的指针,因此必须声明此类型的 UI_TASK 中的变量。 编译并运行您的代码。使用用户界面请求打印健康日志并确认数据正确。可以通过调节电位器和移动塔板来改变数据。您可能还想注释掉健康任务和显示任务的打印消息,以便这些消息不会造成干扰。 需要更多帮助吗?此实验室的完整源代码可以在此处的“实验室源代码”文件夹中找到。
View full article
第 2 部分:使用 FlexIO 的 LED 控制方法 [1] <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 我使用的是每米有 60 个 LED 的 Adafruit LED 灯条。每个 LED 都集成了 W2812B 控制器。WS2812B 使用串行协议,您可以单独控制每个 LED。该条带由柔性 PCB 材料制成,并配有防风雨护套。   https://www.adafruit.com/products/1138   WS2812B是一款将控制电路与RGB芯片集成在一个封装内的智能控制LED光源。   数据传输协议采用单NZR通讯模式。像素点上电复位后,DIN 口接收控制器传来的数据,第一个像素点采集初始 24bit 数据,然后送入内部数据锁存器,其余数据通过 DO 口送往下一个级联像素点。   级联 LED: 我的 LED 面板使用 16 行 x 30 列 = 480 个 LED。   在第一种方法中,为了生成位流,可以使用 PWM 模式的计时器并生成两个不同的占空比以发送“0”逻辑或“1”逻辑。使用 PWM + DMA 可以在生成每个单个位时卸载 CPU。Kinetis K82 中的 FlexIO 模块可以以非常有效的模式实现这一点,并同时生成 8 个通道。   但我的目标是在比特流生成任务中尽可能地减轻 CPU 负担,并找到一种简单的方法来多路复用 8 个 FlexIO 输出。这样,我们可以控制更多的 LED 行,并获得最少数量的中断和 CPU 干预。   我将使用 FlexIO 内部数据移位器来发送数据位流。每行一个移位器。由于我们只有 8 个移位器,我可以使用外部多路复用器来增加行数。卸载 LED 刷新过程的 CPU,我们可以在每个移位器输出中多路复用几行。LED 的限制将是整个面板的刷新时间。   FlexIO框图:     “1”和“0”是如何产生的?   每个像素需要 24 位红绿蓝值 (RGB)   对于每一行,我需要发送 30 x 24 位 RGB 信息。但我必须对 NZR/PWM 协议中的数据进行编码。我使用查找表将 24 bpp 信息转换为 24 x 3 = 72 bits per pixel.     这样,DMA 可以通过 60 次 24 位传输将 30 x 24 x 3 = 1440 位(整整一行)发送到移位器。每行仅获得一次 DMA 中断:       多路复用器实现:       帧缓冲区 LED:   typedef union { uint32_t  rgb; 结构{       uint8_t  b;       uint8_t  r;         uint8_t  g;       uint8_t  a;     }bytes; }ledrgb;   扩展的LED编码数据:   typedef struct {   uint32_t g;   uint32_t r;   uint32_t b; }ledrgb_ext;     查找表:   void init_conv_matrix(void) { 视频转换[0]=0x92492400; 视频转换[1]=0x92492600; 视频转换[2]=0x92493400; 视频转换[3]=0x92493600; 视频转换[4]=0x9249A400; 视频转换[5]=0x9249A600; 视频转换[6]=0x9249B400; 视频转换[7]=0x9249B600; 视频转换[8]=0x924D2400; 视频转换[9]=0x924D2600; 视频转换[10]=0x924D3400; ... };   第 3 部分:LED 面板仿真软件 或者 返回项目页面:使用 FlexIO 控制 LED 面板 工业控制
View full article
FTF-INS-F1445.pdf <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 本次会议将为客户提供与各种 Kinetis 工程师和企业主会面的机会,讨论当今嵌入式工程师面临的关键问题,例如安全性、连接性、功耗和上市时间。与会者将有机会讨论最新的 Kinetis 路线图、提出技术问题并向 Kinetis 团队提供反馈。#KinetisConnects <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 本次会议将为客户提供与各种 Kinetis 工程师和企业主会面的机会,讨论当今嵌入式工程师面临的关键问题,例如安全性、连接性、功耗和上市时间。与会者将有机会讨论最新的 Kinetis 路线图、提出技术问题并向 Kinetis 团队提供反馈。#KinetisConnects
View full article
在KDS中复制KSDK项目 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 当开始一个新项目时,很多情况下从现有项目开始并复制它会很有帮助。以下是从Kinetis 软件开发套件 (KSDK)开始执行此操作的一些方法。此示例使用 KSDK v1.3.0 和工具链 Kinetis Design Studio (KDS) v3.2.0 完成,并使用 FRDM-KL03Z 板的 KSDK hello_world 演示。   有一个名为KSDK 项目生成器的便捷工具,它对于启动新的 KSDK 项目或克隆一些 KSDK 示例项目很有用。但有时仍然更喜欢复制现有项目。   KDS 建立在 Eclipse IDE 上。Eclipse 提供了在 Project Explorer 视图中复制项目的功能。为此,请右键单击项目视图中要复制的项目,然后选择复制。然后可以将该项目粘贴到项目资源管理器中。   粘贴项目时,Eclipse 默认在您的工作区目录中创建复制的项目。   对于更简单的项目,使用这样的默认位置是可行的,其中所需的文件包含在项目目录中。但是对于 KSDK 示例项目,此默认位置通常会导致复制的项目出现错误,请参见下面的屏幕截图。原因是 KSDK 示例项目使用项目相对路径来查找项目使用的源文件和库。这些路径与原始 KDS 项目目录相关。复制到这样的新位置后,所需的文件不再位于新 KDS 项目目录中的相同相对位置。在这样的新位置,项目设置中的所有路径都需要从新位置进行更新以进行构建。   因此,复制项目时的另一个选择是将新项目放在原始项目的同一父目录下。这样,所有项目相对路径都是相同的。例如,这里使用的 hello_world KDS 项目目录默认位于 C:\Freescale\KSDK_1.3.0\examples\frdmkl03z\demo_apps\hello_world\kds。这次,新项目将被复制到同一个父目录,使用 C:\Freescale\KSDK_1.3.0\examples\frdmkl03z\demo_apps\hello_world\Copied_hello_world_frdmkl03z。使用此位置,复制的项目可以顺利构建。   如果希望将新项目移动到原始项目父目录以外的位置,则需要更新新项目设置中的路径。以下是 KDS 中的典型项目设置,需要根据新项目目录位置进行更改:   C 编译器包括 KSDK 中所有头文件的设置:   链接器设置链接器命令文件位置:   KSDK 库位置的链接器设置: 概述 回复:在KDS中复制KSDK项目 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 谢谢 David,但如果没有单独的“项目生成器”实用程序就最好了。不要让客户搜索这些东西;将其集成到 Eclipse 中(就像您的竞争对手一样)。不要构建具有愚蠢界面的独立实用程序,这些实用程序必须为单独的开发平台构建和维护;将这些设施集成到 Eclipse 中(就像您的竞争对手一样)。并且示例确实需要正确地使用所有源的相对引用并包含路径! 再次感谢, 谨致问候,戴夫 回复:在KDS中复制KSDK项目 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dave, 我同意。 我会将此反馈传递给 KSDK-Project-Generator 团队。 此致, David 回复:在KDS中复制KSDK项目 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 谢谢David-我下载了最新的KSDK。虽然我很高兴看到我报告的最后一个KSDK错误已经修复, “项目父目录”显示为灰色,无法设置 - 所以我无法克隆我的项目: 只有 demo_apps 可以用 KSDKl 克隆。 如果 Freescale/NXP 能够修复以下问题就太好了: 所有示例应用程序都应使用项目/工作区符号和符号相对路径, 对于 SDK 以及任何未直接包含在项目中的内容 在 Eclipse 环境中提供功能性项目克隆工具 修复上述KSDK工具 我们正在评估的其他供应商肯定会做这些事情! 谢谢, 谨致问候,戴夫 回复:在KDS中复制KSDK项目 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dave, 您是否尝试过使用 Derek 指出的 Kinetis SDK 项目生成器( http://www.nxp.com/ksdk已将其列在网页上供下载)? 目前版本号为 2.3。 安装中有一个 KSKD Project Generator Release Notes.pdf 。 Derek 的文档只是展示了一种手动方法,我认为大家都同意这种方法可能很乏味,但对某些人来说很有用。 此致, David 回复:在KDS中复制KSDK项目 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 嗨,德里克 - 显然你知道克隆一个示例是每个开发人员都需要多次做的事情。 因此,显然我们需要一种无需以下方法即可实现此目的的方法: 手动更正项目设置中对 KSDK 路径的每个引用(这些都应该首先相对于 Eclipse 符号进行设置!)。 追踪项目名称的每个实例并在文件名中重命名(启动配置、项目设置等), 追踪项目名称的每个实例并在所有 Eclipse XML 文件中重命名它 纠正项目对硬编码或未相对于合理符号设置的源路径的引用 请告诉我们有更好的方法吗? 这浪费了客户大量的时间! 提前致谢, 谨致问候,戴夫
View full article
[S32K312外部模式问题]监控和调整连接失败 Hello, 我正在使用S32K312 评估板和NXP 基于模型的 MATLAB/Simulink 设计工具箱。我可以成功构建并将我的应用程序部署到主板上 - 我的代码按预期运行,并且我可以看到结果。但是,当我尝试使用外部模式示例项目并单击“监控和调整”按钮时,我始终收到一条错误消息,指出 Simulink 无法连接到目标。 我已经检查了以下内容: 在模型配置参数 > 硬件实现 > 目标硬件资源 > 外部模式下选择正确的 COM 端口。 在模型配置参数 > 硬件实现 > 目标硬件资源 > 硬件下选择正确的配置项目模板 OpenSDA/PEmicro 的驱动程序似乎已正确安装(设备管理器中没有错误)。 电路板已通电。 有人可以建议额外的步骤、配置细节或已知的解决方法,以使外部模式在 S32K312 上运行吗?任何指导都将不胜感激。 谢谢。 回复:[S32K312外部模式问题]监控和调整连接失败 Hi @Berke_E , 我尝试复制s32k3xx_extmode_ebt_example_readme.html中的步骤,请继续关注: 1.打开s32k3xx_extmode_ebt模型,进入硬件设置->目标硬件资源->选择配置项目模板为S32K312-Q172 EB Tresos : Screenshot 2025-02-24 180923.png 2. 然后屏幕上会出现此警告对话框,单击“确定”: Screenshot 2025-02-24 181312.png   3.然后进入外部模式并选择开发板的串行端口,按刷新: Screenshot 2025-02-24 181607.png 4.串行 com 端口必须与设备管理器中的 K312 板 OpenSDA 匹配,在我的情况下是COM12 : Screenshot 2025-02-24 182611.png 5. 单击“应用”和“确定”,关闭“配置参数”。 6. 按下 Simulink 中的 Monitor & Tune,等待 1-2 分钟,然后蓝色 LED将在 K312 板上切换。 7. 打开示波器输出并查看正弦形状: Screenshot 2025-02-24 182049.png   这些步骤来自我的同事 @Irina_Costachescu 上面提到的 s32k3xx_extmode_ebt_example_readme.html , 希望这能帮到您, Stefan V. 回复:[S32K312外部模式问题]监控和调整连接失败 Hi @Berke_E  运行外部模式所需的所有步骤均在与模型相关的自述文件中的“准备演示”部分中描述。 为了能够提供更多指导,您能否与我们分享您正在使用的硬件设置?对于外部模式,您需要通过应用程序模型帮助文件中指定的 USB 端口启用串行连接。根据您的第1 点。我了解这个连接已经建立。 另外,根据第2点,我了解您的型号已经配置为寻址 S32K312 处理器? 谢谢! Irina
View full article
如何查找S32K3系列中每个闪存块的扇区号 Hi, 首先,您应该获取 S32K3xx 的闪存块大小。RM中的表格可以作为参考。 OliverTian_0-1641979572873.png 其次,您应该知道S32K3xx中有超级扇区和扇区。   可独立擦除的闪存块的扇区细分。扇区大小始终为 8 KB。 超级扇区包含一组扇区的闪存块的细分。超级扇区大小始终为 64 KB,由 8 个扇区组成。 第三,根据RM中PFCBLKx_SSPELOCK的信息,可以计算出每个flash block中超级扇区和扇区的数量。   OliverTian_2-1641979572947.png 例如在S32K312中,它总共有2MB闪存,每个块为1MB。所以,每个1MB中,它的前768KB都是超级扇区粒度。超级扇区数为768/64=12;后续扇区数为256/8=32。 干杯! 奥利弗
View full article
MCIMX6Q的bsp包 こんにちは。Linux環境用のBSPパッケージではなく、MCIMX6ULLに似た、MCIMX6Qチップ用のシンプルなBSPパッケージはありますか?MCIMX6QでLinux以外のリアルタイムオペレーティングシステム(RTスレッドシステム)を動作させたいと思っています。そのようなBSPパッケージがあれば、移植に非常に役立つと思います。 Screenshot-62087de5-8955-449c-bf04-6dfb488a8092.png Screenshot-25066ec1-efa6-4e02-9c66-d0823d2df8b5.png 日時:MCIMX6Q的bsp包 詳細はメールでお送りしますので、ご確認ください。
View full article