Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
无法在RIOP RT1189开发板上运行RT1180 EVK SDK示例 大家好, 我正在使用RIOP RT1189开发板,有一些关于软件兼容性和调试方面的问题。 最初,我使用串行下载模式下的安全配置工具成功地对 RIOP 演示应用程序进行了编程,并且演示程序运行正常。 之后,我尝试在 RIOP RT1189 板上运行 MIMXRT1180 EVK SDK 示例项目(例如 LED Blinky 示例)。 我尝试过 修改了 RT1180 EVK LED 闪烁示例中的 LED 引脚配置,使其与 RIOP RT1189 板匹配。 使用安全配置工具在串行下载模式下对映像进行编程。 但是,该应用程序无法在 RIOP 板上运行。 为了验证硬件,我使用了可运行的 RIOP 演示项目,注释掉了大部分演示功能,只添加了 LED 闪烁代码,然后重新编写了程序。在这种情况下,LED闪烁功能工作正常。 这让我觉得,RIOP 演示中除了简单地更改 LED GPIO 引脚之外,还需要其他特定于电路板的配置。 问题 MIMXRT1180 EVK SDK 示例项目可以直接在 RIOP RT1189 板上使用吗? 如果不行,需要对电路板进行哪些特定修改(时钟配置、内存配置、FlexSPI、链接器脚本、启动代码等)才能使 SDK 示例在 RIOP 板上运行? 调试问题 我还尝试使用 MCU-Link 调试演示应用程序,但调试器在闪存初始化期间失败,并出现以下错误: 使用 SFDP JEDEC ID MIMXRT1180_SFDP_FlexSPI1_A_QSPI.cfx 检查了 SPI 接口的 v.2 外部闪存设备。 图像'iMXRT1180_SFDP_FlexSPI1_A_QSPI 2025年6月26日 18:32:16' 打开闪存驱动程序 MIMXRT1180_SFDP_FlexSPI1_A_QSPI.cfx 请求 VECTRESET,但 ARMv8-M CPU 不支持此功能。改用软重置。 使用软复位来运行闪存驱动程序 驱动程序 V.2 动态启动失败 - 驱动程序初始化未提供闪存参数 Flash Driver V.2 启动失败 - rc Ef(55): 动态闪存驱动程序启动未能提供闪存参数。 终止 (0x0, 0x0, 0x0) 状态 0x40 - 驱动程序报告初始化失败 - EXTSPIJ 驱动程序返回码 20107 (0x4E8B) 芯片初始化失败 - Ef(55): 动态闪存驱动程序启动未能提供闪存参数。 初始化闪存驱动程序 MIMXRT1180_SFDP_FlexSPI1_A_QSPI.cfx 失败 这个错误是否表明 RT1180 EVK 闪存驱动程序与 RIOP RT1189 板上使用的外部闪存不兼容,或者是否需要提供额外的闪存配置来进行调试? 任何指导或建议都将不胜感激。 谢谢!
View full article
Regarding the consistency of LPC-Link2 serial numbers I would like to ask how to change the serial number of several LPC-Link2 chips if they are identical. Thank you. Re: 关于lpc-link2 SN码一致 Hi @chenwei97 This serial number cannot be modified. If you are connecting multiple LPC-LINK2 devices simultaneously, it is recommended to update to the CMSIS-DAP firmware. This will give each debugger a unique ID number. BR Alice
View full article
HSE INSTALL S32K311 下面的所有内容都是从附件中复制 S32DS版本:S32DS.3.5_b220726_win32.x86_64 (1).exe RTD版本:SW32K3_RTD_R21-11_3.0.0_P07_D2306_DS_updatesite.zip S32K311支持包版本:SW32K3_S32DS_3.5.6_D2309.zip SBAF版本:SBAF_S32K311_0_0_15_0, Bin文件:s32k311_Secure_Baf_0.12.0_0.15.0.6_pb230804.bin.pink HSE版本:HSE_FW_S32K311_0_2_40_0, bin文件为s32k311_hse_fw_0.12.0_2.40.0_pb230730.bin.pink 使用FULL_MEM 没有安全启动 当前遇到的一个问题 程序运行会一直卡在这里while ( FALSE == HSE_CheckStatus(HSE_STATUS_INIT_OK) );             Re: HSE INSTALL S32K311 这个是补充的printf信息 DCMROF21: 0x00040000 HSE GPR3: 0x000000C0 Current_SBAF_Version-0x4039c020: 0x00000C00 LC 配置字-0x4039C02C: 0x00000000 生命周期相关信息-0x402AC200: 0x00000000 HSE Status: 0x00000000 我从网上查阅资料,是不是芯片出场自带的SBAF不识别我现在使用的HSE固件? Re: HSE INSTALL S32K311 我怀疑是SBAF没有将flash中的hse固件复制到hse_nvm中,如果是这个问题,我应该怎么解决 Re: HSE INSTALL S32K311 这个是我打印的数据 DCMROF21: 0x00040000 HSE GPR3: 0x000000C0 HSE Status: 0x00000000 HSE 固件未启动(NVM 空或固件损坏) Re: HSE INSTALL S32K311 嗨@iiiddd 请问能否提供 HSE_CONFIG_GPR3 (0x4039C028) 的值?位 0 表示 HSE 固件是否存在。 BR,VaneB Re: HSE INSTALL S32K311 我在编写 UTEST 时调用了 RTD 库。 gHsePort_FlsIf.writeApi(UTEST_BASE_ADDR,(uint8_t*)hseFwFeatureFlag,FW_FEATURE_FLAG_LEN); 将使用 FLS_MAX_VIRTUAL_SECTOR 定义。我的 RTD 库默认值为 135,但访问地址 0x1B000000UL 需要 136。我使用的RTD库与HSE不兼容吗? Re: HSE INSTALL S32K311 嗨@iiiddd HSE_CONFIG_GPR3[0] 位未设置,这表明设备上不存在 HSE 硬件。 作为参考,下图显示了为在 S32K311 设备上安装 HSE FW FULL_MEM 而配置的链接器文件示例:
View full article
HSE INSTALL S32K311 All the content below is copied from the attachment. S32DS version: S32DS.3.5_b220726_win32.x86_64 (1).exe RTD version: SW32K3_RTD_R21-11_3.0.0_P07_D2306_DS_updatesite.zip S32K311 Support Package Version: SW32K3_S32DS_3.5.6_D2309.zip SBAF version: SBAF_S32K311_0_0_15_0 Bin file: s32k311_Secure_Baf_0.12.0_0.15.0.6_pb230804.bin.pink HSE version: HSE_FW_S32K311_0_2_40_0 The bin file is s32k311_hse_fw_0.12.0_2.40.0_pb230730.bin.pink Use FULL_MEM No safe boot A problem currently encountered The program will get stuck here: `while ( FALSE == HSE_CheckStatus(HSE_STATUS_INIT_OK) );`           Re: HSE INSTALL S32K311 This is supplementary printf information. DCMROF21: 0x00040000 HSE GPR3: 0x000000C0 Current_SBAF_Version-0x4039c020: 0x00000C00 LC configuration word -0x4039C02C: 0x00000000 Lifecycle-related information - 0x402AC200: 0x00000000 HSE Status: 0x00000000 I've looked up information online, and it seems the SBAF that comes with the chip doesn't recognize the HSE firmware I'm currently using. Re: HSE INSTALL S32K311 I suspect that SBAF failed to copy the HSE firmware from the flash memory to the HSE_NVM. If this is the problem, how should I resolve it? Re: HSE INSTALL S32K311 This is the data I printed. DCMROF21: 0x00040000 HSE GPR3: 0x000000C0 HSE Status: 0x00000000 HSE firmware not started (NVM empty or firmware corrupted) Re: HSE INSTALL S32K311 Hi @iiiddd  Could you please share the value of HSE_CONFIG_GPR3 (0x4039C028)? Bit 0 indicates whether the HSE Firmware is present. BR, VaneB Re: HSE INSTALL S32K311 The RTD library I'm using is called when writing UTEST. gHsePort_FlsIf.writeApi(UTEST_BASE_ADDR,(uint8_t*)hseFwFeatureFlag,FW_FEATURE_FLAG_LEN); The FLS_MAX_VIRTUAL_SECTOR definition will be used. My RTD library defaults to 135, but accessing the address 0x1B000000UL requires 136. Is the RTD library I'm using incompatible with HSE? Re: HSE INSTALL S32K311 Hi @iiiddd  The HSE_CONFIG_GPR3[0] bit is not set, which indicates that the HSE hardware is not present on the device. For reference, the following image shows an example of a linker file configured for the installation of the HSE FW FULL_MEM on an S32K311 device:
View full article
Training material (PPT and Video) list for S32K3 (until Jan. 2026) Hi. After you login www.nxp.com and Please switch to ENGLISH mode      Click on the link below https://www.nxp.com/design/design-center/training:TRAINING-EVENTS?collection=trainings &start=0 &max=12 &sorting=sort_date. desc &parameters=TrainingType.Topics.deviceTax.applicationTax.country.region.application.TrainingLanguage.TrainingFormat.skillLevel. durationTime.provider &language=en &query=TrainingFormat %3E%3EOnline::training_date %3E%3E2026-02-02... * &keyword=s32k &siblings=false You can get the following training topics with input the topic as You can get the following training topics with input the topic as searching keyword. S32K3 Part 1 MKT Overview (DFAE Only) Training Presentation S32K3 Part 3 Hardware and Software Tools Overview (DFAE Only) Training Presentation S32K3 Part 5 RTD Overview and Demo (DFAE Only) Training Presentation S32K3 and MCSPTE1AK344 Motor Control Kit Training Presentation S32K3 Booting and Startup Process Memory (Chinese) Training Video S32K3 Debug Based on MCAL and FreeMASTER S32K3 Debug Based-On MCAL EB Freemaster (Chinese) Training Video S32K3 Debugging Skills Training Presentation S32K3 Deep Dive and Design Tips Part 1 Training Presentation S32K3 Deep Dive and Design Tips Part 2 Training Presentation S32K3 Deep Dive and Design Tips Part 3 Training Presentation S32K3 Deep Dive and Design Tips Part 4 Training Presentation S32K3 DFAE Day 1 Training Presentation S32K3 DFAE Day 2 Training Presentation S32K3 DFAE Training HSE Security Aspects Day 2 S32K3 DFAE Training Memory Link Boot Day 2 S32K3 DFAE Training Day 1 S32K3 Documents Location On Security Safety (Chinese) Training Video S32K3 Getting Started Training Presentation S32K3 How to Request Access to Safety Documentation S32K3 HSE Security Library Enablement Training Presentation S32K3 HSE-B with Demo (Chinese) Training Video S32K3 Memory Link Boot (Chinese) Training Video S32K3 Part 2 Architecture and Technical Overview DFAE Only Training Presentation S32K3 Part 4 K1 to K3 Hardware and Software Migration Guide DFAE Only Training Presentation S32K3 Safey Design Consideration Training Presentation S32K3 Software Enablement DFAE Training Part 1 S32K3 Software Enablement DFAE Training Part 1 - Auto MCU RTD Demo Porting Techniques S32K3 Software Enablement DFAE Training Part 1 - Getting Started with S32K RTD Features S32K3 Software Enablement DFAE Training Part 1 - HAL and EL demos Show S32K3 Software Enablement DFAE Training Part 1 - How to Import RTD MCAL to IAR project S32K3 Software Enablement DFAE Training Part 1 - How to Import RTD MCAL to S32DS project S32K3 Software Enablement DFAE Training Part 1 - How to Use GHS Complier Build S32K3 RTD MCAL S32K3 Software Enablement DFAE Training Part 1 - SW Commercial Offering HAL and EL Bundle S32K3 Software Enablement DFAE Training Part 2 S32K3 Software Enablement DFAE Training Part 2 - AUTOSAR and MCAL Architecture S32K3 Software Enablement DFAE Training Part 2 - MCAL Training AE S32K3 Software Enablement DFAE Training Part 2 - MCAL Training CAN S32K3 Software Enablement DFAE Training Part 2 - MCAL Training CRC S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Crypto S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Dio S32K3 Software Enablement DFAE Training Part 2 - MCAL Training DPGA S32K3 Software Enablement DFAE Training Part 2 - MCAL Training ETH S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Fee S32K3 Software Enablement DFAE Training Part 2 - MCAL Training GDUs S32K3 Software Enablement DFAE Training Part 2 - MCAL Training I2C S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Icu S32K3 Software Enablement DFAE Training Part 2 - MCAL Training MCL S32K3 Software Enablement DFAE Training Part 2 - MCAL Training MCUs S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Mem S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Mem Acc S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Mem Eep S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Mem EXFIs S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Mem INFIs S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Multicore S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Ocu S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Port S32K3 Software Enablement DFAE Training Part 2 - MCAL Training SPI S32K3 Software Enablement DFAE Training Part 2 - MCAL Training UART S32K3 Software Enablement DFAE Training Part 3 S32K3 Software Enablement DFAE Training Part 3 - Function Safety General S32K3 Software Enablement DFAE Training Part 3 - Hands-On Creating Projects with Multiple MCAL Modules S32K3 Software Enablement DFAE Training Part 3 - Hands-On Creating Projects with Multiple MCAL Modules S32K3 Software Enablement DFAE Training Part 3 - HSE Hands-On Workshop-S32K3 HSE Security Library Enablement S32K3 Software Enablement DFAE Training Part 3 - HSE Hands-On Workshop-S32K3 HSE Security Library Enablement S32K3 Software Enablement DFAE Training Part 3 - HSE NXP Security on S32K3 S32K3 Software Enablement DFAE Training Part 3 - HSE NXP Security on S32K3 S32K3 Software Enablement DFAE Training Part 3 - Integrating Safety with S32 Safety Software Framework S32K3 Software Enablement DFAE Training Part 3 - Introduction of S32K3 HSE and Debugging Techniques S32K3 T-BOX Business Training Presentation S32K3 Zonal Aggregators, Telematics Box and Communications Protocols Training Presentation GC DFAE Training S32K SW Day 5 Training Presentation Introduction to S32K Hardware Security Engine HSE Library and Debugging Techniques Training Presentation K3 booting and startup process           Re: Training material(PPT and Video) list for S32K3 (until Jan. 2026) Enjoy these training! Cheers! Oliver Re: Training material(PPT and Video) list for S32K3 (until Jan. 2026) Where do I find this material now?
View full article
Training material(PPT and Video) list for S32K3 (until Jan. 2026) Hi,     After you login www.nxp.com and       请切换到ENGLISH模式          点击下面链接 https://www.nxp.com/design/design-center/training:TRAINING-EVENTS?collection=trainings&start=0&max=12&sorting=sort_date.desc&parameters=TrainingType.Topics.deviceTax.applicationTax.country.region.application.TrainingLanguage.TrainingFormat.skillLevel.durationTime.provider&language=en&query=TrainingFormat%3E%3EOnline::training_date%3E%3E2026-02-02..*&keyword=s32k&siblings=false    You can get the following training topics with input the topic as searching keyword.  S32K3  Part 1 MKT Overview (DFAE Only) Training Presentation S32K3  Part 3 Hardware and Software Tools Overview (DFAE Only) Training Presentation S32K3  Part 5 RTD Overview and Demo (DFAE Only) Training Presentation S32K3 and MCSPTE1AK344 Motor Control Kit Training Presentation S32K3 Booting and Startup Process Memory (Chinese) Training Video S32K3 Debug Based on MCAL and FreeMASTER S32K3 Debug Based-On MCAL EB Freemaster (Chinese) Training Video S32K3 Debugging Skills Training Presentation S32K3 Deep Dive and Design Tips Part 1 Training Presentation S32K3 Deep Dive and Design Tips Part 2 Training Presentation S32K3 Deep Dive and Design Tips Part 3 Training Presentation S32K3 Deep Dive and Design Tips Part 4 Training Presentation S32K3 DFAE Day 1 Training Presentation S32K3 DFAE Day 2 Training Presentation S32K3 DFAE Training  HSE Security Aspects Day 2 S32K3 DFAE Training  Memory Link Boot Day 2 S32K3 DFAE Training Day 1 S32K3 Documents Location On Security Safety (Chinese) Training Video S32K3 Getting Started Training Presentation S32K3 How to Request Access to Safety Documentation S32K3 HSE Security Library Enablement Training Presentation S32K3 HSE-B with Demo (Chinese) Training Video S32K3 Memory Link Boot (Chinese) Training Video S32K3 Part 2 Architecture and Technical Overview DFAE Only Training Presentation S32K3 Part 4 K1 to K3 Hardware and Software Migration Guide DFAE Only Training Presentation S32K3 Safey Design Consideration Training Presentation S32K3 Software Enablement DFAE Training Part 1 S32K3 Software Enablement DFAE Training Part 1 - Auto MCU RTD Demo Porting Techniques S32K3 Software Enablement DFAE Training Part 1 - Getting Start with S32K RTD Features S32K3 Software Enablement DFAE Training Part 1 - HAL and EL demos Show S32K3 Software Enablement DFAE Training Part 1 - How to Import RTD MCAL to IAR project S32K3 Software Enablement DFAE Training Part 1 - How to Import RTD MCAL to S32DS project S32K3 Software Enablement DFAE Training Part 1 - How to Use GHS Complier Build S32K3 RTD MCAL S32K3 Software Enablement DFAE Training Part 1 - SW Commercial Offering HAL and EL Bundle S32K3 Software Enablement DFAE Training Part 2 S32K3 Software Enablement DFAE Training Part 2 - AUTOSAR and MCAL Architecture S32K3 Software Enablement DFAE Training Part 2 - MCAL Training AE S32K3 Software Enablement DFAE Training Part 2 - MCAL Training CAN S32K3 Software Enablement DFAE Training Part 2 - MCAL Training CRC S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Crypto S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Dio S32K3 Software Enablement DFAE Training Part 2 - MCAL Training DPGA S32K3 Software Enablement DFAE Training Part 2 - MCAL Training ETH S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Fee S32K3 Software Enablement DFAE Training Part 2 - MCAL Training GDU S32K3 Software Enablement DFAE Training Part 2 - MCAL Training I2C S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Icu S32K3 Software Enablement DFAE Training Part 2 - MCAL Training MCL S32K3 Software Enablement DFAE Training Part 2 - MCAL Training MCU S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Mem S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Mem Acc S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Mem Eep S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Mem EXFIs S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Mem INFIs S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Multicore S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Ocu S32K3 Software Enablement DFAE Training Part 2 - MCAL Training Port S32K3 Software Enablement DFAE Training Part 2 - MCAL Training SPI S32K3 Software Enablement DFAE Training Part 2 - MCAL Training UART S32K3 Software Enablement DFAE Training Part 3 S32K3 Software Enablement DFAE Training Part 3 - Function Safety General S32K3 Software Enablement DFAE Training Part 3 - Hands-On Creating Projects with Multiple MCAL Modules S32K3 Software Enablement DFAE Training Part 3 - Hands-On Creating Projects with Multiple MCAL Modules S32K3 Software Enablement DFAE Training Part 3 - HSE Hands-On Workshop-S32K3 HSE Security Library Enablement S32K3 Software Enablement DFAE Training Part 3 - HSE Hands-On Workshop-S32K3 HSE Security Library Enablement S32K3 Software Enablement DFAE Training Part 3 - HSE NXP Security on S32K3 S32K3 Software Enablement DFAE Training Part 3 - HSE NXP Security on S32K3 S32K3 Software Enablement DFAE Training Part 3 - Integrating Safety with S32 Safety Software Framework S32K3 Software Enablement DFAE Training Part 3 - Introduction of S32K3 HSE and Debugging Techniques S32K3 T-BOX Business Training Presentation S32K3 Zonal Aggregators, Telematics Box and Communications Protocols Training Presentation GC DFAE Training S32K SW Day 5 Training Presentation Introduction to S32K Hardware Security Engine HSE Library and Debugging Techniques Training Presentation K3 booting and startup process           Re: Training material(PPT and Video) list for S32K3 (until Jan. 2026) 享受这些培训! 干杯 奥利弗 Re: Training material(PPT and Video) list for S32K3 (until Jan. 2026) 我现在在哪里可以找到这些材料?
View full article
RT1176 PWM startup failed I am using PWM + fault + QTimer to implement motor pulse control, but the PWM3 submodule 0 PWM_A channel occasionally fails to start, where after the first high level it remains constant and subsequent pulses do not appear.After the inspection, it was found that the "run" bit of the pwm was not correctly set. Even though repeated startup operations were added in the program later, this anomaly still occurred. Re: RT1176 PWM startup failed Hi @liu626, Are you using a custom board or an EVK? If you are using the EVK, did you make any rework to it? Could you share the configuration you are using for PWM3? Are you using an example as a reference? If so, which one? If you try to replicate the issue using a project with only PWM3, does the problem persist? Does this only happen with PWM3 submodule 0 PWM_A channel? Has this occurred on other PWM modules or submodules? Is there any other task or interrupt that manipulates PWM3 registers and could affect or overwrite the run bit? Best Regards, Pablo Re: RT1176 PWM startup failed hi,I used a custom circuit board. I didn't refer to any examples. This was a problem that was discovered during the official development of the project. I configured six PWM channels for pulse control. Only this channel had problems, while no such issue occurred on the other sub-modules. I checked and found that only this channel was using the PWM3 module. No other interfering factors were detected. Below is my configuration. static axis_ctrl_t g_axes[AXIS_NUM] = { { .id = AXIS_X1, .name = "X1", .pwmBase = PWM1, .pwmModule = kPWM_Module_0, .pwmChannel = kPWM_PwmA, .tmrBase = TMR3, .lowCh = kQTMR_Channel_2, .highCh = kQTMR_Channel_3, .tmrInputsrc=kQTMR_ClockCounter2InputPin, .cascadePcs = 6U, .faultNum = 0U, .hwExactSupported = true, .outTrigMask = kPWM_ValueRegisterMask_3, }, { .id = AXIS_X2, .name = "X2", .pwmBase = PWM2, .pwmModule = kPWM_Module_0, .pwmChannel = kPWM_PwmA, .tmrBase = TMR2, .lowCh = kQTMR_Channel_0, .highCh = kQTMR_Channel_1, .tmrInputsrc=kQTMR_ClockCounter0InputPin, .cascadePcs = 4U, .faultNum = 0U, .hwExactSupported = true, .outTrigMask = kPWM_ValueRegisterMask_3, }, { .id = AXIS_Y, .name = "Y", .pwmBase = PWM3, .pwmModule = kPWM_Module_0, .pwmChannel = kPWM_PwmA, .tmrBase = TMR3, .lowCh = kQTMR_Channel_0, .highCh = kQTMR_Channel_1, .tmrInputsrc=kQTMR_ClockCounter0InputPin, .cascadePcs = 4U, .faultNum = 0U, .hwExactSupported = true, .outTrigMask = kPWM_ValueRegisterMask_3, }, { .id = AXIS_Z, .name = "Z", .pwmBase = PWM4, .pwmModule = kPWM_Module_0, .pwmChannel = kPWM_PwmA, .tmrBase = TMR1, .lowCh = kQTMR_Channel_0, .highCh = kQTMR_Channel_1, .tmrInputsrc=kQTMR_ClockCounter0InputPin, .cascadePcs = 4U, .faultNum = 0U, .hwExactSupported = true, .outTrigMask = kPWM_ValueRegisterMask_3, }, { .id = AXIS_EX1, .name = "EX1", .pwmBase = PWM1, .pwmModule = kPWM_Module_1, .pwmChannel = kPWM_PwmA, .tmrBase = TMR1, .lowCh = kQTMR_Channel_2, .highCh = kQTMR_Channel_3, .tmrInputsrc=kQTMR_ClockCounter2InputPin, .cascadePcs = 6U, .faultNum = 1U, .hwExactSupported = true, .outTrigMask = kPWM_ValueRegisterMask_3, }, { .id = AXIS_EX2, .name = "EX2", .pwmBase = PWM2, .pwmModule = kPWM_Module_1, .pwmChannel = kPWM_PwmA, .tmrBase = TMR2, .lowCh = kQTMR_Channel_2, .highCh = kQTMR_Channel_3, .tmrInputsrc=kQTMR_ClockCounter2InputPin, .cascadePcs = 6U, .faultNum = 1U, .hwExactSupported = true, .outTrigMask = kPWM_ValueRegisterMask_3, }, };static void APP_Init_PWM_QTMR(void) { pwm_config_t pwmConfig; pwm_fault_param_t faultConfig; qtmr_config_t qtmrConfig; PWM_GetDefaultConfig(&pwmConfig); pwmConfig.pairOperation = kPWM_Independent; pwmConfig.reloadLogic = kPWM_ReloadImmediate; PWM_FaultDefaultConfig(&faultConfig); faultConfig.faultLevel = true; faultConfig.enableCombinationalPath = false; faultConfig.faultClearingMode = kPWM_ManualSafety; faultConfig.recoverMode = kPWM_NoRecovery; QTMR_GetDefaultConfig(&qtmrConfig); CLOCK_EnableClock(kCLOCK_Qtimer1); CLOCK_EnableClock(kCLOCK_Qtimer2); CLOCK_EnableClock(kCLOCK_Qtimer3); PWM_StopTimer(PWM1, 0x0FU); PWM_StopTimer(PWM2, 0x0FU); PWM_StopTimer(PWM3, 0x0FU); PWM_StopTimer(PWM4, 0x0FU); pwm_fault_input_filter_param_t faultFilter; faultFilter.faultFilterPeriod = 255U; faultFilter.faultFilterCount = 7U; faultFilter.faultGlitchStretch = false; /* 记录每个 PWM 实例上已配置的 fault channel,避免重复设置 */ uint16_t pwm1FaultDone = 0U, pwm2FaultDone = 0U, pwm3FaultDone = 0U, pwm4FaultDone = 0U; for (uint8_t i = 0U; i < AXIS_NUM; i++) { axis_ctrl_t *ax = &g_axes[i]; PWM_Init(ax->pwmBase, ax->pwmModule, &pwmConfig); PWM_SetupFaults(ax->pwmBase, (pwm_fault_input_t)ax->faultNum, &faultConfig); /* 故障滤波(每个 PWM 实例的每个 fault channel 只设一次) */ { uint16_t *faultDone; if (ax->pwmBase == PWM1) faultDone = &pwm1FaultDone; else if (ax->pwmBase == PWM2) faultDone = &pwm2FaultDone; else if (ax->pwmBase == PWM3) faultDone = &pwm3FaultDone; else faultDone = &pwm4FaultDone; uint16_t faultBit = (uint16_t)(1U << ax->faultNum); if ((*faultDone & faultBit) == 0U) { PWM_SetupFaultInputFilterExt(ax->pwmBase, (pwm_fault_channels_t)ax->faultNum, &faultFilter); *faultDone |= faultBit; } } /* Fault 时输出低电平 */ ax->pwmBase->SM[ax->pwmModule].OCTRL &= ~(PWM_OCTRL_PWMAFS_MASK | PWM_OCTRL_PWMBFS_MASK); APP_PWM_Unmap_Selected_Fault(ax); APP_PWM_ClearFault_Safe(ax); ax->pwmBase->SM[ax->pwmModule].INIT = 0U; ax->pwmBase->SM[ax->pwmModule].VAL0 = 0U; ax->pwmBase->SM[ax->pwmModule].VAL1 = 1U; ax->pwmBase->SM[ax->pwmModule].VAL2 = 0U; ax->pwmBase->SM[ax->pwmModule].VAL3 = 0U; ax->pwmBase->SM[ax->pwmModule].VAL4 = 0U; ax->pwmBase->SM[ax->pwmModule].VAL5 = 0U; ax->pwmBase->SM[ax->pwmModule].TCTRL = PWM_TCTRL_OUT_TRIG_EN(ax->outTrigMask); APP_PWM_Disable_Output(ax); if (ax->hwExactSupported) { qtmrConfig.primarySource = ax->tmrInputSrc; QTMR_Init(ax->tmrBase, ax->lowCh, &qtmrConfig); QTMR_Init(ax->tmrBase, ax->highCh, &qtmrConfig); ax->tmrBase->CHANNEL[ax->lowCh].CTRL = TMR_CTRL_CM(kQTMR_PriSrcRiseEdge) | TMR_CTRL_PCS(ax->tmrInputSrc); ax->tmrBase->CHANNEL[ax->highCh].CTRL = TMR_CTRL_CM(kQTMR_CascadeCount) | TMR_CTRL_PCS(ax->cascadePcs); APP_QTMR_Disable_Low_OFLAG_Output(ax); QTMR_DisableInterrupts(ax->tmrBase, ax->lowCh, 0xFFU); QTMR_DisableInterrupts(ax->tmrBase, ax->highCh, 0xFFU); QTMR_ClearStatusFlags(ax->tmrBase, ax->lowCh, 0xFFU); QTMR_ClearStatusFlags(ax->tmrBase, ax->highCh, 0xFFU); } ax->phase = kAxisIdle; ax->armed = false; ax->running = false; ax->done = true; #if HARD_PWM_STATE_GUARD_ENABLE APP_StateGuard_Reset(ax); #endif } /* 使能 QTMR 中断 */ NVIC_SetPriority(TMR1_IRQn, 2U); NVIC_SetPriority(TMR2_IRQn, 2U); NVIC_SetPriority(TMR3_IRQn, 2U); EnableIRQ(TMR1_IRQn); EnableIRQ(TMR2_IRQn); EnableIRQ(TMR3_IRQn); }static bool APP_PWM_Config_Pulse(axis_ctrl_t *axis, uint32_t highCnt400M, uint32_t lowCnt400M) { pwm_clock_prescale_t prescale; uint16_t periodTicks; uint32_t totalCnt400M = highCnt400M + lowCnt400M; if ((axis == NULL) || (totalCnt400M == 0U)) return false; if (!APP_PWM_SelectPrescaler_FromPeriodCnt400M(totalCnt400M, &prescale, &periodTicks)) return false; uint32_t highTicks32 = (uint32_t)(((uint64_t)periodTicks * (uint64_t)highCnt400M + ((uint64_t)totalCnt400M / 2ULL)) / (uint64_t)totalCnt400M); if (highTicks32 == 0U) highTicks32 = 1U; if (highTicks32 >= periodTicks) highTicks32 = (uint32_t)periodTicks - 1U; uint32_t riseTicks32 = 0U; uint32_t fallTicks32 = highTicks32; #if HARD_PWM_LOW_START_PHASE_ENABLE uint32_t lowTicks32 = (uint32_t)periodTicks - highTicks32; if (lowTicks32 >= (2U * HARD_PWM_LOW_START_PHASE_MIN_TICKS)) { uint32_t desiredLeadCnt400M = highCnt400M; uint32_t minLeadCnt400M = (uint32_t)HARD_PWM_LOW_START_PHASE_MIN_US * 400U; if (desiredLeadCnt400M < minLeadCnt400M) desiredLeadCnt400M = minLeadCnt400M; uint32_t desiredLeadTicks32 = (uint32_t)(((uint64_t)periodTicks * (uint64_t)desiredLeadCnt400M + ((uint64_t)totalCnt400M / 2ULL)) / (uint64_t)totalCnt400M); if (desiredLeadTicks32 < HARD_PWM_LOW_START_PHASE_MIN_TICKS) desiredLeadTicks32 = HARD_PWM_LOW_START_PHASE_MIN_TICKS; uint32_t maxRiseByHalfTicks32 = lowTicks32 / 2U; uint32_t postGuardTicks32 = (uint32_t)(((uint64_t)periodTicks * (uint64_t)(HARD_PWM_VAL3_POST_LOW_GUARD_US * 400U) + ((uint64_t)totalCnt400M / 2ULL)) / (uint64_t)totalCnt400M); if (postGuardTicks32 < HARD_PWM_VAL3_POST_LOW_GUARD_MIN_TICKS) postGuardTicks32 = HARD_PWM_VAL3_POST_LOW_GUARD_MIN_TICKS; uint32_t maxRiseByPostGuardTicks32 = (lowTicks32 > postGuardTicks32) ? (lowTicks32 - postGuardTicks32) : 0U; uint32_t selectedRiseTicks32; if (maxRiseByHalfTicks32 >= desiredLeadTicks32) { selectedRiseTicks32 = desiredLeadTicks32; if (selectedRiseTicks32 > maxRiseByHalfTicks32) selectedRiseTicks32 = maxRiseByHalfTicks32; } else if (maxRiseByPostGuardTicks32 >= desiredLeadTicks32) { selectedRiseTicks32 = desiredLeadTicks32; if (selectedRiseTicks32 > maxRiseByPostGuardTicks32) selectedRiseTicks32 = maxRiseByPostGuardTicks32; } else { selectedRiseTicks32 = maxRiseByPostGuardTicks32; } if (selectedRiseTicks32 >= HARD_PWM_LOW_START_PHASE_MIN_TICKS) { riseTicks32 = selectedRiseTicks32; fallTicks32 = riseTicks32 + highTicks32; } } #endif if (fallTicks32 >= (uint32_t)periodTicks) fallTicks32 = (uint32_t)periodTicks - 1U; uint16_t riseTicks = (uint16_t)riseTicks32; uint16_t fallTicks = (uint16_t)fallTicks32; PWM_SetPwmLdok(axis->pwmBase, APP_PwmModuleMask(axis), false); uint16_t ctrl = axis->pwmBase->SM[axis->pwmModule].CTRL; ctrl &= (uint16_t)(~PWM_CTRL_PRSC_MASK); ctrl |= PWM_CTRL_PRSC(prescale); axis->pwmBase->SM[axis->pwmModule].CTRL = ctrl; axis->pwmBase->SM[axis->pwmModule].INIT = 0U; axis->pwmBase->SM[axis->pwmModule].VAL0 = 0U; axis->pwmBase->SM[axis->pwmModule].VAL1 = (uint16_t)(periodTicks - 1U); if (axis->pwmChannel == kPWM_PwmA) { axis->pwmBase->SM[axis->pwmModule].VAL2 = riseTicks; axis->pwmBase->SM[axis->pwmModule].VAL3 = fallTicks; } else if (axis->pwmChannel == kPWM_PwmB) { axis->pwmBase->SM[axis->pwmModule].VAL4 = riseTicks; axis->pwmBase->SM[axis->pwmModule].VAL5 = fallTicks; } axis->pwmBase->SM[axis->pwmModule].TCTRL = PWM_TCTRL_OUT_TRIG_EN(axis->outTrigMask); PWM_SetPwmLdok(axis->pwmBase, APP_PwmModuleMask(axis), true); PWM_SetPwmLdok(axis->pwmBase, APP_PwmModuleMask(axis), true); axis->pwmConfigValid = true; axis->cachedHighCnt400M = highCnt400M; axis->cachedLowCnt400M = lowCnt400M; return true; } Re: RT1176 PWM startup failed Hi @liu626, Could you help me isolate the configuration and test whether the issue persists when only PWM3 is initialized? After reviewing the configuration, you shared and in order to try to replicate the behavior, I have the following questions: What is the definition of axis_ctrl_t? Are HARD_PWM_LOW_START_PHASE_ENABLE and HARD_PWM_STATE_GUARD_ENABLE enabled in your application? What do the following APP functions do? APP_PWM_Unmap_Selected_Fault APP_PWM_ClearFault_Safe APP_PWM_Disable_Output APP_QTMR_Disable_Low_OFLAG_Output APP_StateGuard_Reset APP_PWM_SelectPrescaler_FromPeriodCnt400M APP_PwmModuleMask Best Regards, Pablo Re: RT1176 PWM startup failed Thank you for your reply. The GPIO pin I'm using is GPIO_EMC_B1_29 of the rt1176."axis_ctrl_t" is the definition related to the motor shaft. * PWM output pulse -> Trigger XBAR signal -> Falling edge of pulse drives the external clock input of QTMR -> * QTMR 32-bit cascaded counter decrements by 1 -> When it reaches 0, triggers QTMR comparison interrupt -> Interrupt internally turns off PWM * At the same time, QTMR triggers the hardware Fault, directly pulling down the physical output pin of PWM. .id = AXIS_Y, .name = "Y", /* Used for serial port logging or breakpoint debugging to identify the Y-axis */ /* ================= PWM Output Resource Allocation ================= */ .pwmBase = PWM3, /* The Y-axis uses the FlexPWM3 module */ .pwmModule = kPWM_Module_0, /* Uses the sub-module 0 of PWM3 (each PWM has 4 sub-modules from 0 to 3) */ .pwmChannel = kPWM_PwmA, /* Uses the output pin of phase A of sub-module 0, corresponding to the physical pin GPIO_EMC_B1_29 */ /* ================= 32-bit QTMR cascaded count resource allocation ================= */ .tmrBase = TMR3, /* The Y-axis uses the QTMR3 peripheral (corresponding to IRQ interrupt number TMR3_IRQn) */ .lowCh = kQTMR_Channel_0, /* 16-bit low counter: uses channel 0 of TMR3 */ .highCh = kQTMR_Channel_1,/* 16-bit high counter: uses channel 1 of TMR3 */ /* 👉 .lowCh and .highCh are paired, and in the hardware level, they are automatically combined into a 32-bit counter */ /* ================= Configuration of Hardware Cascaded Clock Sources (Core Critical) ================= */ .tmrInputsrc=kQTMR_ClockCounter0InputPin, /* The clock source for Channel 0: Set to "External Pin Input 0". In the XBAR configuration, the falling edge of the pulse from PWM3 is connected to the input pin of Channel 0 of TMR3 through the XBAR. Therefore, every time a pulse is output by PWM, Channel 0 (16-bit) will perform a decrement operation once. */ .cascadePcs = 4U, /* Configuration of the clock source (PCS) for the high 16-bit channel (Channel 1). In the QTMR register of i.MX RT, the PCS value corresponds as follows: 0-3 = External pin input; 4 = Overflow/Termination event of Channel 0; 5 = Overflow/Termination event of Channel 1; 6 = Overflow/Termination event of Channel 2; 7 = Overflow/Termination event of Channel 3. Here, it is configured as 4U, meaning: Let "Channel 1 of TMR3" monitor the "Overflow event of Channel 0 of TMR3". HARD_PWM_LOW_START_PHASE_ENABLE and HARD_PWM_STATE_GUARD_ENABLE have been enabled. APP_PWM_Unmap_Selected_Fault Function: Remove the Fault pin mapping corresponding to the current axis. Call the underlying PWM_SetupFaultDisableMap function to disable the Fault. The purpose is: When the hardware Fault is not needed, prevent accidental external interference from causing the PWM to be turned off, facilitating the underlying debugging process. APP_PWM_ClearFault (original code function) Function: Clear the Fault status flag (axis->pwmBase->FSTS) of the PWM module. After triggering a hardware Fault, you must first clear this flag before the PWM can be allowed to restart. APP_PWM_Disable_Output Function: Immediately stop the PWM timer, force the pin to output a low level (PWM_SetPwmForceOutputToZero), and enable the output. Its purpose is to ensure that the pin does not output a high level due to being left floating or in the default state before the motor starts, which could cause the motor to move erratically. APP_QTMR_Disable_Low_OFLAG_Output Function: Disable the OFLAG (status flag) output of QTMR and force the OFLAG to be at a low level. In conjunction with the XBAR hardware, its role is to cut off the path from the QTMR output to the PWM Fault pin, preventing accidental triggering of Fault before startup. APP_StateGuard_Reset Function: Clears the counters and flags of the state guard (watchdog). This function is used to reset these protection variables before stopping or restarting the system if it encounters a long period of no pulse change or a deadlock when HARD_PWM_STATE_GUARD_ENABLE is enabled. APP_PWM_SelectPrescaler_FromPeriodCnt400M Function: This is a very core underlying frequency calculation function. It receives the total 400MHz count value of High + Low, and calculates how many prescalers (PRSC) and PWM periods (PERIOD) should be set in order to fit into the 16-bit PWM register. Please note: If the calculated period exceeds 65535 and the division coefficient is out of range, this function will return false, causing the motor to fail to start. APP_PwmModuleMask Function: Convert the index number of the PWM sub-module (for example, kPWM_Module_0 with the value 0) into a bit mask shifted left by N bits. Many of NXP's PWM registers (such as OUTEN, MCTRL) are controlled bit by bit. This function is responsible for generating the correct binary mask. Re: RT1176 PWM startup failed I have found the cause. It is because the internal load of the PIT interrupt in the cm4 core is too heavy, which has affected the PWM operation of the cm7 core. After I reduced the load of the PIT interrupt, the failure of PWM startup disappeared.
View full article
使用 MCUXpresso IDE 配置 RT1170 的外部闪存 我目前使用的是搭载 MIMXRT1176CVM8B 的定制电路板。同时,还使用了外置闪光灯,部件号为:W25Q01NW。 但我无法将 MCUXpresso IDE 中的代码烧录到这个新闪存中。(错误截图已附上) 我还修改了evkbmimxrt1170_flexspi_nor_config.c文件。 修改的参数是: .sflashA1Size = 128u * 1024u * 1024u, // 已更改:因为新的闪存大小为 128MB。 还有其他配置参数需要更改吗? 提前致谢 Re: Configuring external flash using MCUXpresso IDE for RT1170 能否帮忙分享一下电路图以便我审核,因为这是一个 1.8V 的设备?同时,闪存和SoC之间的SPI时钟频率如何? Re: Configuring external flash using MCUXpresso IDE for RT1170 你好@brundasathish , 请问您是否正在使用MIMXRT1160/1170 硬件开发指南表 11“ROM 引导加载程序外设引脚复用”中提到的推荐的 FlexSPI NOR QSPI 引脚?我强烈建议您仔细阅读这份文件,其中提供了有关电路板布局建议和设计清单的信息,以确保一次性成功并避免电路板启动问题。 另外,能否请您使用 Secure Provisioning Tool v26.6 中的 启动内存配置 功能测试一下您的闪存配置?这是为了验证您的FCB配置。 BR 哈比卜 Re: Configuring external flash using MCUXpresso IDE for RT1170 你好@db16122 , 电源配置为 1.8V,时钟频率为 133MHz。 Re: Configuring external flash using MCUXpresso IDE for RT1170 你好@Habib_MS , 非常感谢您的回复。我们已经为闪存配置了 flexspi2,以下是已配置的引脚。这是 MCUXpresso IDE 引脚配置的快照。 我们尝试使用安全配置工具配置闪存。这就是我们得到的回复。 谢谢。 Re: Configuring external flash using MCUXpresso IDE for RT1170 你好@brundasathish , 要从 FlexSPI2 次级引脚组启动,需要配置相应的 eFuse,如 RM 的表 10-1“ROM 引导加载程序外设引脚复用”中所述,如下图所示: 请注意,eFuse编程是不可逆的操作。请您确认相应的熔丝是否已充分熔断,以便使用这组辅助引脚?如果熔丝烧断正常,请您使用启动内存配置再次测试您的闪存配置。 另外请注意,此引脚配置仅支持低速读取操作,因为它不提供 DQS 信号路径。因此,在 SDR 模式下最大支持频率为 60 MHz,在 DDR 模式下最大支持频率为 30 MHz。请参考以下社区帖子,其中包含更详细的解释。 BR 哈比卜
View full article
S32DS 3.4 ライセンスの問題 NXPチームの皆様へ S32DS 3.4の再アクティベーションを試みましたが、できず、下の画像のようなメッセージが表示されました。現在、古いコンピューターでライセンスを復元することができません。この問題を解決するお手伝いをしていただけないでしょうか?よろしくお願いいたします。 Re: S32DS 3.4 License Problem こんにちは、 利用可能なライセンス数が増加しました。
View full article
KW47 extended advertising Hi, The sdk version I'm using is 26.06 . The routine is kw47loc_loc_reader_freertos . #define gAppIsPeripheral_d                   1U   It was found that the return value of calling BluetoothLEHost_StartExtAdvertising is 4(gBleFeatureNotSupported_c)  I'd like to use extended advertising. Please give me your support.   Thanks!   Re: KW47 extended advertising Hello, Hope you are doing well. What modifications have you made in the example? In order to configure Extended Advertising in an application, the first steps are to set the extended advertising parameters with Gap_SetExtAdvertisingParameters and setting the advertising data by calling Gap_SetExtAdvertisingData. For the full setup sequence and parameter details, please check this guide: Extended advertising — MCUXpresso SDK Documentation   Hope this helps! Best regards, Ana Sofia. Re: KW47 extended advertising Hi, The sdk version I'm using is 26.06. The imported routine is kw47loc_loc_reader_freertos.  Modify the macro definition of gAppIsPeripheral_d in the routine to 1, and at the same time add BleApp_Start() in the BluetoothLEHost_AppInit function;  Nothing else has been modified. It was found that the return value of calling BluetoothLEHost_StartExtAdvertising is 4(gBleFeatureNotSupported_c)    Thanks! Re: KW47 extended advertising Hi @wjw2026 , Could you please confirm if you were able to follow the steps from the Extended Advertising Guide ? There are several required steps involved in the Peripheral configuration for extended advertising, verifying those settings may be helpful in troubleshooting the behavior you're observing. Best regards, Ana Sofia.
View full article
i.MX95におけるUSXGMIIマルチレート こんにちは、 i.MX95に以下のイーサネット速度をサポートできるイーサネットポートを実装できるかどうかを評価しようとしています。 10GBASE-T 5GBASE-T 2.5GBASE-T 1000BASE-T 100BASE-TX 10BASE-Te 一般的に、デザイン上に10Gbit対応のイーサネットPHYを設置し、USXGMIIまたはXFIのいずれかのインターフェースを通じてi.MX95イーサネットコントローラに接続する必要があります 私たちの理解では、USXGMIIインターフェースは理論上マルチレートインターフェースであり、1リンクで10Gbitから10bitまでのあらゆる速度を実現できます。 これに対し、XFIインターフェースは単一レートのインターフェースで、10Gbitしか対応できません。 i.MX95のリファレンスマニュアル(例:)セクション104.2、表621)i.MX95はXFIおよび「10G-USXGMII」の両方をサポートしています。最初は、私たちが望むUSXGMIIインターフェースがサポートされているように見えます。 しかし、いくつか私たちを困惑させる点があります。 1.「10G-USXGMII」という宣言は、理論上はインターフェースがUSXGMIIリンクであることを意味するかもしれませんが、実際には10Gbitモードでしか動作しません。 2. NXP評価ボードIMX95LPD5EVK-19は、Marvell AQR113C PHYを使用して10GBase-Tポートを実装しています。 a) 図1のブロック図、セクション1.1では、PHYがUSXGMIIインターフェースに接続されているように見えます: b) 関連するセクション2.11.3「10 Gbitイーサネットインターフェース」では、AQR113Cイーサネットトランシーバーが10Gbitから10bitまでのすべてのデータレートをサポートするとされており、真のUSXGMIIを示唆しています: c) この節では、イーサネットPHYを接続するインターフェースがXFIであることも記載されています。 結論として、i.MX95がフルのマルチレートUSXGMIIに対応しているのか、それとも10Gbit専用バージョンのみ対応しているのか混乱しています。 NXPの評価ボードを参考にしてみましたが、そのボードの10GbEポートがUSXGMII(10Gbitから10bitまでのマルチレート対応)で接続されているのか、XFI(10Gbitのみ)で接続されているのかも分かりません。 教えていただけますか: i.MX95に10Gbitから10Gbitまでの速度をサポートする真のマルチレート10GbEポートを実装することは可能でしょうか? Re: USXGMII multi-rate on i.MX95 詳細なご回答をいただき、誠にありがとうございます。 これで私たちの側の混乱は解消されました! Re: USXGMII multi-rate on i.MX95 1. 「10G-USXGMII」の意味 「10G-USXGMII」とは、10G専用モードではなく、標準的なマルチレートUSXGMIIプロトコルを指します。「10G」は固定されたSerDesレーン速度を示し、USXGMIIは10M、100M、1G、2.5G、5G、10Gイーサネットの帯内レート適応をサポートしています。 i.MX95では、このモードはPCS_PROT_10G_SXGMII設定で表されます。 2. i.MX95 EVKで使用されたインターフェース i.MX95 EVKは、USXGMIIではなくXFI(10GBASE-R)を使用します。imx95-19x19-evk.dtsでは、enetc_port2 は次のように設定されています。 phy-mode = "10gbase-r"; したがって、搭載されているAQR113CはXFIモードで動作します。 3. 真のマルチレートUSXGMIIはサポートされていますか? はい。i.MX95 NETCハードウェアはUSXGMIIをサポートし、LinuxのENETC4ドライバはenetc4_set_port_speed()を通じて速度変更を処理します。Marvell AQR113CはUSXGMIIホストインターフェースモードもサポートしています。 4. カスタムボードに必要なものは何ですか? マルチレート動作を完全に有効にするには: デバイスツリーの設定: phy-mode = "usxgmii"; managed = "in-band-status"; AQR113Cのファームウェアを、XFIではなくUSXGMIIホストモードに設定してください。 EVKは10GbEポートにXFIを使用していますが、カスタムi.MX95設計ではUSXGMIIをAQR113C(または類似のPHY)と組み合わせて、10M/100M/1G/2.5G/5G/10Gを単一のMACからPHYリンクまでサポートできます。 よろしくお願いします。 Re: USXGMII multi-rate on i.MX95 もう一つ追加で質問します:Marv AQR113C ellのドライバはNXP Linux BSPに含まれているのか、それとも自分たちで用意しなければならない外部モジュールですか? Re: USXGMII multi-rate on i.MX95 私は元の投稿者ではありませんが、私もusxgmiiを動作させようとしています。 NXPは、usxgmiiがBSPカーネル上で動作するかどうかを検証したことがありますか?mv-cux3610 PHYで使用しようとしていますが、以下のエラーが発生します。 [ 43.063202] nxp_enetc4 0002:00:10.0 (unnamed net_device) (uninitialized): MAC returned PCS which does not support usxgmii [ 43.074224] nxp_enetc4 0002:00:10.0 (unnamed net_device) (uninitialized): failed to validate link configuration for inband [ 43.085308] nxp_enetc4 0002:00:10.0: Failed to create phylink [ 43.091726] nxp_enetc4 0002:00:10.0: probe with driver nxp_enetc4 failed with error -22 これは、NetC PCSがUSXGMIIサポートを宣伝しておらず、10Gbase-R、2500-basex、SGMIIのみが原因のようです: (これはLF-6.18.YのLinux-IMXブランチでの話です) Re: USXGMII multi-rate on i.MX95 このドライバーはNXP Linux BSPに含まれています。リンク: https://github.com/nxp-real-time-edge-sw/real-time-edge-linux/blob/linux_6.18.20/drivers/net/phy/aquantia/aquantia_main.c Re: USXGMII multi-rate on i.MX95 お返事ありがとうございます! 最後に質問です。i.MX95 EVKのenetc_port2とAQR113CをUSXGMIIモードに設定することは可能でしょうか?これにより、EVK上でUSXGMIIインターフェースのマルチレート機能をテストできるのでしょうか? Re: USXGMII multi-rate on i.MX95 EVKで単純に「DTSをusxgmiiに切り替える」のはソフトウェアレベルの試みに過ぎません。 また、USXGMIIファームウェアでAQR113Cを再プロバイニングする必要があり、EVKのXFI向けボード設計のため、マルチレート検証には信頼性が高くありません。 もし目標が真のマルチレートUSXGMII(10M/100M/1G/2.5G/5G/10G)を検証することであれば、USXGMII向けにカスタムボードを作ることを推奨します(USXGMIIホストモードファームウェアではSerDes routing + AQR113C + phy-mode = "usxgmii")。 AQR113C用のUSXGMIIプロビジョニングファームウェアを取得した後、EVKボードを使うことができますが、その制限にはご注意ください。 よろしくお願いします。
View full article
eFlexPWM input capture not capturing on S32K364 – flags set but CAPTCOMPB remains zero I'm using the eFlexPWM module (instance IP_EFLEXPWM_0) on an S32K364 microcontroller to measure the frequency and period of an external signal via input capture. I am using submodule 2 (SM[2]). My configuration is as follows: SM2_CAPTCTRLB->EDGB0 = 0x02; (capture on rising edge for capture circuit 0) SM2_CAPTCTRLB->EDGB1 = 0x02; (capture on rising edge for capture circuit 1) SM2_ARMB = 1; (arm the capture circuits) After running the code, I observe the following: In SM2_CAPTCTRLB, the counter status bits show: CB0CNT = 0x4 CB1CNT = 0x4 In SM2_STS, both flag bits are set: CFB0 = 1 CFB1 = 1 However, the captured values (SM2_CAPTCOMPB) remain 0 for both capture circuits – no data is latched. What could be causing this? Is there any additional configuration needed (e.g., clock enable, input muxing, or counter setup) that I might have missed? The flags indicate that capture events are detected, but the captured values are not updated. Any insight would be greatly appreciated. Feel free to add any additional details (like your pin muxing settings or counter mode) if needed. Good luck! Re: eFlexPWM input capture not capturing on S32K364 – flags set but CAPTCOMPB remains zero Hi First, I checked the latest S32K3 RTD 7.0.x; however, the S32 Configuration Tool does not yet support the eFlexPWM E-Capture functionality. If it is convenient, could you share your project so I can test it on the S32K396? (Unfortunately, I don’t have the S32K364; I only have the S32K396-BGA-DC1 evaluation board.) Secondly, please review section “56.3.14 Enhanced capture (E-Capture)” in S32K396RM (Rev. 4, 11/2024). Please check the registers mentioned in that section, especially those in Figure 254. E-Capture logic. You can also share screenshots of the eFlexPWM_0 registers with me.  Besides the bits you mentioned in SM2_CAPTCTRLB [EDGB0],[EDGB1],[ARMB], how did you configure the other bits in SM2_CAPTCTRLB?   Since you observed that SM2_CAPTCTRLB[CB0CNT] = 0x4 and [CB1CNT] = 0x4, have you checked the corresponding register values of SM2_CVAL4, SM2_CVAL4CYC, SM2_CVAL5, and SM2_CVAL5CYC?   In addition, if you want to read the value of SM2_CAPTCOMPB[EDGCNTB], please first enable SM2_CAPTCTRLB[EDGCNTB_EN] and SM2_CAPTCOMPB[EDGCMPB]. I’m not sure why you set SM2_CAPTCOMPB[EDGCMPB] to 0, as this seems to prevent the comparator in Figure 254. E-Capture logic from functioning correctly. Best Regards, Robin Re: eFlexPWM input capture not capturing on S32K364 – flags set but CAPTCOMPB remains zero It appears that the period of submodule2 is too short. Please read "56.3.18.3 Running a submodule at a lower frequency than submodule 0" and try selecting a lower frequency clock source for submodule2, such as AUX_CLK or EXT_CLK. Re: eFlexPWM input capture not capturing on S32K364 – flags set but CAPTCOMPB remains zero Hi@Robin_Shen , I have successfully implemented external frequency measurement by properly configuring the MCTRL and CAPTCTRLB registers. However, testing shows the minimum measurable frequency I can achieve is 5 kHz, while my requirement is to support frequencies as low as 1 Hz. I have attempted adjusting the Prescaler and PrescalerAlt configurations, yet no improvement was observed. Could you please share some suggestions and troubleshooting approaches? Thank you very much for your support.
View full article
RF Power Amplifier Design - MRF13750H Hello! I am designing an 805 MHz RF power amplifier using the MRF13750H, and my design is based on the 915 MHz reference circuit found in the datasheet. However, I only have access to Usimmics for simulating the matching networks; I do not have access to the software NXP uses to open their design files. Therefore, to design the matching networks, I am requesting the complete schematic for the MRF13750H 915 MHz reference circuit from NXP, including the microstrip line dimensions, as this information is not provided in the datasheet. If possible, I would also like to request the large-signal model impedances at 805 MHz; otherwise, I will base my design on the values ​​provided for 915 MHz. The reference circuit at 915Mhz and the datasheet is attached below. On the other hand, if anyone knows a different method for designing the matching networks at 805 MHz, I would appreciate the input.
View full article
我们能否在 i.mx9 中使用已配置的证书或密钥来设置 HTTPS 连接或 TLS 连接? i.MX93 上配置的证书和私钥可以直接用于建立 HTTPS/TLS 连接吗?如果可以,那么访问和使用这些凭据进行客户端/服务器身份验证和 mTLS 实现的推荐方法是什么? 配置完成后,安全对象 blob 会出现在 /etc/ele/ 中,那么在实际的 HTTPS/TLS 连接中使用这些已配置的凭据的推荐工作流程是什么? Re: can we use provisioned cert or key for setting up in the https connection or tls connection in i 嗨, @Manuel_Salas 谢谢你的回复。 关于 mbedTLS/opaque-key 指南——我们这边已经解决了私钥的问题。 剩下的问题具体是关于证书,该证书通过 EL2GO 配置,并与私钥一起存储在 /etc/ele/ 中。由于证书是公共数据,我们需要将其提取为纯 DER 格式,以便交给 mbedtls_x509_crt_parse_der() 进行 TLS 握手——与密钥不同,它不需要保持不透明。 支持的 SMW/PSA 调用是什么,才能检索已配置证书对象的明文 DER 字节? 具体来说:它是通过 psa_ps_get() / psa_its_get()(PSA 保护存储/内部可信存储)使用对象 ID 作为 UID 公开,还是通过不同的 SMW API 公开?我们在已安装的 SMW 头文件中看到了 protected_storage.h 和 internal_trusted_storage.h,但在基于它进行构建之前,我们想确认这是否是证书对象的预期路径。 Re: can we use provisioned cert or key for setting up in the https connection or tls connection in i 你好@NEXUSNERD 希望你一切都好。 在 i.MX93 上,配置流程的设计使得私钥始终受到ELE的保护。 因此,存储在 /etc/ele/ 中的 blob 是安全的对象表示,允许 ELE 重新加载或引用已配置的密钥材料,它们不应被视为普通的 TLS 密钥文件。 您可以查看imx-secure-enclave (Mbed-TLS)。 顺祝商祺! 萨拉斯。
View full article
LED 的 IO 扩展 我目前正在设计用于定制测量设备的开关矩阵板。 为了路由信号,我计划使用光中继器,准确地说是 G3VM-61DR1。 所以我需要控制超过 250 个!以某种方式使用 LED(1.5-1.8V 6-8mA)。 同时开启的设备数量将少于25台。 供电电压为3.3V或更低,温度应在40°C左右。 我们只需要打开或关闭它们,不需要调光或PWM调光。 我不想使用LED驱动器,因为它可能会引入噪声。 我无法使用传统的矩阵式电路,因为无法预知哪些开关会同时处于开启状态。 因此,唯一的选择是为每个继电器/LED 提供一个独立的输出,您的 IO 扩展器看起来很有希望实现这一点,例如PCAL6524 。 由于通道数量较多,我希望尽可能减少每个通道的元器件数量,因此我有几个问题: 我能否依赖 Agile IO 设备的 7.5mA 电流设置,而省略 LED 串联电阻? 如果可以的话,可能会有哪些副作用? 由于这些设备最初配置为输入,因此当它们用于控制 LED 时,某些设备会经历高电流(例如,PCA9535A数据手册第 14/15 页)。对于这么多通道来说,为每个通道使用上拉电阻的传统解决方法并不理想。这是否也会影响 Agile IO 设备? 能否通过给 LED 提供 3.3V 电压,给扩展器提供 1.65V 电压来解决这个问题? 先感谢您 奥托 Re: IO Expansion for LEDs PCAL6524 非常适合驱动大量的光继电器和 LED。然而,敏捷 I/O 驱动能力并不是为了取代所需的串联限流电阻器。为了降低上电时 I/O 仍处于输入状态时出现意外电流的风险,可以考虑使用 VDD(P) 较低的 3.3 V LED 电源,或者实现全局 LED 电源开关等方案。然而,每个 LED 通道都应该始终保留单独的限流电阻。
View full article
FLEXCAN EDMA - ACK errors while receiving a burst of CAN messages On i.MXRT1176 we are using FLEXCAN with EDMA. (SDK 26.03) We have a callback defined for DMA transfer complete. This is our flow: 1. Call `FLEXCAN_TransferReceiveFifoEDMA()` to start the transfer. 2. On DMA transfer completion, user-defined callback is called. 3. Data is copied from DMA buffers, and `FLEXCAN_TransferReceiveFifoEDMA()` is called to continue receiving messages. 4. Repeat Steps 2-4 We noticed that when we transmit messages from another node in a burst with just the bare minimum Inter-Frame Space, we see an increase in number of ACK errors - the iMX is unable to ACK the messages.  Going through the flow, it appears that every time there is a DMA transfer complete callback, DMA is disabled on FLEXCAN. It is re-enabled again when `FLEXCAN_TransferReceiveFifoEDMA()` is called.  This is done by calling `FLEXCAN_EnableRxFifoDMA()`. The enabling/disabling DMA updates the DMA bit in FLEXCAN's MCR register, and it can only be done in Freeze mode. As we are receiving messages in a burst, it is possible that a transmission is actively in progress when FLEXCAN is put it freeze mode. And it is unable to ACK the incoming message.   We confirmed that removing that call to `FLEXCAN_EnableRxFifoDMA()` removes all ACK errors, though now we are dropping some messages. Also, we tried spacing out the messages, and that also got rid of the ACK errors. Can you please confirm if this is indeed an issue with the implementation, or if we should be rearchitecting it in a different way? Re: FLEXCAN EDMA - ACK errors while receiving a burst of CAN messages Hi @r-uv , Thank you for the detailed analysis. Your observation is consistent with the SDK  implementation. FLEXCAN_TransferReceiveFifoEDMA() is a finite-length transactional API. After each DMA completion, the driver disables the Rx FIFO DMA request, and the next call enables it again. Because changing MCR[DMA] requires Freeze mode, the next frame in minimum-IFS traffic may arrive before FlexCAN returns to Normal mode, resulting in a missed ACK. This also explains why removing the repeated DMA enable/disable operation eliminates the ACK errors but still causes dropped frames: the Freeze-related ACK gap is removed, but the eDMA transfer is not continuously rearmed. For continuous burst traffic, we recommend keeping the Rx FIFO DMA request enabled and using hardware-chained ping-pong/scatter-gather TCDs so that the next buffer is activated automatically. This requires a continuous DMA receive path rather than repeatedly restarting FLEXCAN_TransferReceiveFifoEDMA(). Best regards, Gavin Re: FLEXCAN EDMA - ACK errors while receiving a burst of CAN messages Thanks for the response. Are there any plans of adding this support in the SDK? A continuous DMA based implementation instead of just the current transactional API implementation? 
View full article
求找适用于 PCF8563TS/5,118 的电容 我正在使用 PCF8563TS/5,118 IC,想正确连接 OSCI 引脚上的外部电容。 我正在使用 50k ESR、12.5pF 32.568KHz 的晶体,尽可能短的走线,原理图与数据手册中的应用图完全相同。 我查阅了数据手册和 UM10301,尝试进行计算,以了解该设备。我发现很难找到一种清晰的方法来计算外部电容的值,因为数据表在同一主题的不同页面上提到了并联和串联,即 OSCI 和 OSCO。 我看到外部 OSCI 和 OSCO 引脚并联了一个内部 25pF 电容。数据手册中的表 30 表明 CL 是并联计算的,但有一个注释显示,CL 是串联电容的计算方法。 我找不到能让设备正常工作的外接电容。没有收到 I2C 响应。我尝试了 25pF、22.5pF、20pF、25pF、10pF、8.2pF、6pF。所有 0603 C0G/NP0 帽。 我通过完全不放置电容器,成功地让它在另一块板上工作了。经过计算,这根本说不通。 我想请您举例说明一下如何计算这些输入值(12.5pF 50k ESR 晶体),因为我无论通过计算还是暴力破解都无法使其正常工作。 Re: Help finding capacitor for PCF8563TS/5,118 是的,那是内置电容的数值,我在自己的帖子中也提到过。我已阅读过该文件。 如果你能把你想表达的意思写下来,那会更有帮助。感谢您抽出时间。 Re: Help finding capacitor for PCF8563TS/5,118 UM10301 PCF85x3、PCF85x63、PCA8565、PCF2123 和 PCA21125 用户手册 Re: Help finding capacitor for PCF8563TS/5,118 亲爱的戴维: db16122 正确地指出了UM10301 中的表 3。如果您的目标负载电容为 12.5pF,则需要在 OSCI 引脚上连接一个 25pF 的中间值的微调电容。 这个 25pF 值可以通过表 30 下方的公式计算得出。在PCF8563 数据手册中。 其中 CL 为目标负载电容,在本例中为 12.5pF。 Cosco 是已知的内部电容,25pF。 根据公式,可以推导出 Ctrim 值: CL=Ctrim*Cosco/(Ctrim+Cosco) CL*Ctrim+CL*Cosco=Ctrim*Cosco CL*Cosco=Ctrim*Cosco-CL*Ctrim CL*Cosco=Ctrim*(Cosco-CL) CL*Cosco/(Cosco-CL)=Ctrim 边际贡献 = CL * Cosco / (Cosco - CL) = 12.5 * 25 / (25 - 12.5) = 312.5 / 12.5 Ctrim=25pF 由于内部 Cosco 电容还有余量,因此需要可变微调电容。Cosco 值可能在 15pF 到 35pF 之间波动。 最诚挚的问候, 约瑟夫
View full article
无法更新 i.MX95 FlexSPI 启动映像的 APP 容器软件版本 各位专家好, 我正在使用 i.MX95 平台,并启用ROLLBACK_INDEX_IN_CONTAINER 的回滚保护功能。 我在local.conf文件中引入了以下变量: export ROLLBACK_INDEX_IN_CONTAINER = "1" 该值会在整个构建过程中传递,构建日志证实mkimage_imx8被调用时使用了“1”。 构建eMMC 启动映像时,解析生成的镜像显示容器软件版本已正确更新。  if [ 1 ]; then \ ./../mkimage_imx8 -soc IMX9 -cntr_version 2 -sw_version 1 -c \ -ap bl31.bin a55 0x8A200000 \ -ap u-boot-hash.bin a55 0x90200000 \ -ap tee.bin a55 0x8C000000 \ -out u-boot-atf-container.img; \   然而,在构建FlexSPI 启动镜像( imx-boot-imx95-19x19-verdin-fspi.bin-flash_a55_flexspi )时,解析该镜像仍然报告默认的软件版本。 ./mkimage_imx8 -soc IMX9 -parse imx-boot-imx95-19x19-verdin-fspi.bin-flash_a55_flexspi SOC: IMX9 Input container binary to be parsed: imx-boot-imx95-19x19-verdin-fspi.bin-flash_a55_flexspi ********************************* * * * APP CONTAINER 1 * * * ********************************* Length: 0X320 (800) Tag: 0X87 Version: 0X2 Flags: 0X10 Num images: 6 Fuse version: 0 SW version: 0X0 Sig blk offset: 0X310 我在 iMX95/soc.mak 中注意到一个有趣的地方,因为在构建 flash_a55_flexspi 时没有包含 sw_version。 flash_a55_flexspi: $(MKIMG) $(AHAB_IMG) $(MCU_IMG) $(SPL_A55_IMG) $(OEI_IMG_M33) fcb.bin u-boot-atf-container.img ./$(MKIMG) -soc IMX9 -cntr_version $(CTNR_VERSION) $(XSPI_FAST_HASH) -dev flexspi -append $(AHAB_IMG) -c $(OEI_OPT_M33) -msel $(MSEL) \ -m33 $(MCU_IMG) 0 $(MCU_TCM_ADDR) \ -ap $(SPL_A55_IMG) a55 $(SPL_LOAD_ADDR_M33_VIEW) $(V2X_DUMMY) -fcb fcb.bin $(FCB_LOAD_ADDR) -out flash.bin $(call append_container,u-boot-atf-container.img,1) $(call append_fcb) 我的问题是: ROLLBACK_INDEX_IN_CONTAINER是否预期会更新 FlexSPI 启动映像的软件版本? FlexSPI 镜像是否遵循不同的容器生成流程,需要单独配置回滚索引/软件版本? 这是 i.MX95 imx-mkimage版本流程中已知的限制或问题吗? 如果有人已成功在 i.MX95 上为 FlexSPI 启动映像启用ROLLBACK_INDEX_IN_CONTAINER ,能否分享一下预期流程或所需的任何其他配置? 提前感谢! 顺祝商祺! 阿伦·库马尔 Re: Unable to update APP container software version for i.MX95 FlexSPI boot image 你好@arun16598 FlexSPI 镜像不是 AHAB 格式的另一种变体,而是采用了一种组合过程,即先生成引导容器,然后附加 U-Boot/ATF 容器。您的-sw_version 1已在u-boot-atf-container.img上设置;但是,包含 SM/M33、OEI、SPL 和 FCB 的 APP 容器( flash_a55_flexspi首先创建)没有传递-sw_version选项,因此该容器仍然显示SW 版本:0。ROLLBACK_INDEX_IN_CONTAINER用于生成辅助 U-Boot/ATF APP 容器,但它没有传递给flash_a55_flexspi创建的主 APP 容器。如果第一个 FlexSPI APP 容器需要相同的软件版本,则还必须将-sw_version $(ROLLBACK_INDEX_IN_CONTAINER)添加到flash_a55_flexspi中的 mkimage_imx8 调用中。 如果目标是真正实现 AHAB 防回滚强制执行,则需要验证和配置的关键设置是fuse_version和-fuse_version ,而不仅仅是sw_version 。S PSDK 的 i.MX95 防回滚示例明确指出,OEM 防回滚使用 AHAB 容器 YAML 中指定的fuse_version ,然后通过 ELE 的OEM_FW_FUSE提交过程提交该版本。 此致, 志明
View full article
AUTOSAR マカルMPC5744P こんにちは、MPC5744P用のAUTOSAR MCALアプリケーションを無料で作成できるコンパイラオプションはありますか? Re: AUTOSAR MCAL MPC5744P こんにちは、 レガシーのAUTOSAR MCAL for MPC5744Pパッケージ(MPC574xP MCAL 4.x)では、公式に検証されたツールチェーンは通常以下の通りです: Wind River Diab Compiler(最も一般的な資格) グリーンヒルズコンパイラ(GHS) 実際には、AUTOSAR MCALには公式にサポートされているフリーコンパイラMPC5744P提供されていません。 MPC5744Pエコシステムは一般的な組み込み開発のためにS32 Design Studio for Power Architectureをサポートする一方で、MCALパッケージ自体は主にDiabとGHSで開発・検証されました。 DEVKIT-MPC5744P情報にはGCC(S32DS経由)、GHS、Cosmic、その他のMPC5744P開発ツールチェーンが掲載されていますが、それがAUTOSAR MCALリリースがGCCに適格であることを意味しません。 検証済みコンパイラのリストは常にMCALパッケージに付属するリリースノートに記載されています。 よろしくお願いします、 ピーター
View full article
FLEXCAN EDMA - 接收 CAN 消息突发时出现 ACK 错误 在 i.MXRT1176 上,我们使用 FLEXCAN 和 EDMA。(SDK 26.03) 我们定义了 DMA 传输完成的回调函数。 这是我们的流程: 1.调用 ` FLEXCAN_TransferReceiveFifoEDMA()` 开始传输。 2. DMA 传输完成后,调用用户定义的回调函数。 3. 从 DMA 缓冲区复制数据,并调用 `FLEXCAN_TransferReceiveFifoEDMA()` 继续接收消息。 4. 重复步骤 2-4 我们注意到,当我们从另一个节点以突发方式发送消息,且帧间间隔仅为最小值时,ACK 错误的数量会增加——iMX 无法确认消息。 从流程来看,每次 DMA 传输完成回调时,FLEXCAN 上的 DMA 都会被禁用。当调用 `FLEXCAN_TransferReceiveFifoEDMA()` 时,DMA 功能会重新启用。这可以通过调用 ` FLEXCAN_EnableRxFifoDMA()` 来实现。启用/禁用 DMA 会更新 FLEXCAN 的 MCR 寄存器中的 DMA 位,并且只能在冻结模式下进行。由于我们以突发方式接收消息,因此当 FLEXCAN 进入冻结模式时,可能正在进行传输,导致它无法确认接收到的消息。   我们确认,移除对 `FLEXCAN_EnableRxFifoDMA()` 的调用可以消除所有 ACK 错误,但同时也会丢弃一些消息。此外,我们还尝试拉开消息之间的间隔,这样也消除了 ACK 错误。请问这是否确实是实现方面的问题,或者我们是否应该采用不同的架构方式? Re: FLEXCAN EDMA - ACK errors while receiving a burst of CAN messages 嗨@r-uv , 感谢您提供的详细分析。您的观察结果与SDK的实现一致。 FLEXCAN_TransferReceiveFifoEDMA() 是一个有限长度的事务 API。每次 DMA 操作完成后,驱动程序会禁用 Rx FIFO DMA 请求,下一次调用时会再次启用该请求。由于更改 MCR[DMA] 需要冻结模式,最小 IFS 流量中的下一帧可能在 FlexCAN 恢复正常模式之前到达,从而导致 ACK 丢失。 这也解释了为什么移除重复的 DMA 启用/禁用操作可以消除 ACK 错误,但仍然会导致丢帧:与冻结相关的 ACK 间隙被消除,但 eDMA 传输没有持续重新开始。 对于连续突发流量,我们建议保持 Rx FIFO DMA 请求启用,并使用硬件链式乒乓/分散聚集 TCD,以便自动激活下一个缓冲区。这需要连续的 DMA 接收路径,而不是反复重新启动 FLEXCAN_TransferReceiveFifoEDMA()。 此致, 加文 Re: FLEXCAN EDMA - ACK errors while receiving a burst of CAN messages 谢谢你的回复。SDK 是否有计划添加此功能的支持?是采用基于连续DMA的实现方式,还是仅仅采用当前的事务性API实现方式?
View full article