Multi Source Translation Content

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Multi Source Translation Content

讨论

排序依据:
使用MMPF0100和MMPF0200 PMIC进行电源管理 - 演示 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 观看此演示,了解如何使用恩智浦 MMPF0100 和 MMPF0200 轻松进行设计。 这些器件 针对 i.MX 6 应用处理器进行了优化。功耗敏感型应用包括便携式医疗设备、网关、路由器、家庭安全系统、电子阅读器、平板电脑和家庭能源管理解决 方案 。   特征 MMPF0100 和 MMPF0200 (PMIC) 评估套件 PMIC 针对i.MX 6 应用处理器进行了优化 轻载效率 卓越的静态电流 板载大量一次性可编程内存 灵活性:编程套件通过 USB 端口连接设备,用户可以设置设备上每个调节器的启动频率、电压水平、电流限制和时序 特色恩智浦产品 MMPF0100 MMPF0200 https://community.nxp.com/external-link.jspa?url=http %3A% 2F %2Fwww.nxp.com% 2Fproducts %2Fpower-management% 2Fpmics %2Fpmics-for-i.mx-processors% 2F12通道可配置电源管理IC%3AMMPF0200 框图 汽车电子 工业控制
查看全文
NXP 提供的 S32K3 EB tresos AutoCore 8.8.9 无法使用 NXP 提供的 S32K3 EB tresos AutoCore 8.8.9 无法使用, 没有有效的许可证 luhaiou_0-1735870376685.jpeg 以后是不是就不再有这个功能了? 回复:NXP 提供的 S32K3 EB tresos AutoCore 8.8.9 无法使用 Hello, 我刚刚得到消息,SW 帐户中已经有新的激活码可用。 请随意下载有效代码。 享受。 顺祝商祺! Peter 回复:NXP 提供的 S32K3 EB tresos AutoCore 8.8.9 无法使用 Hello, 我正在与管理员交谈,这些激活码存在问题。目前我们还没有。 一旦可用,它们就会出现在 SW 帐户页面上。 顺祝商祺! Peter 回复:NXP 提供的 S32K3 EB tresos AutoCore 8.8.9 无法使用 Hello,@petervlna 新的许可证未出现。 请通知管理员, 非常感谢。 回复:NXP 提供的 S32K3 EB tresos AutoCore 8.8.9 无法使用 Hello, 我和你看到的一样。 然而,由于是新年,一切都需要一些时间才能恢复,我预计它会出现几天。 如果下周结束时仍未收到,请告诉我,我会通知管理员。 顺祝商祺! Peter
查看全文
S32K344 - 割り込みがトリガーされた後、コードはデフォルトハンドラに送られます。 こんにちはチーム、 GPT割り込みを構成し、それぞれ1,2,3秒などの異なるティックを持つ3つのタスクを構成しました。コードがデフォルトのハンドラに移動した後。 siva_04_0-1718176099424.png 案内してもらえますか? Re:S32K344 - 割り込みがトリガーされた後、コードはデフォルトハンドラに送られます。 Hi @siva_04, EXC_RETURNのエラーは、無効なコンテキストスイッチ、例外リターンのスタックの破損が原因である可能性があります。 たとえば、スタックのオーバーフローが原因です。 説明の情報が少なすぎます。 https://community.nxp.com/t5/S32K-Knowledge-Base/How-To-Debug-A-Fault-Exception-On-ARM-Cortex-M-V7M-MCU-S32K3XX/ta-p/1595570 BR, Daniel
查看全文
relayr 的 WunderBar <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> WunderBar 是创建创新且实用的应用程序来连接智能设备的最简单方法。 它开箱即用,包含 6 个很棒的 Beacon(BLE)、传感器和 Wifi,并且编程非常简单。传感器包括:光、颜色、距离、温度、湿度、遥控器(红外)、加速度计和陀螺仪、 Grove 连接器以及社区选择的噪音/声音传感器! 开源 我们希望每个人都参与其中,这就是我们在GitHub上分享布局的原因。如果您有改进 - 请分叉我们,做出更改,然后发送拉取请求。如果您需要构建自己的主板以与现有系统集成,请成为我们的客人。自由的 Apache 许可证使这成为可能。 安全 国内网络上低能耗设备的安全性是一个挑战。我们正在与合作伙伴合作,为设备构建最高级别的安全性。我们的设备注册利用您的智能手机或平板电脑的安全性来与 OpenSensor Cloud 建立永久连接 灵活 WunderBar 附带我们自己的固件,可以与 OpenSensor Cloud 无缝集成,但是您可以使用 Arduino,或者推出您自己的解决方案。我们有适用于 Arduino 的库以及用于构建您自己的解决方案的示例。 详细了解 WunderBar by relayr 认为这是一个很酷的项目吗?在下面进行排名并留下您的评论! 概述
查看全文
S32K与57xx之间的性能比较 Hello, 我对 55xx、56xx 和 57xx MCU 有一些经验,现在正在考虑将来迁移到 S32。由于性能是一个潜在的问题,我想知道S32K(例如与 264MHz MPC5674F 或 300MHz MPC5777C 相比,配备 240MHz Cortex-M7 的 S32K348 的性能更佳。 根据 EEMBC 网站,MPC5674F(@264MHz)的 Coremark 得分为 516,而 S32Kxx 系列的数据表为 S32K348 提供了 1269 的 Coremark 得分,这意味着性能将获得巨大的提升(将应用程序的执行时间减半?)尽管核心频率略低……然而,我曾经尝试过一些以 400MHz 运行的基于 Arm 的设备,对于我的应用程序(没有长循环的虚拟控制系统,主要由布尔和浮点逻辑组成)来说,它的性能几乎没有超过以 264MHz 运行的 MPC5777C。 您对 56xx/57xx 和 S32K3xx 有任何性能比较吗(Coremark 分数除外)?根据 Coremark 分数显示,S32K348 的性能是否有望超越 MPC5777C? 谢谢! 顺祝商祺! Ricardo 回复:S32K和57xx之间的性能比较 QuadSPI 只是 IP 的名称,但它也允许连接八路 SPI,正如我已经回答的那样。因此数据可以超过 8 行。 FlexIO 提供 8 个定时器/移位器,因此速度可能不会更快。 回复:S32K和57xx之间的性能比较 在哪里可以找到有关 FlexIO 的更多信息?即使它不模拟 EBI,如果它的数据路径比 QSPI 中可用的 4 位更宽(看起来比 EBI 慢得多,并且可能会抵消 CPU 中获得的所有收益),我们也可能会尝试使用它。 谢谢! Ricardo 回复:S32K和57xx之间的性能比较 FlexIO 是通用定时模块,提供 UART、SPI、I2C、I2S、LIN、PWM 等功能,但我认为该外设无法模拟 EBI。至少我不知道有任何现有的解决方案。 QuadSPI模块被认为是外部总线的替代品。它允许用户通过 QuadSPI、OctalSPI 或 Hyperbus 通信协议连接外部存储设备并进行内存映射访问。 回复:S32K和57xx之间的性能比较 Hi David, 谢谢你的回答。为了完成我的性能比较,我想知道在较新的设备中,FlexIO 是否可以被视为 5xxx 设备中的 EBI 模块的替代品。 此致, Ricardo 回复:S32K和57xx之间的性能比较 e200z759 的性能约为 2.27 DMips/MHz,即在 264MHz 的运行频率下每个核心可提供 600 DMIPS。不过MPC设备大多没有指定官方数字。 另一方面,S32K3 在数据表中有很好的定义,如下所示,分别针对 ASIL-B 或 D(即无论这些是核心同步的变体还是分离的变体)。 davidtosenovjan_0-1714993420191.png davidtosenovjan_1-1714993559969.png
查看全文
MCTPTX1AK324 + CAN-FD 500/5000 Hi, 我目前正在使用两种不同的开发板: S32K312EVB-Q172 和 MCTPTX1AK324 我正在尝试与 CAN-FD 500/5000 kbps 的人进行通信。 为了计算位时序,我使用 CAN 位时序计算 v2.1.xlsm由 NXP 提供。 对于 CAN Clk 60MHz 的 S32K312 和 TJA1043TKY,一切运行正常。 但是在另一块板上,当我尝试将 FD 速率设置为高于 4mbps 时,使用 CAN Clk 80MHz 的 S32K324 和 TJA1044GT 的 S32K324 时总是会出现总线错误。 TJA1044 预计工作速度可达 5mbps。那里可能存在什么问题?我正在使用一根短(30 厘米)非绞合电缆来连接 IXXAT USB-to-CAN FD 紧凑型产品和额外的 120 欧姆电阻。 500/4000、1000/4000 工作正常,但只要我增加到 500/5000 或 1000/5000 FD 帧就会导致错误。 这是我尝试过的位时序计算的一个例子(我想我测试了所有可能的配置) 2025-03-03_13-33-29.PNG 您有什么建议吗? 谢谢,并致以最诚挚的问候, 格罗尔 回复:MCTPTX1AK324 + CAN-FD 500/5000 Hi Petr, 我找到了 TDC 设置(我之前一定是瞎了……): 2025-03-07_09-25-17.PNG 启用此功能并根据计算器进行设置后,它可以正常工作。 谢谢您的支持! 顺祝商祺! 格罗尔 回复:MCTPTX1AK324 + CAN-FD 500/5000 Hi, 您编写的从 IXXAT 发送的消息被控制器正确读取,但寄存器在接收期间显示错误,并且 IXXAT 在传输期间显示检测到的错误。可能是 CAN 位时序问题。还要确保两者都使用了 ISO CANFD 协议。 对于 MCU 端的传输,必须通过正确的 TDCOFF 设置来启用 TDC。 对于 EB 不确定,但在 S32DS CT 中,可以在 FdBaudrateConfig 设置中使用   image.png BR, Petr 回复:MCTPTX1AK324 + CAN-FD 500/5000 我忘了说:IXXAT 发送的消息被控制器正确读取 回复:MCTPTX1AK324 + CAN-FD 500/5000 Hi @PetrS, 感谢您的快速回复。 您是否确实使用了如图所示的增强型 CAN FD 时序和寄存器? 是的,但我也尝试了正常模式设置,结果相同(最高可达 4mbps)。 你也设置了TDC吗?在调试器中检查设置。 根据调试器,TDC 已被禁用。 2025-03-04_15-15-34.PNG 这是一个 AUTOSAR 项目(SW。版本:4.0.0P14_HF01_D2406),FlexCan 在 Tresos 中配置,TDC 可以在那里配置吗? 在S32K324上检测到什么错误?检查ECR、ESR1寄存器。 这是调试器中 FlexCAN 的顶部,显示了一些错误: 2025-03-04_15-18-56.PNG 另一端的 IXXAT(没有其他节点)报告以下内容: 2025-03-04_15-19-18.PNG 并配置相同的采样点: 2025-03-04_15-19-32.PNG 建议使用示波器测量 TXD/RXD/CAN 线路以查看真实信号。 我现在没有可用的范围,但可能可以在下周左右组织一个。 在此之前我还能尝试什么其他想法吗? 谢谢! 顺祝商祺! 格罗尔 回复:MCTPTX1AK324 + CAN-FD 500/5000 Hi, 所有连接的节点都应使用相同的比特率和采样时间,因此请确保这一点。 您是否确实使用了如图所示的增强型 CAN FD 时序和寄存器?您也设置了 TDC 吗?检查调试器中的设置。在S32K324上检测到什么错误?检查ECR、ESR1寄存器。建议使用示波器测量 TXD/RXD/CAN 线路以查看真实信号。 BR, Petr
查看全文
基于CTimer模块测试运行时间 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 基于CTimer模块测试运行时间   有时,需要测试某个api函数执行时所花费的时间,例如,有些用户想测试flash擦除时间和flash编程时间。用户可以使用GPIO来设置/清除,并使用示波器来测试GPIO时序来测量api函数所花费的时间,该方法非常简单直接但不准确。 文档介绍如何将 CTimer 配置为一个 32 位自由运行计数器,用户可以读取 api 函数前后的计数器值,并计算计数器值差以获取 api 函数所花费的时间。 LPC54xxx系列的CTimer对APB总线时钟进行计数,APB总线时钟由12MHz FRO驱动,用户可以使用以下代码来测量经过的时间。 例如测试delayTimer(10000);函数的耗时,得到变量tPoint1,tPoint2,实际耗时为(tPoint2- tPoint1)*(1/12000000)。 例子中tPoint2=110127,tPoint1=53,则经过的时间为(110127-53)*(1/12000000)=9.172us。 //源代码主要关注LPC54xxx系列 uint32_t tPoint1、tPoint2、tPoint3、tDiff; void test(void) { tPoint1 = CTIMER_GetTimerCountValue(CTIMER2);    //模拟经过的时间 延迟计时器(10000); tPoint2 = CTIMER_GetTimerCountValue(CTIMER2); tDiff=tPoint2-tPoint1;      //模拟经过的时间 延迟计时器(20000); tPoint3 = CTIMER_GetTimerCountValue(CTIMER2); tDiff=tPoint3-tPoint2; PRINTF( "时间实例:tPoint1=%d,tPoint2=%d,tPoint3=%d \r\n" ,tPoint1,tPoint2,tPoint3); } 基于 MCUXpresso 工具和 LPC54618 开发板的简单源代码片段,由 XiangJun Rong 开发 #包括“fsl_ctimer.h” void test(void); void CTimerInit(void); void delayTimer(uint32_t elapsedTimer); uint32_t tPoint1、tPoint2、tPoint3、tDiff; void CTimerInit(void) {     ctimer_config_t config;    ctimer_match_config_t 匹配配置;    /*CTimer使用APB总线时钟作为Timer tick,设置APB总线时钟为12MHz内部FRO */      CLOCK_AttachClk(kFRO12M_to_ASYNC_APB);     CTIMER_GetDefaultConfig(&config);       CTIMER_Init(CTIMER2, &config);   matchConfig.enableCounterReset = true; matchConfig.enableCounterStop = false; matchConfig.matchValue = 0xFFFFFFFF; matchConfig.outControl = kCTIMER_Output_NoAction; matchConfig.outPinInitState = true; matchConfig.enableInterrupt = false;     CTIMER_SetupMatch(CTIMER2, kCTIMER_Match_3, &matchConfig); CTIMER_StartTimer(CTIMER2); }   void test(void) { tPoint1 = CTIMER_GetTimerCountValue(CTIMER2);    //模拟经过的时间 延迟计时器(10000); tPoint2 = CTIMER_GetTimerCountValue(CTIMER2); tDiff=tPoint2-tPoint1;      //模拟经过的时间 延迟计时器(20000); tPoint3 = CTIMER_GetTimerCountValue(CTIMER2); tDiff=tPoint3-tPoint2; PRINTF( "时间实例:tPoint1=%d,tPoint2=%d,tPoint3=%d \r\n" ,tPoint1,tPoint2,tPoint3); }   void delayTimer(uint32_t elapsedTimer) {     uint32_t i;     for(i=0; i     {        __asm ( “ nop ” );     } }   int main (无效) {    …………………………………………………………………………………………………..    PRINTF( "经过时间测试开始:\r\n" );     CTimerInit();     test();     for(;;) {} ………………………………………… }  
查看全文
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
查看全文
可以使用 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
查看全文
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
查看全文
将深度学习网络部署到 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. 的商标。
查看全文
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 智能卡 =>不支持。 谢谢! 神威
查看全文
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 部分。 祝你有美好的一天!
查看全文
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软件 千瓦
查看全文
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 请提供您的演示代码,以便我可以重现您的问题,这将更容易地帮助您找到根本原因。
查看全文
实施攻击 - 现场演示 <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 中继攻击演示展示了一种新的范例 在移动设备上的软件模拟智能卡环境中的中继攻击。 攻击者与受害者的距离以及时间的先前情况 当受害者接近时,就会被否定。使用软件模拟智能卡 在移动设备上,攻击者可以拦截并中继 远程攻击潜在受害者。这种新的攻击模式极大地提高了 对犯罪分子来说,这种攻击将变得更加严重,从而导致恶意软件的开发力度加大。 有关个别袭击的补充信息 评估板
查看全文
スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi, ここでは、imx6 でスペクトラム拡散を有効にする方法についてのドキュメントを示します。   よろしくお願いいたします ジャック Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 誤字脱字「ssc_top」 ---> スプレッドspectrum.docxの「ssc_stop」>を修正してください Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 上部に添付されている新しいドキュメントを参照してください Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> jackmao‌ 付属している「スプレッドspectrum.docx」に戸惑っています なぜCCM_ANALOG_PLL_SYS_NUMがスクリプトやドキュメントで使用されていないのですか?そしてそれをどのように使用するのですか? ssc_top 4ページにssc_stopるべきですか? 3ページ目:               変調周波数は約48Kに制御されます。 4ページ目: 「変調周波数 = Fref * (ssc_step) / (2 * ssc_top)」という式は、デモ コード 24000 ≠ 48000 と一致しません。         Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Dear Jack Mao, この機能をUBOOT 2016に実装するにはどうすればよいですか? よろしくお願いします。 ピーター・ツェン Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ロードされたコードに行がありません。コードに行を追加してください。 before_calling_rom___pu_irom_hwcnfg_setup: ldr r3、=ROM_VERSION_OFFSET LDR R4, [R3] ldr r3, =ROM_VERSION_TO12 CMP R4、R3 ldrge r3, =ROM_API_TABLE_BASE_ADDR_MX6DL_TO12 ldrlt r3, =ROM_API_TABLE_BASE_ADDR_LEGACY LDR R4, [R3, #ROM_API_HWCNFG_SETUP_OFFSET] //行がありません blx r4 /* このアドレスは将来のROMバージョンで変更される可能性があります */ after_calling_rom___pu_irom_hwcnfg_setup: Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはジャンピングマオ、 私はimx6用のubootの2015バージョンを使用していましたが、プラグインのサポートが機能しませんでした。スプレッドスペクトルのパッチをテストするために、どのリポジトリを使用すべきか知りたいのですが。 よろしくお願いします。 John Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 親愛なるジュンピン・マオ、 Linux BSP L3.10.17_1.0.2で変更するファイルの詳細はありますか? よろしくお願いします。 PK Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはティム・ヤークス、 flash_header.S.以外のファイルを変更したようです。それはどのBSPバージョンで、どのファイルを変更しましたか? Linux BSP L3.10.17_1.0.2を使用していますが、flash_header.Sが表示されません。 よろしくお願いします。 PK Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ありがとうティム、それは私たちのために働きます! Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 私のコードから次のスニペットを見てください: /* スペクトラム拡散モードを無効にする */ __raw_writel((__raw_readl(anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET) & ~ANADIG_PLL_528_SYS_SS_ENABLE), anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET);     /* 新しい値を書き込む */ __raw_writel(sys_ss、anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET); __raw_writel(デノム、anatop_base + PLL2_528_OFFSET + PLL_528_DENOM_DIV_OFFSET);     /* スペクトラム拡散モードを有効にする */ if (有効) __raw_writel((__raw_readl(anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET) |ANADIG_PLL_528_SYS_SS_ENABLE)、anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET); denom=0x190、sys_ss=0xFA0001、enabled=1 で試してみました (これにより、スペクトラム拡散範囲は 15 MHz、変調周波数は 48 kHz、周波数ステップは 60 kHz になります)。 カーネルが起動した後、実行時に procfs エントリに書き込んでこのコードを使用します。 Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello Uwe, IVT セクションにすべての絶対アドレスが表示されます (例:app_code_jump_v: .long0x00907458)が、私の古いコードでは、ラベルベースのアドレス割り当て(app_code_jump_v:.word _start)があります。 ソロでも機能しますか?私はuboot 2009を使用していますが、与えられた変更により、私のボードは起動しません。 よろしくお願いします。 Rajendra Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello Tim, スペクトラム拡散をオンザフライで有効にするための説明をお願いします。カーネルボードのinitファイルから下に2つのレジスタを書き込んでいますが、変更はありません。 0x20c 8060 = 0x1770 0x20c 8040 = 0x05dc8006 他に何かやるべきことはありますか? よろしくお願いします。 Rajendra Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはジャンピングマオ、 このアーティスを提供していただき、PLL2をスペクトラム拡散モードで設定するためのブートローダーの変更に感謝します。 このガイダンスに従っていますが、i.MX6Dシステムで実行すると起動の問題が発生します。最後に、プラグインが拒否され、それを修正できることがわかりました。 このディスカッションでは 、i.MX6DでPLL2スペクトラム拡散機能を有効にします flash_headerをアップロードしました。他のユーザーが同じ問題を抱えている可能性がある場合に備えて。 また、PLL2の電源を切る/上げる順序も変更しました。MX6D の PLL2 レジスタ記述を使用して、BYPASS モードのビットを Power Down (0x00001000) ではなく (0x00010000) に設定しました。 それでは。 Uwe Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ありがとう、ジャンピングマオ。フリースケール、これを確認していただけますか?このシーケンスが説明されている公式の文書はありますか?ここでは、i.MX6ベースのシステムでスペクトラム拡散をオンザフライで有効にしており、機能しているようです(測定された周波数スペクトラムで変化がすぐに確認できます)。副作用を覚悟する必要がありますか? Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Tim, 情報はSOCの所有者からのものであり、必要なシーケンスであり、その場で設定することはできません Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはジャンピングマオ、 あなたの文書をありがとう。「スペクトラム拡散を有効にするには、PLL2 を再構成し、シャットダウンしてスペクトラム拡散をイネーブル/設定し、再び電源をオンにする必要がある」と言います。この情報はどこから入手しましたか?i.MX6のリファレンスマニュアル(IMX6DQ-RefMan-RM-r2-2014-06.pdf)にはこのようなものが見つかりません。私の理解では、スペクトラム拡散をオンザフライで有効にすることは可能になるはずです。私は正しいですか?フリースケールの人でこれを確認できる人はいますか? よろしくお願いいたします。 Tim Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 親愛なるジュンピン・マオ、 投稿ありがとうございますが、視認性を高めるために、適切なコミュニティの場所に移動することを検討してください。 詳細については、一般的なアドバイスを参照してください https://community.freescale.com/docs/DOC-99909 平素よりフリースケール・コミュニティをご利用いただき、誠にありがとうございます。 よろしくお願いします。 Wlodek_D。 Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ドキュメント内の一部の単語を修正し 、「OSC_CLKに切り替える前に、PLL2の電源を切る必要があります 」を「OSC_CLKに切り替える後、PLL2の電源を切り ます」に変更します。
查看全文
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 年 飞思卡尔杯内容
查看全文
使用顺序 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 中找到它。如何检测和报告链接状态? 谢谢!
查看全文
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 存档文件。 选择所有可用项目并单击“下一步”按钮。  
查看全文