Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
MCU第二次从bootloader进入APP时,时钟初始化异常 有一个要求就是APP跳转到bootloader的时候需要保持一个IO高电平,所以通过软件复位进入Bootloader是不可行的。 第一次从Bootloader进入APP是正常的,我在进入bootloader之前将所有外设(如PIT,SPI)都初始化,然后bootloader会再次进入APP。MCU第二次从bootloader进入APP时,会卡在初始化处。我使用了IDE提供的库函数。这些图片展示了我如何发现这个问题。   1.我发现它卡在这里。 LuoSi_11-1715927008462.png LuoSi_4-1715926233966.png 2.然后停留在图片1的功能处 LuoSi_5-1715926316880.png 3.然后停留在图片2的功能处 LuoSi_6-1715926356787.png 4.然后停留在图片3的功能处 LuoSi_7-1715926412080.png 5.最后我在这里找到了。看起来循环正在等待寄存器状态直到超时。 LuoSi_8-1715926471975.png 6.然后我检查了这个寄存器的地址,发现了这个周期在等待什么。 LuoSi_9-1715926764250.png LuoSi_10-1715926813693.png LuoSi_12-1715927014672.png 但我不知道为什么这一点停留在“模式转换正在进行中”。此外,我尝试减少图 5 中的 TIMEOUT 值,然后项目将停留在初始化 PIT、SPI 或其他外围设备。 Re: MCU第二次从bootloader进入APP时,时钟初始化异常 当处理从应用程序(APP)转换到引导加载程序时保持 IO 高电平的要求时,仔细管理外围设备状态和初始化序列至关重要。以下是解决 MCU 从 Bootloader 第二次进入 APP 时卡住的问题的步骤和注意事项: 外设去初始化: 确保在跳转到引导加载程序之前所有外围设备都已正确去初始化。这包括禁用中断和将外围寄存器重置为其默认状态。 内存和堆栈管理: 验证在转换期间堆栈和堆是否得到正确管理。任何堆栈损坏或不正确的内存分配都可能导致 MCU 卡住。 引导加载程序和应用程序分离: 确保引导加载程序和应用程序代码在内存中很好地分离,并且在它们之间转换时正确设置向量表。 硬件初始化: 第二次进入APP时,确保所有硬件组件都重新正确初始化。有时外围设备在被引导加载程序使用后可能需要完全重置才能正常工作。 调试: 使用调试工具逐步执行代码并确定初始化过程卡住的位置。实现功能性硬故障处理程序来捕获任何故障并提供有关故障的更多信息。 库函数: 如果您使用 IDE 提供的库函数,请确保它们与您的引导加载程序和应用程序设置兼容。有时,可能需要自定义初始化例程。 更详细的故障排除可以参考社区对类似问题的讨论。例如,NXP 社区的一位用户遇到了类似的问题,即 MCU 在第二次从引导加载程序进入 APP 时在初始化过程中卡住了(来源)。 通过仔细管理外围设备状态、内存和初始化序列,您可以确保引导加载程序和应用程序之间的平稳过渡,即使需要保持 IO 高水平。 Re: MCU第二次从bootloader进入APP时,时钟初始化异常 Hello, 好的,所以我希望您仍然有一些外围设备处于活动状态,它们正在为 CAN 或 PWM 等时钟提供源。 门控时钟与那些外设一样,通常控制寄存器中的冻结位也与它们类似。 顺祝商祺! Peter Re: MCU第二次从bootloader进入APP时,时钟初始化异常 Hi 我按照你说的试过了。我在请求模式转换之前重置了 MC_RUN_PC_n、MC_LP_PC_n 和 ME_PCTL_n,但模式转换仍然卡住。 LuoSi_0-1716854905897.png 如下图所示,有一个寄存器叫MC_ME_DMTS,可以看到当前是什么状态。卡住时的值如下图所示。但我不清楚如何找到卡住的原因。你能帮我分析一下吗? LuoSi_2-1716855424520.png LuoSi_3-1716855523065.png Re: MCU第二次从bootloader进入APP时,时钟初始化异常 Hello, 您的模式转换被卡住了,因为您激活了一些由 PLL 提供的外围设备。 尝试将模式转换为 IRC 时钟,然后转换为应用程序设置。 当您请求模式转换时,请确保所有外设均未由您的应用程序时钟提供时钟。 petervlna_0-1716362919246.png 顺祝商祺! Peter
View full article
可以使用 gpt 错误传输消息吗 你好,Nxp团队, 目前,我们面临着使用 MATLAB MBDT 中的 Gpt 计时器配置传输消息的问题。 问题是我们使用 gpt 计时器在 1ms、10ms、100ms 内传输 CAN 消息。   在上图中,我们为Can0,Can2&Gpt配置了CAN消息块。 并且使用 Gpt 我们配置了三个 Gpt 中断块,分别为 1ms、10ms、100ms。 在每个函数调用子系统中,我们都在为Can0模块传输CAN消息。 但是我们在 1ms 内传输的 CAN 信息正在传输(使用 Pcan 分析器检查) ,除了 1ms、10ms 和 100ms 系统 CAN 信息之外,其他信息都没有被传输。 Esakki_0-1728977391067.png 但是使用 Dio 块,我们可以打开 Led - 红色持续 1ms,蓝色持续 10ms,绿色持续 100ms。 使用可传输块,只有消息在 10ms 和 100ms 内无法传输。 我已将文件附加到以下位置, 请帮助我们解决这个问题。 谢谢与问候, Esakki.P @DrKarthi @Kavin_raj_mbd @dragostoma @Irina_Costachescu @Robin_Shen @stefanvlad @Adrian_Gherca @nxp  回复:可以使用 gpt 错误传输消息吗 您好,感谢您对使用 FreeMASTER over CAN 的兴趣。 据我了解,您正在尝试使用 FreeMASTER 通过 CAN 通信调试或监控一些变量,并且您将 FLEXCAN0 控制器(微控制器的实例 CAN 0)分配给 FreeMASTER 配置块。 在 MBDT 1.5.0 中,添加了对 CAN 的 FreeMASTER 支持,同时提到 FreeMASTER 调试工具使用的 CAN 实例不能用于任何其他目的。这意味着,如果在 FreeMASTER 块中分配了 FLEXCAN0,则应用程序必须使用另一个 CanController 通过 CAN 进行通信(例如柔性罐 4)。 因此,需要在配置项目(S32 配置工具/EB Tresos)中创建新的 CanController,以便在 FreeMASTER 配置块的下拉列表中可以使用它们。这些新的 CanController 分别连接到不同的收发器,每个收发器都有自己特定的初始化过程,例如设置 En 和 Stb 引脚等等。 此外,对于引入的每个新 CanController,也需要配置与其相关的 Tx 和 Rx 引脚。 请查看本文以获取有关如何执行此操作的完整教程。 只是想让你知道,在MBDT 1.6.0发布后,新版本的 FreeMASTER 将会上市。 在此版本中, FreeMASTER 将仅使用配置项目中的一个 CanHardwareObject,这意味着 FreeMASTER 调试工具以及应用程序的其余部分可以使用相同的 CanController(CAN 实例) 。 同时,如果除了应用程序本身使用的 CanController 之外没有可用的 CanController,仍然可以使用 FreeMASTER 通过 UART 通信。 回复:可以使用 gpt 错误传输消息吗 Hello @Adrian_Gherca  谢谢你的回复, 您的解决方案帮助我解决了该问题。现在我们可以使用解决方案 2 方法在任何 gpt 上读取 Can 消息。 Vijay98_1-1729239727339.png Vijay98_0-1729238802434.png 现在我们面临另一个问题, CAN-Freemaster监控: 在模型内部创建逻辑之后,我们使用 Freemaster 块来监控逻辑内部的参数。 Vijay98_3-1729239763145.png 但是,当我们在模型内部配置带有 Can(FLEXCAN0)的 Freemaster并将其闪存到我们的硬件中并尝试使用 Pcan 设备检查 CAN 消息时。 Vijay98_4-1729239782302.png 我们在逻辑内部传输的消息没有被接收,如果我们尝试使用 Pcan 传输消息,如果我们使用带有 CAN(FLEXCAN0)的 freemaster 块,那么也无法接收。 Vijay98_5-1729239799027.png 但是如果我们使用带有串行通信的 Freemaster,我们在逻辑内部传输的消息就会在 Pcan 中成功接收。 我已将该文件附加到此帖子中。 请帮助我们解决这个问题 谢谢与问候, Esakki 回复:可以使用 gpt 错误传输消息吗 你好, 您所描述的问题很可能是因为负责 CAN 消息传输(消息缓冲区)的硬件寄存器被写入两次(当发生 1ms 和 10ms gpt 通知时)甚至三次(当发生 1ms、10ms gpt 和 100ms 通知时)而发生的。 这意味着 CAN 传输缓冲区在实际传输发生之前被覆盖,并且只有在该毫秒内最后发生的通知(两个或三个通知重叠)才有“机会”写入消息缓冲区进行传输。 如果您想在同一毫秒内发送多个 CAN 消息(就像您提供的设置一样),则有两个选项: 1) 为 Can_Write 块的 Pdu ID 输入引入不同的值(例如0、1、2),因为这将为使用此块的每个 GPT 通知指定不同的 CAN 传输消息缓冲区。 2) 使用与配置项目中现有的不同的CanHardwareObjects或根据需要创建新的CanHardwareObjects。然后在使用 Can_Write 块的任何地方选择不同的硬件对象。 Adrian_Gherca_0-1729006347465.png
View full article
FS23:重置时间问题 Hello, 我想问一下看门狗没有刷新的情况下系统复位时间的问题。配置的看门狗是: /* WdWindowReg */ ((uint16)0x0000U) | SBC_FS23_FS_WDW_PERIOD_64MS | SBC_FS23_FS_WDW_RECOVERY_64MS //| SBC_FS23_FS_WDW_EN_MASK | SBC_FS23_FS_WDW_REC_EN_MASK 系统正常退出init阶段后,我在任务中不刷新看门狗的情况下测量了系统重启波形,波形显示重启时间约为340ms。您能解释一下如何计算当前配置中的 340ms 时间吗? gumu_0-1731412342980.png 后来尝试禁用WDW_REC_EN,但发现实验现象依旧,重启时间仍然在340ms左右。 谢谢! 回复:FS23:重置时间问题 Hello Gumu, 请参阅第 19.2.1.2 节以及完整 FS23 数据表中的 19.2.2。由于看门狗刷新不正确或没有刷新,看门狗错误计数器增加 2。默认情况下,看门狗错误计数器限制设置为 6。要达到此限制,需要三次不正确的看门狗刷新或无需刷新。请检查 WD_ERR_LIMIT[1:0] 位设置。您是否将它们保留为默认值 6?示波器中的绿色波形来自 RSTB 引脚,对吗? 如果将 WD_ERR_LIMIT[1:0] 保留为 6,则需要三次不正确的 WD 刷新或无需刷新 (3*64ms=192ms),如果保留为 8,则需要四次不正确的 WD 刷新或无需刷新 (4*64ms=256ms)。 然后,如果将 WD 恢复设置为 64ms,这将增加上述时间。请检查 WDW_REC_EN 位设置。您是否设置为1?MCU故障恢复策略请参考19.2.5节。 请检查您如何设置 FCCUx 错误影响配置。您将其保留为默认值吗?如果是,请探测 FS0B 引脚。将其与 RSTB 引脚进行比较。当 WD_ERR_LIMIT[1:0] 达到其最大值时,FS0B 应被拉低,并且错误阶段应开始。请参阅图45。 最诚挚的问候, Jozef
View full article
将深度学习网络部署到 NXP i.MX RT MCU 简介 随着微控制器的最新进展,它们变得更快、更高效,能够在合理的时间内成功运行复杂的算法。其中一个重要类别是人工智能算法。同时使用 NXP ® 和 MathWorks ® 生态系统,将 AI 算法部署到 NXP 硬件的步骤变得简单而直接。 本文提供了如何基于 Mathworks 专家开发的前馈深度学习网络实现充电状态 (SoC) 估计算法的指导(使用深度学习网络在 Simulink 中估计电池充电状态)。然后使用 NXP 基于模型的 I.MX RT 设计工具箱将该算法部署在i.MX RT1060 评估套件上。 由于本文的主要目的是演示如何在 NXP 评估板上运行 AI 算法,因此该示例在处理器在环 ( PIL ) 仿真模式下运行。这种类型的模拟代表了算法验证过程中的重要一步,由于输入数据可以直接从 MATLAB 的工作区加载,因此可以轻松复制极端情况。该算法的执行是在微控制器上完成的。为了更详细地了解算法的执行情况,可以启用代码分析选项来生成详细说明执行时间的报告。   BMS是什么 电池管理系统(BMS) 是电动汽车等电池驱动设备中的关键组件。他们的主要目标是确保电池组保持最佳和安全的运行模式。在大多数任务的核心中,BMS 必须计算充电状态 (SoC) 估计。为了做出精确的估计,该算法需要对实际细胞进行精确的模型,而这些模型很难表征。这种方法的替代方法是使用神经网络等人工智能方法创建细胞的数据驱动模型。 深度学习工具箱 Mathworks 开发的深度学习工具箱™为深度神经网络在算法中的应用提供了一个框架。它使用户能够使用卷积神经网络 (ConvNets、CNNs) 和长短期记忆 (LSTM) 网络对图像、时间序列和文本数据进行分类和回归。 网络和层图不是必须在 MathWorks 生态系统中创建的,因为可以使用其他框架,例如 TensorFlow ™ 2、TensorFlow-Keras、PyTorch ® 。 必备软件 要在 i.MX RT RT1060 EVK 上创建、构建和部署 Simulink 模型,需要以下软件: MATLAB R2022a 深度学习工具箱 Simulink ® MATLAB ® 编码器™ Simulink ® Coder™ 适用于 ARM Cortex-M 处理器的Embedded Coder ® 支持包 i.MX RT MBD工具箱(版本1.3.0) 先决条件硬件 本示例所需的硬件是i.MX RT1060 评估套件。i.MX RT1060 跨界 MCU 是 EdgeVerse ™边缘计算平台的一部分。MCU 的核心是 600 MHz 的 Arm ® Cortex ® -M7 核心。该设备完全由 NXP 的MCUXpresso 软件和工具支持,这是一套全面而有凝聚力的免费软件开发工具。 模型 - 概述 深度学习工具箱中包含的BatterySOCSimulinkEstimation模型使用两种方法计算 SoC 估计:第一种方法使用神经网络,第二种方法使用扩展卡尔曼滤波算法。通过绘制这两个估计生成的数据并将其与真实值进行比较,可以验证 FNN 在 -10 C 到 25 C 之间的温度范围内以 3 的准确度预测 SoC。 SorinIBancila_0-1679400477913.png 注意!在对工具箱中包含的模型进行任何修改之前,建议创建示例的备份,以便能够恢复到原始状态。 对于此示例,预测是在 PIL 模式下在 i.MX RT1060 评估板上完成的,而卡尔曼滤波器是在计算机上本地计算的。 参考模型 必须在原始模型中将FNN块添加到新的空白模型中。由于新创建的模型用于参考模型,因此必须添加一个输入端口来接收数据(确保端口维度设置为5 ),并添加一个输出端口来返回计算的数据。这 3 个块的其他设置都可以保留默认设置。 SorinIBancila_2-1679400971796.png 接下来,在模型设置中必须进行以下更改: 硬件实现 硬件板: NXP MIMXRT1062xxxxA 目标硬件资源 下载 类型: OpenSDA OpenSDA 驱动器:单击浏览并选择分配给 IMXRT1060 的分区 PIL 通讯接口:串行接口 硬件UART: LPUART1 串行端口:分配给电路板的 COM 端口(可以使用设备管理器或在 MATLAB 命令窗口中运行serialportlist命令来找到它) 波特率: 115200 代码生成 验证 勾选启用可移植字长 顶级模特 根据深度学习工具箱中包含的BatterySOCSimulinkEstimation模型,必须移除FNN块(删除或注释)。必须向模型添加ModelReference子系统。在ModelReference子系统的BlockParameters中,选择上面创建和配置的模型。仿真模式必须设置为处理器在环 (PIL)。必须进行的另一项修改是nnInput Data Read Memory 块的采样时间,必须将其从 0(连续)更改为 -1(继承)。 SorinIBancila_3-1679401496813.png 接下来,在模型设置中必须进行以下更改: 硬件实现 硬件板: NXP MIMXRT1062xxxxA 目标硬件资源 下载 类型: OpenSDA OpenSDA 驱动器:单击浏览并选择分配给 IMXRT1060 的分区 PIL 通讯接口:串行接口 硬件UART: LPUART1 串行端口:分配给电路板的 COM 端口(可以使用设备管理器或在 MATLAB 命令窗口中运行serialportlist命令来找到它) 波特率: 115200 代码生成 验证 勾选启用可移植字长 部署和验证 现在已经配置了两个模型(顶层模型和参考模型),可以从 Simulink 中的APPS选项卡打开SIL/PIL 管理器。在SIL/PIL选项卡中,必须选择模拟仅 SIL/PIL (红色矩形),并选择被测系统为SIL/PIL 模式下的模型块(蓝色矩形)。 SorinIBancila_4-1679401726670.png 在开始模拟之前,必须执行BatterySOCSimulinkEstimation_ini.m脚本以将必要的数据加载到MATLAB的工作区中。该脚本可以在深度学习工具箱中的 Simulink 模型旁边找到。从顶层模型,可以打开SOC 范围来显示生成的数据。可以从范围内的RUN按钮启动模拟。 注意!如果模型中存在任何错误,诊断查看器可以提供重要信息。 如果模拟成功部署在目标上,则绘制到示波器中的数据应如下所示: SorinIBancila_6-1679401966625.png 分析代码 代码分析是验证算法的重要工具,因为它提供了有关执行时间的重要信息。该时间由模型设置->硬件实现->硬件板设置->目标硬件资源->分析计时器中配置的计时器来测量。默认情况下,使用PIT 计时器,通道 0 。 可以从模型设置->代码生成->验证->代码执行时间分析->测量任务执行时间启用代码生成。生成的报告可以是粗略的(仅引用模型和子系统),也可以是详细的(所有函数调用站点)。 模拟完成后,会打开一个小窗口。可以通过单击查看完整的代码执行分析报告来打开分析报告。 SorinIBancila_0-1679402825437.png   结束语 NXP 和 Mathworks 生态系统使用户能够将人工智能算法部署到 NXP 硬件上。 最后,我强烈建议对 BMS 和人工智能感兴趣的用户观看由 Javier Gazzarri (MathWorks) 和 Marius Andrei (NXP) 主持的 将基于深度学习的充电状态 (SOC) 估计算法部署到 NXP S32K3 微控制器网络 研讨会。 EdgeVerse 和 NXP 是 NXP BV 的商标。所有其他产品或服务名称均为其各自所有者的财产。© 2023 NXP BV Arm、Cortex 是 Arm Limited(或其子公司或附属公司)在美国和/或其他地方的商标和/或注册商标。相关技术可能受到专利、版权、设计和商业秘密中的部分或全部保护。版权所有。PyTorch、PyTorch 徽标和任何相关标志均为 Linux 基金会的商标。MATLAB、Simulink、Stateflow 和 Embedded Coder 是注册商标,MATLAB Coder、Simulink Coder、Deep Learning Toolbox 是 MathWorks, Inc. 的商标。请参阅 mathworks.com/trademarks以获取更多商标的列表。TensorFlow、TensorFlow 徽标和任何相关标志均为 Google Inc. 的商标。
View full article
i.MX SIM 控制器通过 EMV 认证的限制 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 简介 EMV 代表 Europay、MasterCard 和 VISA,是用于验证信用卡和借记卡支付卡交易的集成电路卡 (ICC) 和 ICC 读卡器终端(如销售点 (POS) 终端、自动柜员机 (ATM))互操作的全球标准。 任何 IC 卡读卡器都必须经过认证以符合 EMV 标准。 EMV标准定义了IC卡与IC卡终端之间在物理、电气、数据和应用层面的交互。 对于接触式智能卡,它基于标准 ISO/IEC 7816。 一些 i.MX 嵌入了用户识别模块 (SIM),旨在促进与手机 SIM 卡的通信。 由于 EMV 要求方面列出的限制,它可用于与银行智能卡间接通信。 电气限制 POS终端必须支持1.8V、3.3V、5V智能卡。 根据 i.MX 的不同,可以支持 1.8V 或 3.3V,但不能同时支持,而且 5V 肯定超出范围 I/O 电源的范围。 => i.MX 和智能卡之间需要一个级别适配器组件。 协议限制 IC卡和读卡器之间的通信是异步的(几乎是UART),但是基于公共时钟进行同步操作。 ISO7816 标准定义以下内容: 1 ETU = F / D * 1 / f ETU 是基本时间单位,它是传输一位(0 或 1)的标称时间。 F或Fi是时钟速率转换整数。 D或Di是波特率调整整数。 f 是控制器和智能卡之间使用的通信时钟的频率。 以下是控制器通过 EMV 认证必须支持的部分列表,以及 SIM 控制器的已知限制: - 波特率为 x1(Fi/Di=372/1)=> 所有智能卡的默认速度 => 支持。 - 波特率为 x2 (Fi/Di=372/2 = 186/1) => 某些智能卡的速度更高 =>不支持。 - 波特率为 x4 (Fi/Di=372/4 93/1) => 某些智能卡的速度更高 =>不支持。 - 消息长度为 12ETU => 针对 T=0 类型智能卡指定 => 支持。 - 12ETU 消息长度的 -0.2ETU 错误 => 11.8ETU 智能卡 =>不支持。 - 消息长度为 11ETU => 针对 T=1 类型智能卡指定 => 支持。 - 消息长度为 11ETU 时出现 -0.2ETU 的误差 => 10.8ETU 智能卡 =>不支持。 结束语 由于这些原因,如果不使用必须处理所有这些缺失功能的外部控制器,i.MX SIM 控制器就无法通过 EMV 认证。 SIM 卡仍可用于与外部控制器(如 Atmel AT83C26、NXP TDA8023、Terridian 或 On Semi)进行通信。 飞思卡尔没有驱动程序也没有参考设计来支持该配置。 该公司拥有为 i.MX258 + 配套智能卡控制器进行 EMV 认证的专业知识: http://www.alcineo.com i.MX2x 回复:i.MX SIM 控制器通过 EMV 认证的限制 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 无法正确配置 SIM 时钟(完全按照需要)。 回复:i.MX SIM 控制器通过 EMV 认证的限制 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好,Florent / Paul, 您能否分享有关协议限制的更多详细信息?不支持您帖子中提到的以下内容的根本原因是什么? - 波特率为 x2 (Fi/Di=372/2 = 186/1) => 某些智能卡的速度更高 =>不支持。 - 波特率为 x4 (Fi/Di=372/4 93/1) => 某些智能卡的速度更高 =>不支持。 - 12ETU 消息长度的 -0.2ETU 错误 => 11.8ETU 智能卡 =>不支持。 - 消息长度为 11ETU 时出现 -0.2ETU 的误差 => 10.8ETU 智能卡 =>不支持。 谢谢! 神威
View full article
IMX8MP扩频 Hello, 我想为我的 IMX8MP LVDS 屏幕信号添加扩频。 我发现该功能适用于 8QuadMax 和 i.MX 8QuadXPlus Display,但不适用于 i.MX 8MP。 您知道什么时候可以使用它吗?或者已经有补丁可以添加它了? 谢谢。 回复:IMX8MP扩频 它有效,谢谢。 回复:IMX8MP扩频 Hi @clemntnxp,  感谢您联系 NXP 支持。 在我们的 i.MX8MP EVK 上,扩频时钟的实现是通过软件实现的。 我们没有任何代码示例来应用所需的更改。 以下是 LVDS 接口扩频支持的描述。 LVDS 接口没有像 MIPI 或 USB 接口那样集成 PLL,因此 LDB(LVDS 显示桥)模块使用 VIDEO_PLL1 作为根时钟,并且 VIDEO_PLL1 支持 SSCG(扩频时钟发生器)。 这是 iMX8M Plus 上 LVDS 接口的框图。 brian14_0-1716397799874.png 要启用 LVDS 接口的扩频时钟,您需要在 VIDEO_PLL1 控制寄存器上写入。 您需要使用 U-Boot 设置 SSCG_EN 和其他参数(MFR、MRR、SEL_PF、SEL_PF)。 为了正确设置,请参阅 i.MX8MP 参考手册中的第 5.1.5.4.4 SSCG 和小数 PLL 部分。 祝你有美好的一天!
View full article
KW38 定制型材 此自定义配置文件示例使用温度传感器和温度收集器示例作为基础,因此可以轻松修改。这两个示例都在SDK中,因此本文档解释了如何添加湿度配置文件,以及如何修改代码以使湿度传感器和收集器工作。 简介 通用属性配置文件 (GATT) 详细规定了如何通过 BLE 连接交换所有配置文件和用户数据。GATT 仅处理实际的数据传输程序和格式。所有标准 BLE 配置文件均基于 GATT,并且必须遵守它才能正常运行。这使得 GATT 成为 BLE 规范的关键部分,因为与应用程序和用户相关的每一项数据都必须按照规则进行格式化、打包和发送。 GATT定义了两个角色:服务器和客户端。 GATT 服务器存储通过属性协议 (ATT) 传输的数据,并接受来自 GATT 客户端的属性协议请求、命令和确认。 GATT 客户端通过读取、写入、通知或指示操作访问远程 GATT 服务器上的数据。通知和指示操作由客户端启用但由服务器发起,提供一种向客户端推送数据的方法。通知未被确认,而指示已被确认。因此,通知速度更快,但可靠性较低。 Snagit Custom Profile Client Server.png GATT 数据库建立了一个层次结构来组织属性。这些属性包括配置文件、服务、特性和描述符。配置文件是高级定义,用于定义如何使用服务来启用应用程序;服务是特性的集合。描述符定义了描述特性值的属性。 Snagit Custom Profile Levels.png 为了定义 GATT 数据库,Freescale BLE Stack 中的 GATT_DB API 提供了几个宏,它是 KW38 SDK 的一部分。 服务器(传感器) 首先,我们需要使用温度传感器项目作为基础,创建我们的湿度自定义配置文件服务器(传感器)。 BLE SIG profiles 要知道配置文件或服务是否已在规范中定义,您必须在蓝牙 SIG 配置文件中查找并检查ble_sig_defines.h如果代码中已经声明了该文件( ${workspace_loc:/ ${ProjName} /bluetooth/host/interface )。在我们的案例中,没有声明服务,但是规范中声明了湿度的特性。然后,我们需要检查该特性是否已经包含在ble_sig_defines.h中。由于未包含该特征,我们需要按如下所示定义它: /*! Humidity Charactristic UUID */ #define gBleSig_Humidity_d 0x2A6F GATT Database 湿度传感器将作为 GATT 服务器,因为它将拥有供 GATT 客户端使用的所有信息。 在温度传感器演示中有电池服务和设备信息,因此您只需将温度服务更改为湿度服务   Snagit Custom Profile Humidity.png 为了创建演示,我们需要定义或开发一个与 GATT 客户端相同的服务,该服务在 gatt_uuid128.h 中声明。如果新服务与 GATT 客户端不同,它们将无法相互通信。SDK 中的所有宏、函数或结构都有一个通用模板,可帮助应用程序相应地执行操作。因此,我们需要在gatt_uuid128.h中定义此服务,如下所示: /* Humidity */ UUID128(uuid_service_humidity, 0xfe ,0x34 ,0x9b ,0x5f ,0x80 ,0x00 ,0x00 ,0x80 ,0x00 ,0x10 ,0x00 ,0x02 ,0x00 ,0xfa ,0x10 ,0x10) 所有服务和特性均在gattdb.h中声明。描述符在特征值声明之后但在下一个特征声明之前声明。在这种情况下,权限是具有标准具体描述的 CharPresFormatDescriptor。湿度特征的单位是百分比,即0x27AD 。 客户端特性配置描述符 (CCCD) 是客户端写入一些位来激活服务器通知和/或指示的描述符。 PRIMARY_SERVICE_UUID128(service_humidity, uuid_service_humidity) CHARACTERISTIC(char_humidity, gBleSig_Humidity_d, (gGattCharPropNotify_c)) VALUE(value_humidity, gBleSig_Humidity_d, (gPermissionNone_c), 2, 0x00, 0x25) DESCRIPTOR(desc_humidity, gBleSig_CharPresFormatDescriptor_d, (gPermissionFlagReadable_c), 7, 0x0E, 0x00, 0xAD, 0x27, 0x00, 0x00, 0x00) CCCD(cccd_humidity) 之后,在下一个路径${workspace_loc:/ ${ProjName} /bluetooth/profiles中创建一个文件夹humidity。找到温度文件夹,复制温度服务.c并将其粘贴到湿度文件夹内,并使用另一个名称(湿度服务.c )。然后回去寻找interface文件夹,复制temporary_interface.h并在同一路径中更改名称( humidity_interface.h )。 您需要包含所创建文件夹的路径。项目属性>C/C+ 构建>设置>工具设置>MCU C 编译器>包括: Ricardo_Zamora_0-1619646619427.png 湿度接口 moisture_interface.h文件应该有以下代码。 服务结构具有服务句柄和初始化值。 /*! Humidity Service - Configuration */ typedef struct humsConfig_tag { uint16_t serviceHandle; int16_t initialHumidity; } humsConfig_t; /*! Humidity Client - Configuration */ typedef struct humcConfig_tag { uint16_t hService; uint16_t hHumidity; uint16_t hHumCccd; uint16_t hHumDesc; gattDbCharPresFormat_t humFormat; } humcConfig_t; 湿度服务 至少在humidity_service.c上文件,应该有以下代码。 该服务存储已连接客户端的设备标识。此值在订阅和非订阅事件时更改。 /*! Humidity Service - Subscribed Client*/ static deviceId_t mHums_SubscribedClientId; 通过调用启动过程来完成服务的初始化。该函数通常在应用程序初始化时调用。在这种情况下,是在 BleApp_Config() 上。 bleResult_t Hums_Start(humsConfig_t *pServiceConfig) { mHums_SubscribedClientId = gInvalidDeviceId_c; /* Set the initial value of the humidity characteristic */ return Hums_RecordHumidityMeasurement(pServiceConfig->serviceHandle, pServiceConfig->initialHumidity); } 在停止功能时,将调用取消订阅功能。 bleResult_t Hums_Stop(humsConfig_t *pServiceConfig) { /* Stop functionality by unsubscribing */ return Hums_Unsubscribe(); } bleResult_t Hums_Unsubscribe(void) { /* Unsubscribe by invalidating the client ID */ mHums_SubscribedClientId = gInvalidDeviceId_c; return gBleSuccess_c; } 订阅功能将在主文件中使用,以便 GATT 客户端订阅湿度服务。 bleResult_t Hums_Subscribe(deviceId_t clientDeviceId) { /* Subscribe by saving the client ID */ mHums_SubscribedClientId = clientDeviceId; return gBleSuccess_c; } 根据服务的复杂程度,API 将实现额外的功能。对于湿度传感器只有一个特性。 测量值将保存到 GATT 数据库中,并向客户端发送通知。此函数需要服务句柄和新值作为输入参数。 bleResult_t Hums_RecordHumidityMeasurement(uint16_t serviceHandle, int16_t humidity) { uint16_t handle; bleResult_t result; bleUuid_t uuid = Uuid16(gBleSig_Humidity_d); /* Get handle of Humidity characteristic */ result = GattDb_FindCharValueHandleInService(serviceHandle, gBleUuidType16_c, &uuid, &handle); if (result != gBleSuccess_c) return result; /* Update characteristic value */ result = GattDb_WriteAttribute(handle, sizeof(uint16_t), (uint8_t*) &humidity); if (result != gBleSuccess_c) return result; Hts_SendHumidityMeasurementNotification(handle); return gBleSuccess_c; } 使用 GattDb_WriteAttribute 函数将测量结果保存在 GATT 数据库后,我们发送通知。 要发送通知,首先需要获取CCCD,然后检查通知是否处于活跃状态。如果通知处于活跃状态,则发送通知。 static void Hts_SendHumidityMeasurementNotification ( uint16_t handle ) { uint16_t hCccd; bool_t isNotificationActive; /* Get handle of CCCD */ if (GattDb_FindCccdHandleForCharValueHandle(handle, &hCccd) != gBleSuccess_c) return; if (gBleSuccess_c == Gap_CheckNotificationStatus (mHums_SubscribedClientId, hCccd, &isNotificationActive) && TRUE == isNotificationActive) { GattServer_SendNotification(mHums_SubscribedClientId, handle); } } 湿度传感器主文件 为了在我们的传感器示例中使用新的湿度曲线,必须进行一些修改。 首先,我们需要声明湿度服务: Ricardo_Zamora_1-1619647031739.png static humsConfig_t humsServiceConfig = {(uint16_t)service_humidity, 0}; 然后,我们需要添加或者修改以下函数: BlApp_启动 您需要修改此行: Ricardo_Zamora_2-1619647129208.png /* Device is connected, send humidity value */ BleApp_SendHumidity(); BleApp_Config 您需要启动湿度服务,并修改 PrintString 行: Ricardo_Zamora_3-1619647184184.png humsServiceConfig.initialHumidity = 0; (void)Hums_Start(&humsServiceConfig); AppPrintString("\r\nHumidity sensor -> Press switch to start advertising.\r\n"); BleApp_连接回调 两个连接事件需要进行一些修改。 连接 Ricardo_Zamora_4-1619647250926.png (void)Hums_Subscribe(peerDeviceId); gConnEvtDisconnected_c gConnEvtDisconnected_c Ricardo_Zamora_0-1619647637262.png (void)Hums_Unsubscribe(); BleApp_GattServerCallback Ricardo_Zamora_1-1619647701427.png /* Notify the humidity value when CCCD is written */ BleApp_SendHumidity() BleApp_发送湿度 并且,我们需要添加这个函数: Ricardo_Zamora_2-1619647746232.png static void BleApp_SendHumidity(void) { (void)TMR_StopTimer(appTimerId); /* Update with initial humidity */ (void)Hums_RecordHumidityMeasurement((uint16_t)service_humidity, (int16_t)(BOARD_GetTemperature())); #if defined(cPWR_UsePowerDownMode) && (cPWR_UsePowerDownMode) /* Start Sleep After Data timer */ (void)TMR_StartLowPowerTimer(appTimerId, gTmrLowPowerSecondTimer_c, TmrSeconds(gGoToSleepAfterDataTime_c), DisconnectTimerCallback, NULL); #endif } 在此示例中,记录湿度使用 BOARD_GetTemperature,使用没有任何外部传感器的示例并能够看到收集器中的变化,但是,在本节中将使用 GetHumidity 函数。 客户(收藏家) 首先,我们需要使用温度收集器项目作为基础,创建我们的湿度自定义配置文件客户端(收集器)。 BLE SIG profiles 这同样适用于客户。要知道配置文件或服务是否已在规范中定义,您必须在蓝牙 SIG 配置文件中查找并检查ble_sig_defines.h如果代码中已经声明了该文件( ${workspace_loc:/ ${ProjName} /bluetooth/host/interface )。在我们的案例中,没有声明服务,但是规范中声明了湿度的特性。然后,我们需要检查该特性是否已经包含在ble_sig_defines.h中。由于未包含该特征,我们需要按如下所示定义它: /*! Humidity Charactristic UUID */ #define gBleSig_Humidity_d 0x2A6F GATT Database 湿度收集器将配备 GATT 客户端;该设备将从 GATT 服务器接收所有信息。 本文提供的演示的工作原理类似于温度收集器。当收集器启用来自传感器的通知时,收到的通知将打印在串行终端上。 为了创建演示,我们需要定义或开发一个必须与 GATT 服务器相同的服务,这在 gatt_uuid128.h 中声明。如果新服务不一样,它们将永远无法相互通信。SDK 中的所有宏、函数或结构都有一个通用模板,可帮助应用程序采取相应的行动。因此,我们需要在gatt_uuid128.h中定义此服务如下所示: /* Humidity */ UUID128(uuid_service_humidity, 0xfe ,0x34 ,0x9b ,0x5f ,0x80 ,0x00 ,0x00 ,0x80 ,0x00 ,0x10 ,0x00 ,0x02 ,0x00 ,0xfa ,0x10 ,0x10) 之后,将湿度配置文件文件夹从传感器项目复制到收集器项目${workspace_loc:/ ${ProjName} /bluetooth/profiles 。对于这个项目,还包括新文件夹的路径。项目属性>C/C+ 构建>设置>工具设置>MCU C 编译器>包括: Ricardo_Zamora_3-1619647932968.png 湿度收集器主文件 在收集器源文件中,我们还需要做一些修改,以使用湿度配置文件。 首先我们需要修改Peer设备的自定义信息: Ricardo_Zamora_0-1619720069736.png humcConfig_t humsClientConfig; BleApp_StoreServiceHandles Ricardo_Zamora_1-1619720107622.png static void BleApp_StoreServiceHandles ( gattService_t *pService ) { uint8_t i,j; if ((pService->uuidType == gBleUuidType128_c) && FLib_MemCmp(pService->uuid.uuid128, uuid_service_humidity, 16)) { /* Found Humidity Service */ mPeerInformation.customInfo.humsClientConfig.hService = pService->startHandle; for (i = 0; i < pService->cNumCharacteristics; i++) { if ((pService->aCharacteristics[i].value.uuidType == gBleUuidType16_c) && (pService->aCharacteristics[i].value.uuid.uuid16 == gBleSig_Humidity_d)) { /* Found Humudity Char */ mPeerInformation.customInfo.humsClientConfig.hHumidity = pService->aCharacteristics[i].value.handle; for (j = 0; j < pService->aCharacteristics[i].cNumDescriptors; j++) { if (pService->aCharacteristics[i].aDescriptors[j].uuidType == gBleUuidType16_c) { switch (pService->aCharacteristics[i].aDescriptors[j].uuid.uuid16) { /* Found Humidity Char Presentation Format Descriptor */ case gBleSig_CharPresFormatDescriptor_d: { mPeerInformation.customInfo.humsClientConfig.hHumDesc = pService->aCharacteristics[i].aDescriptors[j].handle; break; } /* Found Humidity Char CCCD */ case gBleSig_CCCD_d: { mPeerInformation.customInfo.humsClientConfig.hHumCccd = pService->aCharacteristics[i].aDescriptors[j].handle; break; } default: ; /* No action required */ break; } } } } } } } BleApp_StoreDescValues Ricardo_Zamora_3-1619720232121.png if (pDesc->handle == mPeerInformation.customInfo.humsClientConfig.hHumDesc) { /* Store Humidity format*/ FLib_MemCpy(&mPeerInformation.customInfo.humsClientConfig.humFormat, pDesc->paValue, pDesc->valueLength); } BleApp_打印湿度 Ricardo_Zamora_4-1619720253851.png /*www.bluetooth.com/specifications/assigned-numbers/units */ if (mPeerInformation.customInfo.humsClientConfig.humFormat.unitUuid16 == 0x27ADU) { AppPrintString(" %\r\n"); } else { AppPrintString("\r\n"); } BleApp_GattNotification回调 Ricardo_Zamora_5-1619720342076.png if (characteristicValueHandle == mPeerInformation.customInfo.humsClientConfig.hHumidity) { BleApp_PrintHumidity(Utils_ExtractTwoByteValue(aValue)); } 检查扫描事件 Ricardo_Zamora_6-1619720374078.png foundMatch = MatchDataInAdvElementList(&adElement, &uuid_service_humidity, 16); BleApp_StateMachineHandler mAppIdle_c Ricardo_Zamora_7-1619720411241.png if (mPeerInformation.customInfo.humsClientConfig.hHumidity != gGattDbInvalidHandle_d) mAppServiceDisc_c Ricardo_Zamora_8-1619720466660.png if (mPeerInformation.customInfo.humsClientConfig.hHumDesc != 0U) mpCharProcBuffer->handle = mPeerInformation.customInfo.humsClientConfig.hHumDesc; mAppReadDescriptor_c Ricardo_Zamora_9-1619720517344.png if (mPeerInformation.customInfo.humsClientConfig.hHumCccd != 0U) BleApp_配置通知 Ricardo_Zamora_10-1619720543249.png mpCharProcBuffer->handle = mPeerInformation.customInfo.humsClientConfig.hHumCccd; 演示 现在,连接后,每次按下 KW38 湿度传感器上的 SW3 都会将值发送到 KW38 湿度收集器。   Ricardo_Zamora_14-1619720689734.png Ricardo_Zamora_13-1619720681169.png BLE软件 千瓦
View full article
SS32K344 LPUART超时计数器 大家好, 我正在尝试从 S32K344 微控制器的 LPUART 模块实现超时计数器,但遇到了一些问题。 我想用它们来监控从上次收到的消息开始经过的空闲位,所以,我的第一个问题是,它们是否有产生硬件中断的能力? 按照 S32K3XX 参考手册(第 77.6.1 节)查看 LPUART 寄存器表,我应该修改以配置超时计数器的寄存器是 TOCR、TOSR 和 TIMEOUTN。 Captura de pantalla 2025-03-05 181026.png 我注意到的第一件事是这些寄存器不在 SDK 中的 LPUART 寄存器布局 typedef 中(在 S32K344_LPUART.h 中)   Captura de pantalla 2025-03-05 180917.jpg 因此,我尝试手动访问这些寄存器,从 SDK 中获取 IP_LPUART_0_BASE 地址并添加相应的偏移量(在本例中为 0x58)。当尝试读取/写入该区域时,我遇到了硬故障。我尝试使用此方法读取上图中的其他 LPUART 寄存器,以确保方法本身没有问题,并且它运行良好。 现在我假设这个内存区域受到某种保护,但我在参考手册中找不到很多关于此的信息,所以我的问题是:情况是这样吗?该内存区域是否受到保护?如果可以的话,有什么方法可以访问它来配置超时计数器吗? 提前谢谢!   回复:SS32K344 LPUART超时计数器 Hi@xianalbela 我已经仔细检查过了,S32K344、S32k324、S32K314 和 S32K312 不支持此寄存器。 对于其他S32K3的mcu,它确实支持。 回复:SS32K344 LPUART超时计数器 你好@Senlent , 是的,我知道这个寄存器没有在“S32K344_LPUART.h”文件中定义,但我想知道是否还有其他方法可以使用LPUART超时计数器功能,因为它在参考手册中有描述。 在尝试访问这些寄存器之前,可能需要激活某种模式。 是否可以以任何方式使用此功能? 顺祝商祺! 回复:SS32K344 LPUART超时计数器 Hi@xianalbela 我检查了你的代码,语法没有错误。 但是您使用的寄存器地址未定义。 用户可以使用和访问的寄存器仅在“S32K344_LPUART.h”中。 回复:SS32K344 LPUART超时计数器 你好@Senlent , 当然,我附上了完整的项目。 我正在使用适用于 ARM 版本 3.4 的 S32DS,而我使用的 RTS 版本是适用于 S32K3xx 的 2.0.0。 回复:SS32K344 LPUART超时计数器 Hi@xianalbela 您还需要告诉我您使用的 RTD 版本。 如果你能提供我你测试过的完整项目就更好了 回复:SS32K344 LPUART超时计数器 抱歉@Senlent , 我正在重新附加该文件。 回复:SS32K344 LPUART超时计数器 Hi@xianalbela 请您再检查一下,因为我没有看到任何附件。 回复:SS32K344 LPUART超时计数器 你好@Senlent , 我正在使用 NXP 存储库中的 LpuartFlexio_Uart_Ip_Example_S32K344。 我所做的唯一更改是在 main.c 中文件(我将其附加到此回复中)来实现超时计数器(将 LPUART 实例从 3 更改为 0)并删除 Flexio UART 实例。 非常感谢! 回复:SS32K344 LPUART超时计数器 Hi@xianalbela 请提供您的演示代码,以便我可以重现您的问题,这将更容易地帮助您找到根本原因。
View full article
解放串口之重定向printf输出到IAR虚拟终端(Redirected printf output to IAR Terminal to release UART port) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />     感谢Baolei之前在weekly meeting上分享的关于在Codewarrior环境下实现printf的重定向技巧,从而在CW调试环境下的Console上实现调试信息的打印功能,我将其移植到IAR环境下并进行了测试,可以实现调试信息的交互,完全可以替代串口的功能,在这里写出来分享给大家,再次感谢baolei的分享~     通过串口打印调试信息或者实现上下位机交互是我们最常使用的调试手段之一,毕竟实现起来无论是硬件成本(接出两根线Txd和Rxd,外加一个电平转换芯片)还是软件成本(下位机写好UART驱动,上位机直接超级终端或者一些第三方串口调试助手)都是相对较低的,所以这种方式还是灰常受广大“攻城师”们欢迎的。不过如果由于I/O资源紧缺串口被用做其他用处或者板子直接没有引出串口的话(是不是产生共鸣了,呵呵),那该怎么办呢?     当然,所谓时代不同了(liao)(顺口想说“男女都一样呢”,呵呵,哎,都是生在旧社会长在红旗下的孩子啊),随着嵌入式开发生态系统越来越完善,目前也是有越来越多的Poweful开发工具支持丰富的调试功能(支持打印调试信息和交互等),但是涉及到一些版权的问题价格上还是有点小贵的(对一些小企业来说还是难以接受的),所以这个时候就需要我们动动脑筋去摸索摸索其他的方法(所谓路是探索出来的),事实证明破釜沉舟下人的潜力是无限的,呵呵,这里就分享一个折衷的办法去解决大家一直苦恼的问题,即使用IAR虚拟的串口终端来实现信息的交互和打印,下面进入正题: 测试平台:IAR6.6 + FRDM KE02开发板(我目前手里有这个,其他平台都可以) 测试代码:KE驱动库(KEXX_DRIVERS_V1.0.1_DEVD\kexx_drv_lib_release_r1.0.1\build\iar\ke02\platinum) 这里稍微提一句,我测试的是KE驱动库的代码,但是实际上只要你看懂了我下面的解决方法(授之以渔而不是鱼),其他代码都是类似的。 1)打开KE02 platinum的IAR工程,进入到platinum.c文件,找到main函数如下图1,可以看到其调用了printf打印函数,而该工程是默认调用底层串口的,我们跳转到该函数的定义如图2,再继续跳转到out_char的函数定义如图3,这下就屡清楚了,我们可以很直观的看到工程默认是调用UART底层的,呵呵,下面我们就要动手改造它对printf进行重定向; 2)首先我们需要注释掉printf的实现函数,将其屏蔽掉,然后需要给printf一个重新指向的地址,下面就该我们常见的 这位老兄出场了(貌似当初自打我开始接触Turbo C的时候就已经用到它了,老生常谈的“Hello world”就是调用它内部的printf来实现的)。我们找到Common.h文件,将 添加到其中,如下图,这样凡是需要printf的文件只需要添加common.h头文件即可: 3)这里先说说stdio.h文件的作用,我们打开stdio.h文件可以看到其内部定义了标准输入输出函数,包括我们常见的scanf和printf等函数,而这些函数所调用的底层即为IAR提供的链接到其Terminal的驱动,所以……懂的,呵呵。除此之外,我们肯定不满足只输出打印(给人略显低端的感觉有木有),所以为了体现我们不是“土豪”,我觉着有必要让它交互起来,实现真正的串口功能(因为一些类似bootloader或shell之类的还是需要输入参数的进行交互的),我在main函数添加了scanf语句用来测试输入功能,如下: 4)准备工作就绪,编译链接整个工程,然后下载到KE02的板子中并进入到Debug调试环境中,点击View->Terminal I/O调出虚拟终端,然后全步运行,就可以看到Terminal下开始打印调试信息,如下图1。当然显示输出有点小case了,我们再试试输入功能,在input框中输入‘a’,然后回车,如下图2,perfect: 5)还没完,我们要玩就玩高端大气上点档次的,我们再探索探索呢,结果又发现个小惊喜,我们点击上图右下角的“Input Mode”,弹出设置框如下,很高端啊有木有: 呵呵,看完之后是不是有种跃跃欲试的兴奋呢,呵呵,試してみて楽しんでください~ 附件为我修改之后的工程代码,仅供参考~ Re: printf 出力を IAR ターミナルにリダイレクトして UART ポートを解放する <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 変更したエンジニアリング添付ファイルを提供していただけますか?
View full article
实施攻击 - 现场演示 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 呈现了四个现场演示:定时攻击;简单功率分析;故障攻击,以及最后的RFID 中继攻击演示。 计时攻击演示 定时攻击演示展示了安全实施 PIN 的重要性 确认。如果通过以下操作实施 PIN 验证 不是时不变的 - 例如if-else结构 - 可以识别 当通过观察时间信息比较不正确的 PIN 数字时 相应的 EM 侧信道测量。通过迭代所有可能的 PIN 数字的值 最多 需要 10 次尝试 才能识别出 正确的字符 。 为了确保 PIN 查询安全,必须实现时不变比较。 例如,对所有 PIN 数字进行按位异或比较,然后进行或运算, 确保所有可能的比较都花费相同的时间。该方案如下: 框图。             简单功率分析演示 简单功率分析演示应用程序中实现的 RSA 算法减少了 为了说明的目的,以简单的 8 位实现为例。物理智能卡接口 采用的是基于接触的。 通过监测分流电阻上的电压降,可以测量功率 数字示波器上 RSA 运算的消耗。观察结果 测量表明,可以通过视觉区分单个平方运算 来自平方和乘法运算。通过反复记录此操作序列, 指数的位,即密钥,可以被直接识别。 通过使用平方和总是乘法算法等对策,解码 可以防止指数位的泄露,从而保护密钥。平方和总是 乘法算法如框图所示。    故障攻击演示 故障攻击演示展示了当手电筒处于 在没有安全措施的解封芯片上发射。 使用简单的工具——机械研磨工具和一些化学蚀刻剂——就可以 可以暴露芯片表面并粗略地将光子注入 敏感硅衬底。 在这种情况下,手电筒会导致跳过PIN验证的执行 如果闪光在正确的时刻在靠近表面的地方放电,则代码。 在正常功能到期时,UserPin 要么正确,要么不正确,并且访问 相应地授予或拒绝对数据的访问。用成功的手电筒 攻击无论输入哪个 UserPin 值都无所谓 - 经过多次尝试 攻击者跳过查询并可以访问秘密数据。    RFID中继攻击演示 这 RFID 中继攻击演示展示了一种新的范例 在移动设备上的软件模拟智能卡环境中的中继攻击。 攻击者与受害者的距离以及时间的先前情况 当受害者接近时,就会被否定。使用软件模拟智能卡 在移动设备上,攻击者可以拦截并中继 远程攻击潜在受害者。这种新的攻击模式极大地提高了 对犯罪分子来说,这种攻击将变得更加严重,从而导致恶意软件的开发力度加大。 有关个别袭击的补充信息 评估板
View full article
実装攻撃 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Timing Attackのデモ タイミング攻撃のデモでは、PIN を安全に実装することの重要性を示しています 検証。PIN 検証が次の操作で実装されている場合 時不変ではない - 例えば 、if-else 構文 - は、 タイミング情報を見て、間違ったPIN桁が比較されている場合 対応するEMサイドチャネル測定の。可能な限りすべてを反復処理することによって PIN数字の値:正しい文字は 、最大 10回の試行 で識別されます 。   PIN クエリをセキュリティで保護するには、時間不変比較を実装する必要があります。 たとえば、ビットごとの XOR 比較と、それに続くすべての PIN 数字の OR 演算などです。 すべての可能な比較に同じ時間が取られることを確認します。このスキームは、 ブロック図。                      Simple Power Analysis のデモ Simple Power Analysis デモ・アプリケーションに実装されている RSA-Algorithm が削減されます を、説明のために単純な 8 ビット実装に変更します。物理スマートカードインターフェース used は連絡先ベースです。   シャント抵抗の両端の電圧降下を監視することにより、電力を測定することができます デジタルオシロスコープでのRSA操作の消費。結果の観察 測定により、単一の 正方形 操作を視覚的に区別することが可能であることが明らかになりました 二乗演算と乗算演算から。この一連の操作を繰り返しログに記録することにより、 指数のビット、つまり秘密鍵は、直接識別できます。   二乗や常時乗算アルゴリズムなどの対策を用いることで、デコード 指数ビットの 防止とキーの保護することができます。 正方形と常に 乗算アルゴリズム をブロック図に示します。           Fault Attackのデモ Fault Attackのデモでは、懐中電灯が セキュリティ対策のないカプセル化解除されたチップで発射されます。   シンプルな工具(機械式研削工具と化学エッチング液)で、 チップの表面を露出させ、フォトンを粗雑に注入することが可能です。 敏感なシリコン基板。   この場合、懐中電灯はPIN検証の実行をスキップします フラッシュが正しいタイミングで表面近くで放電される場合にコード化します。   通常の機能の有効期限では、UserPin は正しいか正しくなく、アクセスします データに対しては、それに応じて許可または拒否されます。成功した懐中電灯で 攻撃 UserPin のどの値が入力されているかは関係ありません - 数回の試行の後 攻撃者はクエリをスキップし、シークレット データにアクセスできます。                     RFIDリレーアタックのデモ RFID リレー アタックのデモは、次の新しいパラダイムを示しています。 モバイル デバイス上のソフトウェア エミュレートされたスマートカードのコンテキストでのリレー攻撃。 被害者に対する攻撃者の近さと時間に関する以前の条件 被害者が近づくと、否定されます。ソフトウェアエミュレートされたスマートカードを使用 モバイルデバイスでは、攻撃者はトランザクションを傍受し、中継することができます。 潜在的な犠牲者をリモートで。この新しい攻撃パラダイムは、価値を大幅に向上させます この攻撃は犯罪者にとって、その結果、マルウェア開発の取り組みが増加します。   個々の攻撃に関する追加情報:     C03 通信インフラストラクチャ
View full article
2014年飞思卡尔杯全球规则 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 全球飞思卡尔杯官方规则! 2014 年新内容——联赛推出: 根据地区的不同,现在将有三个联赛。全球比赛将仅使用普通联赛车辆。 股票联赛 -使用认可的部件进行比赛,允许较少的定制 自定义联赛 -限制较少且配备自定义硬件的比赛 创新联盟 -不止于竞速。完成目标或任务即可获得积分,赢得胜利。 说明 您可以使用操作菜单栏以 PDF 格式查看此文档。 此规则适用于全球挑战。在此处查找您所在地区的规则 目前,全球挑战赛仅对普通(未修改)挑战者开放。 如果您对这些规则有任何疑问,请在下方评论区留言。如果您对区域规则有任何疑问,请在您所在区域的群组中提问。 第 1 部分:团队要求 地区冠军球队必须参加“普通”(未修改)联赛才有资格。 团队规模最多为四人。 一个团队只能有一名研究生。 汽车将仅由学生设计和制造。 希望参与者、顾问和观众表现出良好的体育精神。任何不当行为或作弊行为都可能导致取消资格。 第二部分:活动注册 参加全球挑战赛的参赛者必须获得邀请。每个地区冠军队伍都会收到一份邀请。 地区冠军队伍中的一人必须在地区决赛结束后两周内为整个队伍报名参加全球挑战赛。 第 3 节:设备要求 每支队伍应使用如下所述的相同基本零件套件。为了保证公平的比赛环境,以下要求已到位。您必须使用经批准的控制器和电机驱动板。如果赛车模型的任何标准部件损坏,则应使用相同的替换部件。 机械的 参赛时必须使用原始且未经改动的设备。 外轮胎胎面和轮辋 驱动 - 直流电机 驱动电机传动比 Servo Motor 允许的修改和限制: 您不得更改轮距(车轮之间的距离) 车辆的任何部件尺寸不得超过 250 毫米/9.85 英寸(宽)x 400毫米/15.75英寸(长)x 305毫米/12英寸(高) 您可以在底盘上钻孔并安装辅助部件,假设它包含在上述尺寸范围内。 您可以改变伺服电机和相关连杆的方向。 您可以为汽车添加“外壳”,但在检查期间必须是可拆卸的。 您可以调整或移除弹簧、连杆和其他非必要部件。 您可以将胎面粘到轮辋上。 电气 电池(单独购买) 7.2V,<=3000mAh,可充电镍镉电池或镍氢电池  每次只能使用一 (1) 块电池为车辆及其连接硬件供电 您必须使用下面其中一个经过批准的电路板来控制您的汽车。 控制系统 FRDM系列电路板 FRDM-KL25Z包含在内,但不是强制使用。 TRK系列 基于 Kinetis 的 TWR - 系列 高压电机控制和接口 TFC-屏蔽 包含 TFC-SHIELD,但不是强制使用。 Landzo 技术的双电机控制板。 允许的修改和限制: 一个处理器 – 不允许使用辅助处理器或其他可编程设备。 汽车必须使用光学传感器来导航 DC-DC升压电路不得超过电池电压。 所有电容器的总容量不应超过 2000 uF。 传感器限值 您可以使用额外的相机。 最多十六 (16) 个传感器 传感器数量示例:  红外发射器/接收器对为 1 个传感器 CCD 传感器是 1 个传感器 提供的线扫描相机是 1 个传感器 两个后轮上的霍尔效应传感器是2个传感器 安装在一个车轮上的编码器是1个传感器 显示器(允许)不算作传感器 第四部分:车辆检验 比赛前,裁判将对所有参赛作品进行技术检查。这包括第 3 部分列出的车辆规格、尺寸和设备要求。 所有车辆必须在指定时间或之前进入检查区。 一旦进入检查区,您就不能触摸赛车,直到被叫去比赛! 如有违反,组委会可取消相应队伍的参赛资格。 第五节:计时赛流程 比赛顺序将通过随机抽签决定。 当您的团队被叫到时,您可以将您的车从检查区域移走。您将有两 (2) 分钟的时间来准备汽车。 已批准的调整 -您可以: 通过板载接口配置参数。(开关、旋钮等) 改变相机的角度 更换电池  不允许的调整 - 您不得: 重新编程你的处理器 通过有线或无线通信配置参数。 任何时候都只能有一名队员在赛道上。(不包括测试时间) 2 分钟时间到之前,您必须向裁判发出“准备就绪”的信号,然后才能启动车辆。 裁判确认“就绪”后,车辆应在30秒内驶离起跑区。 每个队伍有三次机会完成一圈。将记录第一个(不是最好的)完成时间。 示例: 尝试 1 – 车辆在弯道上行驶过快并偏离轨道。沒有記錄時間。 第二次尝试——车辆成功绕轨道行驶。时间被记录下来。 尝试 3 – 因第一次(尝试 2)已被记录,因此被判失败。 每次尝试后,您有两分钟的时间对车辆进行批准(见上文)的调整。 尝试结束后,车队应将车辆送回检查区。 赛事显示屏将在每场团体赛结束后公布成绩。 第六部分:比赛日程安排 练习时间 - 在决赛之前,将提供测试赛道。此时可以进行最终校准。这将通过团队时段和/或“空闲时间”来组织。 2.将练习跑道重新配置为最终跑道。 车辆检验(参见第 4 部分) 计时赛 颁奖典礼 第 7 部分:活动人员 组委会——由资深评委和飞思卡尔活动组织者组成的委员会。负责协调活动当天的活动,并调解和解决任何争议。 裁判- 负责赛道活动。包括赛道管理,例如车辆启动和停止,以及计时和记分。裁判员由教职员工、学生和/或飞思卡尔及行业员工组成。 评委——负责解释并强制执行比赛规则。评委由飞思卡尔员工和行业赞助商成员组成。 赛事人员不得协助任何特定队伍。沟通应向所有队伍公开,不得泄露任何可能损害比赛公平性的信息。 第 8 节:犯规、失败和取消资格 本规则由飞思卡尔和活动组委会负责解释。 犯规,是一种轻微犯规,会导致罚时。 失败,则不记录当前尝试时间。允许后续尝试。 取消资格是一种严重违规行为,会导致所有时间都不被记录。 裁判将判定赛车是否冲出赛道并判罚时间。 下列任何一种情况都将被视为犯规,并会导致加时处罚: 比赛开始后,赛车未能在 30 秒内离开起跑区 [+1 秒]。 赛车越过终点线后未能在 2 米/6 英尺处停下或离开赛道 [+1 秒]。 下列任何一种情况都将被视为失败并且不会给予时间: 三个或更多车轮离开赛道表面。 赛车队未能在规定的两 (2) 分钟内做好准备。 选手在技术检查后未经裁判同意触碰赛车。 赛车离开起跑区后120秒内未能完成比赛。 在开始和结束之间的任何时间触摸汽车。 “开始”——一旦车辆越过起跑线。 “完成”——一旦车辆越过终点线。 有下列情况之一者,视为取消资格:   任何可能影响或阻碍车辆的赛道外设备或行为。 检查后随时 进行不允许的 修改。 比赛场地上有多名队员。 比赛期间有任何作弊行为。 未通过技术检验。 在切实可行的条件下,尽量保证公平、公正。争议将由飞思卡尔、组委会成员和评委投票解决。 第 9 节:计时/计分 将使用电子门和/或手持计时器来记录时间。 当赛车的第一部分冲出起跑线/终点线时,时间开始和结束。 犯规将导致赛车的单圈时间被加长。 取消资格和失败将导致没有分数。 第十节 赛道参数 在决赛前一天,将提供一条采用与最终赛道相同材料制成的测试赛道,用于校准和设计修改。 直到比赛当天,参赛者才会知道最终赛道的实际布局。 赛道宽度不得小于 600 毫米/23.65 英寸。 材料和尺寸规格可以在社区中找到。 赛道表面为哑光白色,赛道每条边缘都有一条连续的黑线(25 毫米/1 英寸宽)。 赛道可以90°交叉角相交。 赛道可以有上坡、下坡和隧道。 如有必要,飞思卡尔可能会更改这些规则和条件。飞思卡尔保留随时自行取消、暂停和/或修改飞思卡尔杯比赛的权利。这些官方规则是用英语制定的。如果这些官方规则以任何其他语言提供且文本存在冲突,则以英语文本为准。 Freescale 和 Freescale 徽标是飞思卡尔半导体公司在美国和其他国家的商标或注册商标。所有其他产品或服务名称均为其各自所有者的财产。©飞思卡尔半导体公司,2014 年 飞思卡尔杯内容
View full article
RTD SDK( AUTOSAR4.4 を使用して DIO の例に UART を追加するにはどうすればよいですかHF1.0.1)ですか? 以下のようにUARTを追加すると、コード生成エラーが発生しました。このエラーメッセージをどのように解決できますか? cheoljin_4-1718070886934.png 以下のコード生成 UARTを追加するとエラーが発生し、コードを生成できませんでした。 cheoljin_5-1718070928447.png 問題キャプチャ画面。 cheoljin_6-1718070983552.png 私の開発インストールの詳細。 cheoljin_7-1718071062594.png よろしくお願いいたします。 Re:RTD SDK(AUTOSAR4.4を使用してDIOの例でUARTを追加するにはどうすればよいですか?HF1.0.1)ですか? Dear VaneB, ご回答ありがとうございます。 RTDを更新した後、プロジェクトにUART周辺機器を追加できました。 よろしくお願いいたします C.J.さん Re:RTD SDK(AUTOSAR4.4を使用してDIOの例でUARTを追加するにはどうすればよいですか?HF1.0.1)ですか? Hi @cheoljin  これは、S32K1 Real-Time Drivers リリース バージョン 1.0.1 の既知の問題です。この問題は、S32K1 Real-Time Drivers リリース Version 1.0.1 HotFix 01 で既に解決されています。このアップデートは、Real-Time Drivers for S32K1 > Automotive SW - S32K1_S32M24x - Real-Time Drivers for Cortex-M からダウンロードできます。パッケージが S32DS に正しくインストールされたら、現在のプロジェクトを削除して新しいプロジェクトを作成する必要があります。 B.R. VaneB 
View full article
使用顺序 API 开发 LwIP 应用程序 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> LwIP 可以在两种基本模式下使用:主循环模式(“NO_SYS”)(目标系统上没有运行 OS/RTOS)或 OS 模式(TCPIP 线程)(目标系统上有运行的 OS)。在主循环模式下,只能使用原始 API。在OS模式下,可以使用原始API和顺序API。 在OS模式下,lwip堆栈和应用程序在单独的任务中运行。应用程序通过顺序 API 调用与 LwIP 堆栈进行通信,这些 API 调用使用 RTOS 邮箱机制进行进程间通信。 这篇文章重点介绍如何使用 MCUXpresso SDK 中的顺序 API 在 OS 模式下设计 LwIP 应用程序。它适用于 LwIP 初学者。代码片段来自 MCUXpresso SDK2.6。 有关如何使用原始 API 在主循环模式(裸机模式)下设计 LwIP 应用程序,请参阅以下链接: 使用原始 API 开发 LwIP 应用程序 一般来说,LwIP 应用程序包括网络接口设置、LwIP 堆栈初始化、使用 LwIP API 和配置。 1. 启动网络接口 要创建新的网络接口,用户需要为新的struct netif分配空间(但不初始化它的任何部分)并调用netifapi_netif_add :     IP4_ADDR(&fsl_netif0_ipaddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3);     IP4_ADDR(&fsl_netif0_netmask, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3); IP4_ADDR(&fsl_netif0_gw, configGW_ADDR0, configGW_ADDR1, configGW_ADDR2, configGW_ADDR3);       netifapi_netif_add(&fsl_netif0, &fsl_netif0_ipaddr, &fsl_netif0_netmask, &fsl_netif0_gw, &fsl_enet_config0,                        ethernetif0_init, tcpip_input); 将tcpip_input API 传递给netif_add API 作为输入回调函数,该函数被调用以在协议层堆栈中向上传递入口数据包 接下来,我们需要启用该接口 “up” 状态的接口可用于应用程序的输入和输出操作,“down” 则是相反的状态。因此,在使用接口之前,必须先启用它。启用方式取决于接口获取 IP 地址的方式,我们可以使用静态 IP 地址或 DHCP。 将网络接口设置为默认网络接口 netifapi_netif_set_default(&fsl_netif0);   启动该接口,准备进行处理     netifapi_netif_set_up(&fsl_netif0); 2.初始化LwIP协议栈   调用tcpip_init创建tcpip_thread,该线程独占访问LwIP核心函数。其他线程使用消息框与该线程进行通信。它还启动所有计时器以确保它们在正确的线程上下文中运行。   tcpip_init(NULL, NULL);   void   tcpip_init(tcpip_init_done_fn initfunc, void *arg) {   lwip_init();     tcpip_init_done = initfunc;   tcpip_init_done_arg = arg; 如果 (sys_mbox_new(&tcpip_mbox,TCPIP_MBOX_SIZE) != ERR_OK) { LWIP_ASSERT("无法创建 tcpip_thread mbox", 0);   } #if LWIP_TCPIP_CORE_LOCKING 如果 (sys_mutex_new(&lock_tcpip_core) != ERR_OK) { LWIP_ASSERT("无法创建lock_tcpip_core", 0);   } #endif /* LWIP_TCPIP_CORE_LOCKING */   sys_thread_new(TCPIP_THREAD_NAME,tcpip_thread,NULL,TCPIP_THREAD_STACKSIZE,TCPIP_THREAD_PRIO); } 用户任务的优先级不应超过 tcpip_thread 的优先级 - 在 lwipopts.h 中,tcpip_thread的优先级 #定义 TCPIP_THREAD_PRIO 2 3. 使用顺序 API 如下图所示,客户端建立TCP连接的步骤如下: 使用netconn_new()函数创建连接; 使用netconn_connect()函数连接服务器的地址; 通过 netconn_recv() 和 netconn_write() 函数发送和接收数据。 通过 netconn_close() 函数关闭连接。 服务器端建立TCP连接的步骤如下: 使用netconn_new()函数创建TCP连接; 使用netconn_bind()函数将服务器绑定到一个地址; 使用netconn_listen()函数监听连接; 使用 netconn_accept() 函数接受连接。此调用通常会被阻塞,直到客户端连接到服务器。 通过netconn_write()和netconn_recv()发送和接收数据。 通过 netconn_close() 函数关闭连接。 中间件/lwip/contrib/appa/tcpecho/tcpecho.c 静态空隙 tcpecho_thread ( void *arg) {   struct netconn *conn, *newconn;   err_t err; LWIP_UNUSED_ARG(参数);    /* 创建一个新的连接标识符。*/  /* 将连接绑定到众所周知的端口号 7。*/ #if LWIP_IPV6 conn = netconn_new(NETCONN_TCP_IPV6); netconn_bind(conn,IP6_ADDR_ANY,7); #else /* LWIP_IPV6 */ conn = netconn_new ( NETCONN_TCP ); netconn_bind (conn,IP_ADDR_ANY,7); #endif /* LWIP_IPV6 */   LWIP_ERROR("tcpecho: invalid conn", (conn != NULL), return;);    /* 告诉连接进入监听模式。 */   netconn_listen(conn);    而(1){      /* 抓住新的连接。 */     err = netconn_accept(conn, &newconn);    /* printf ("接受新连接 %p\n", newconn );*/    /* 处理新的连接。 */     if (err == ERR_OK) {      结构netbuf *buf;       void *data;       u16_t len;            while ((err = netconn_recv (newconn, &buf)) == ERR_OK ) {        /* printf ("已收到\n");*/         do {              netbuf_data(buf, &data, &len); err = netconn_write (newconn、数据、长度、NETCONN_COPY); #if 0             if (err != ERR_OK) { printf( “ tcpecho :netconn_write:错误\”%s\”\n” ,lwip_strerr(err));             } #endif }当(netbuf_next(buf)> = 0)时; netbuf_delete(buf); }      /* printf ("获取 EOF,循环\n");*/      /* 关闭连接并丢弃连接标识符。*/ netconn_close (新连接); netconn_delete (newconn);     }   } } 从 tcpecho 线程中我们可以看到 首先,通过 API netconn_new 调用参数NETCONN_TCP建立一个新的 TCP 连接。 #定义netconn_new(t)netconn_new_with_proto_and_callback(t,0,NULL) 结构 netconn * netconn_new_with_proto_and_callback(枚举 netconn_type t,u8_t proto,netconn_callback 回调) { 结构 netconn *conn;   API_MSG_VAR_DECLARE(msg);   API_MSG_VAR_ALLOC_RETURN_NULL(msg);   conn = netconn_alloc(t,回调); 如果(conn!= NULL){     err_t err;       API_MSG_VAR_REF(msg).msg.n.proto = proto;     API_MSG_VAR_REF(msg).conn = conn;     err = netconn_apimsg(lwip_netconn_do_newconn, &API_MSG_VAR_REF(msg));     if (err != ERR_OK) { LWIP_ASSERT("释放 conn 而不释放 pcb", conn->pcb.tcp == NULL); LWIP_ASSERT("conn 没有 recvmbox", sys_mbox_valid(&conn->recvmbox)); #if LWIP_TCP LWIP_ASSERT("conn->acceptmbox不应该存在", !sys_mbox_valid(&conn->acceptmbox)); #endif /* LWIP_TCP */ #if !LWIP_NETCONN_SEM_PER_THREAD LWIP_ASSERT("conn 没有 op_completed", sys_sem_valid(&conn->op_completed)); sys_sem_free(&conn->op_completed); #endif /* !LWIP_NETCONN_SEM_PER_THREAD */ sys_mbox_free(&conn->recvmbox);       memp_free(MEMP_NETCONN, conn);       API_MSG_VAR_FREE(msg);       return NULL;     }   }   API_MSG_VAR_FREE(msg);   return conn; }   然后,通过调用API函数netconn_bind将新创建的连接绑定到端口7(echo协议)。   接下来,应用程序通过调用API函数netconn_listen来启动连接的监听过程。 在无限的 while(1) 循环中,应用程序通过调用 API 函数 netconn_accept 等待新的连接。当没有传入连接时,此 API 将阻止应用程序任务。 当有传入连接时,应用程序可以通过调用 API 函数 netconn_recv 开始接收数据。传入数据在 netbuf 中接收。       应用程序可以通过调用netbuf API函数netbuf_data来获取接收到的数据。 err_t netbuf_data(结构 netbuf *buf,void **dataptr,u16_t *len) { LWIP_ERROR("netbuf_data: 无效的 buf", (buf != NULL), 返回 ERR_ARG;);   LWIP_ERROR("netbuf_data: invalid dataptr", (dataptr != NULL), return ERR_ARG;);   LWIP_ERROR("netbuf_data: invalid len", (len != NULL), return ERR_ARG;);   如果 (buf->ptr == NULL) {     return ERR_BUF;   } *数据指针 = 缓冲区->ptr->有效载荷;   *len = buf->ptr->len;   return ERR_OK; }   通过调用 API 函数 netconn_write 将接收到的数据发送回(回显)到远程 TCP 客户端。 netconn_close和netconn_delete分别用于关闭和删除netconn连接     4.配置LwIP lwipopts.h是一个用户文件,您可以使用它来完全配置 lwIP 及其所有模块。您不需要定义 lwIP 提供的每个选项;如果您不定义选项,则将使用默认值。因此,你的 lwipopts.h提供了一种覆盖 lwIP 大部分行为的方法。 在多线程模式下,。我们需要将 NO_SYS #define 为 0。 请参考evkbimxrt1050_lwip_tcpecho_freertos\source\lwipopts.h … #if USE_RTOS   /** * SYS_LIGHTWEIGHT_PROT==1:如果您希望对某些任务进行任务间保护 * 缓冲区分配、释放和内存期间的关键区域 * 分配和释放。  */ #定义SYS_LIGHTWEIGHT_PROT 1   /** * NO_SYS==0: 使用 RTOS  */ #定义NO_SYS 0 /** * LWIP_NETCONN==1: 启用Netconn API (需要使用 api_lib.c)  */ #定义LWIP_NETCONN 1 /** * LWIP_SOCKET==1: 启用Socket API (需要使用sockets.c)  */ #定义LWIP_SOCKET 1   /** * LWIP_SO_RCVTIMEO==1: 启用套接字/网络连接的接收超时和 * SO_RCVTIMEO处理。  */ #定义LWIP_SO_RCVTIMEO 1 …   回复:使用顺序 API 开发 LwIP 应用程序 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Daniel, 在进行 netif API 调用之前我不需要建立活动的网络连接吗?如果我在调用 netif_dhcp_start() 时没有连接网线,但稍后我连接了它,我永远不会看到 dhcp 状态变量转到 DHCP_STATE_BOUND。因此,我认为会有一个回调或状态变量让我知道链接何时启动或关闭,但我似乎无法在 MCUXpresso SDK 或 LwIP 中找到它。如何检测和报告链接状态? 谢谢!
View full article
S32 Design Studio for Arm v1.3 - 更新 3 和 4 现已发布 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />         产品发布公告 汽车微控制器和处理器 ARM v1.3 版 S32 设计工作室,更新 4             S32 Design Studio for ARM v1.3 Update 4 刚刚发布。此更新适用于托管在 Windows 和 Linux 上的 S32 Design Studio for ARM v1.3,不需要安装任何以前的更新。 笔记: 更新 3(作为单独更新提供)仅包含S32K148支持。更新 4 包含更新 3,因此您无需单独安装。   新增内容 更新 4 包含:对S32K148和S32K14x_SDK_EAR_0.8.3的设备支持,支持S32K148和S32K144 。更多信息可以在随附的 SDK 发行说明中找到。 安装说明 该更新可用于在线(Eclipse Updater)或离线(直接下载链接)安装。 在线安装:进入菜单“帮助”->“安装新软件...”对话框选择预定义的 NXP S32 Design Studio 更新存储库http://www.nxp.com/lgfiles/updates/Eclipse/S32DS_ARM_1_3/com.freescale.s32arm.updatesite 选择所有可用项目并单击“下一步”按钮 离线安装: 转到 S32 Design Studio 产品页面 -> 下载部分或使用直接下载链接下载“S32 Design Studio for ARM v1.3 - Update 4”文件。   启动 S32DS 并转到帮助->安装新软件... 添加新的“存档”存储库,浏览以选择下载的更新 4 存档文件。 选择所有可用项目并单击“下一步”按钮。  
View full article
将 OV5640 与 i.MX 6UltraLite EVK 结合使用 i.MX 6UltraLite EVK 内核版本默认包含并行摄像头 OV5640 支持。但是,根据基板修订版,此相机可能需要下面的 SCH700-27820 适配器: Bio_TICFSL_0-1664904214588.png 相机适配器 根据下图,FX12B-40P-0.4SV 连接器布局在 RevC 中发生了变化,从而可以直接使用 OV5640: Bio_TICFSL_1-1664904241325.png 左边是 Rev B,右边是 Rev C,不需要适配器 因此,如果您使用的基板版本早于 Rev C,请将相机与适配器一起插入,并将适配器的另一端连接到基板上。 为了使用并行 OV5640 摄像头,需要在 U-Boot 上设置以下环境变量,与基板修订版无关: => setenv fdt_file ‘imx6ul-14x14-evk-csi.dtb’ => saveenv 按照 GStreamer 管道示例测试摄像头连接: $ gst-launch-1.0v4l2src设备=/dev/video1!视频/x-raw,宽度=640,高度=480!自动视频接收器 该测试使用内核 BSP 版本 5.10.35v 完成。 Arm® 处理器 i.MX 应用处理器
View full article
imx28 SOCのvdd5v_irq割り込みについて こんにちは、皆さん。 vdd5v_irq割り込みをどのようにトリガーできるのか知りたいです。   現場の現場で正常に動作していないデバイスがあります。これらのデバイスはすべてDC電源を使用します。 liuxing_0-1737467517655.png i.MX2x 日時:imx28 SOCのvdd5v_irq割り込みについて Hello, vdd5v_irqでは、外出先でのUSBは、高電圧のために全体のマイクロを保護します。テストはありませんが、機能します。 ルガルド
View full article
手持式射频/通信装置 Overview 结构框图 产品 Overview NXP 产品组合包含多种处理解决方案,从 MCU 到多核 MPU,可实现电机控制、系统控制和高级 HMI。 该解决方案基于 i.MX6 系列应用处理器。该高性能处理器系列提供了高度可靠的电源管理、各种存储器接口以及用于连接外围设备的各种其他接口。 结构框图 Block-Diagram-Hand-Held-Radio-Communicator-PNG.png 产品 类别 MPU 产品网址 1 i.MX6UL:i.MX 6UltraLite 处理器 - 低功耗、安全、Arm ® Cortex ® -A7 内核 产品描述 1 i.MX6UltraLite扩展了i.MX6系列,它是一个高性能、超高效处理器系列,采用先进的ARM®Cortex®-A7内核,运行速度高达696 MHz。 产品网址 2 i.MX-6ULZ:超低成本 Linux ®处理器,搭载 Arm ® Cortex ® -A7 内核 产品描述 2 i.MX 6ULZ 处理器是一款高性能、超高性价比的消费级 Linux 处理器,采用先进的单个 Arm ® Cortex ® -A7 内核,运行速度高达 900 MHz。 产品网址 3 i.MX6ULL: i.MX 6ULL单核处理器,搭载Arm ® Cortex ® -A7内核 产品描述 3 i.MX 6ULL是一个高功效、高性价比应用处的理器系列,采用单个Arm Cortex-A7内核,运行速度高达528 MHz。 类别 电机控制驱动器 产品URL MC34931: MC34931/S H桥有刷直流电机驱动器,5-36 V,5 A,11 kHz/20 kHz 产品描述 NXP ® MC34931 是一款单片、高热效率的 36 V/5 A H 桥直流电机驱动器。 类别 音频 产品网址 1 SGTL5000:超低功耗音频编解码器 产品描述 1 SGTL5000是低功耗立体声编解码器,可为需要线路输入、麦克风输入、线路输出、耳机输出和数字I/O的便携式产品提供全面的音频解决方案。 产品网址 2 NCX8200UK:音频插孔配置开关矩阵 产品描述 2 NCX8200 是一款先进的音频插孔配置开关矩阵设备,支持 3 极和 4 极连接器。 类别 收发器 产品URL NTS0302JK:2 位双电源转换收发器;开漏;自动方向感应 产品描述 NTS0302是2位双电源转换收发器系列,具有自动方向感测功能,可实现双向电压电平转换。 类别 Accelerometer 产品URL MMA8451Q: ±2g/±4g/±8g,低重力加速度,14位数字加速度计 产品描述 NXP ® MMA8451Q 是一款低功耗、三轴电容式微机械加速度计,具有 14 位分辨率。 类别 LCD驱动器 产品URL PCF85132U: 低复用率LCD驱动器 产品描述 PCF85132是一款外围器件,能驱动几乎任何低复用率液晶显示器(LCD)。 类别 无线上网 产品网址 88W8997:2.4/5 GHz 双频 2x2 Wi-Fi ® (802.11ac) + 蓝牙®解决方案 产品描述 88W8997 是业界首款 28nm、802.11ac wave-2、2x2 MU-MIMO 组合解决方案,完全支持蓝牙 5。 类别 电源管理 产品URL PF1550:适用于低功耗处理器系统的带 1A Li+ 线性电池充电器的 PMIC 产品描述 PF1550是一款电源管理集成电路(PMIC),旨在与i.MX处理器结合,用于低功耗便携式、智能可穿戴和物联网(IoT)应用。 类别 安全芯片 产品URL EdgeLock ™ SE050:Plug & Trust 安全元件系列 – 增强物联网安全性,并具有最大的灵活性 产品描述 EdgeLock SE050 Plug&Trust设备产品系列增强了基于通用标准EAL 6+的安全性,可针对最新攻击场景提供前所未有的保护。 框图 通信基础设施
View full article
使用 EB Tresos 和 S32DS 为 S32K344 创建驱动程序 Hello, 我正在从事 NXP S32K344 项目,并拥有以下工具: S32设计工作室(S32DS) EB tresos Studio 实时驱动(RTD) 我已经查看了 NXP 提供的示例项目,但我希望从头开始创建一切,以便更好地理解该过程。具体来说,我想知道: 如何在 EB Tresos 中配置外围设备并生成必要的代码。 如何将生成的代码集成到 S32DS 项目中。 是否有任何指南、教程或分步说明可供我遵循以完成此过程? 任何建议、文档链接或示例都将不胜感激! 提前感谢! 回复:使用 EB Tresos 和 S32DS 为 S32K344 创建驱动程序 Hello @Julián_AragónM , 非常感谢您对我的问题做出快速而详细的答复。 Best, MCatana 回复:使用 EB Tresos 和 S32DS 为 S32K344 创建驱动程序 Hi @MCatana 您实际上可以从 Elektrobits 的页面上找到有关如何使用 EB Tresos 的各种指南和支持视频:使用 EB tresos Studio – Elektrobit 。这些包括创建项目、配置模块和生成代码。 关于S32DS集成,可以参考NXP AUTOSAR ® MCAL软件简介培训。它展示了EB Tresos Studio 配置工具如何生成代码,然后在应用程序代码中使用。 也就是说,我建议整体使用 S32DS,因为它还支持 MCAL,它有自己的 tresos 风格配置器以及代码生成功能。此社区帖子中也讨论了这个问题:已解决:回复:如何在 S32 Design Studio 中为 S32K144 加载 EB Tresos 生成的代码项目 - NXP 社区。 此外,我还附上了一份文档,展示了如何将 MCAL 与 S32DS 中的 S32K344 集成。 Best regards, Julián
View full article
ADK 库(基于 FRDM-KL26Z 板。) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Android 开放配件支持允许外部 USB 硬件(Android USB 配件)以特殊配件模式与 Android 设备进行交互。当 Android 供电设备处于配件模式时,连接的配件充当 USB 主机(为总线供电并枚举设备),而 Android 供电设备充当 USB 配件角色。 该ADK库基于NXP Kinetis微控制器KL26 ,实现了一些与Android手机通信的功能。   移动设备 回复:ADK 库(基于 FRDM-KL26Z 板。) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 我可以在哪里获得 ADK 库源代码来为其他设备(例如 MK26 或例如 MIMXRT1051? 该示例仅包含 lib 文件。 回复:ADK 库(基于 FRDM-KL26Z 板。) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 该文件嵌入在文档的最后一页。 此致, Santiago 回复:ADK 库(基于 FRDM-KL26Z 板。) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 在哪里可以找到 K26ADKlib_User_Guide 文档中引用的 ADK 库和示例项目?
View full article