Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
How to use S32 Design Studio MCP Integration How to use S32 Design Studio MCP Integration,Are there any relevant materials and documents? Re: How to use S32 Design Studio MCP Integration Hi,  unfortunately the documentation and usage examples are still in development. I hope it will be released soon for external use, but don't know the exact date. 
View full article
LX2160A: Pull down value on receiver for SerDes lanes not used Hello, Chip: LX2160A The application note AN5407 specifies pull down on SerDes lanes if not used:  If some SerDes lanes are a no-connect, pull down their receiver pins to GND. Could you tell me the pull down value please? Or should I connect the receiver pins directly to GND? Thanks. Re: LX2160A: Pull down value on receiver for SerDes lanes not used Hello, The AN5407 language "pull down their receiver pins to GND" is intentionally ambiguous about method — NXP's clarification is that a direct 0 Ω connection to GND is the correct and preferred approach. SerDes power-down Even with the RX pins tied to GND, if the SerDes block remains powered, AN5407 also recommends powering down unused lanes via firmware: configure the General Control 0 register during the PBI phase to power down unused SerDes lanes. If the entire SerDes block is already powered down, individual lane power-down is not needed Regards
View full article
ELE能否将密钥保留在主机无法访问的非易失性存储中? 您好, 我想咨询一下关于 EdgeLock 安全隔离区 (ELE) 的持久密钥存储的问题。 根据我对 KW47 网络安全参考手册的理解,ELE 用于加密操作的密钥可以使用密钥存储服务持久存储。我对典型流程的理解如下: 1. 为目标密钥创建密钥 Blob 并将其导出到主机。 2. 将导出的密钥 Blob 存储在非易失性存储器(例如闪存)中。 3. 当需要密钥进行加密操作时,导入密钥块并通过 ELE 使用该密钥。 在这种方法中,密钥块由 ELE 生成,因此主机无法读取实际的密钥材料。然而,由于密钥块本身由主机存储在闪存中,因此主机似乎仍然可以删除或覆盖密钥块。 我的问题是: 是否有一种方法可以将密钥(或其密钥块)存储在 ELE 可访问但主机不可访问的非易失性存储区域中,从而允许 ELE 执行加密操作,而无需在任何时候将密钥材料或密钥块暴露给主机? 换句话说,ELE 是否有可能完全在安全区域内拥有和管理持久密钥存储,从而使主机永远不会直接处理密钥或密钥块? 感谢您事先的指导。 Re: Can ELE Retain Keys in Host-Inaccessible Non-Volatile Storage? 嗨@t_hosomi ,希望你一切都好。 您对 NVM 流程中密钥生成和存储的理解是正确的。 然而,由于 ELE 没有非易失性存储器(如 SRM 的 10.3.1 节所述),因此唯一支持的路径是将导出的密钥 blob 存储在主机的 NVM 中。 请告诉我这些信息是否有帮助。 Re: Can ELE Retain Keys in Host-Inaccessible Non-Volatile Storage? 你好 RomanVR, 感谢您的回复。 我了解到 ELE 本身不提供非易失性存储器,因此持久密钥数据必须存储在主机的非易失性存储器中。 感谢您澄清这一点。
View full article
LPC54113 电源 API 我想了解如何使用“power”函数的API。通过 SDK,我发现这个函数可以直接用于某些函数。但是,与 IAP API 不同,它没有提供入口点或使用说明。 LPC541XX Re: LPC54113 Power API 嗨@jcxz 是的,你说得对。 您可以参考其他 SDK,其中包含有关 POWER API 的更详细说明。 BR 爱丽丝 Re: LPC54113 Power API 通过下载 54 系列其他芯片的 SDK,我找到了 POWER_Type 和 POWER_BASE。谢谢。 Re: LPC54113 Power API 对于我的 LPC54S018,我从 NXP 网站下载了 SDK。它包含了 PowerAPI、ClockAPI 等函数。 例如:POWER_SetVoltageForFreq(...)等。 它还描述了调用 API 函数的入口点和原型。 我认为LPC54113的情况也类似。
View full article
EB tresosのアクティベーションコードが失敗しました AUTOSARでEBtresosを使おうとしているのですが、アクティベートできませんでした。 アクティベーションコード: 7416-E905-5CC2-F20A ERROR: flxActAppActivationSend (50040,41147,10248) 指定された数量が許容最大数量 (0) を超えています。 FlexNet Operations Serverへの接続に失敗しました。 だからEBtresosを使うにはもう一つのアクティベートコードが必要です。 どうもありがとうございます。 Re: EB tresos activation code failed ご辛抱いただきありがとうございます。 社内チームがウェブページ上のアクティベーションコードを更新しました。 最新の認証コードを確認するには、以下のリンクをクリックしてください。 S32K3 標準ソフトウェア - > オートモーティブ SW - EB tresos Studio / AUTOSAR 設定ツール - > EB tresos Studio 29.0.0 Re: EB tresos activation code failed ハイ ご迷惑をおかけして申し訳ございません! この件については既に社内チームに報告済みです。返信があり次第、ご連絡いたします。   よろしくお願いいたします ロビン Re: EB tresos activation code failed こんにちは。NXPのウェブサイトで更新されたアクティベーションコードは、引き続き7416-E905-5CC2-F20Aです。今日アクティベートしようとしたのですが、やはり失敗しました。 ERROR: flxActAppActivationSend (50040,41147,10248) 指定された数量が許容最大数量 (0) を超えています。 FlexNet Operations Serverへの接続に失敗しました。 Re: EB tresos activation code failed 前回の返信をご覧ください。アクティベーションコードが更新されました。 EBTresosページのアクティベーションコードがまだ変更されていないバージョンを教えてください。内部チームに報告して更新を依頼します。
View full article
TJA1120A RGMIIモード - 遅延設定 これはTJA1120Aのデバイスツリーです - cpsw_port1、cpsw3g_phy0 &cpsw_port1 { status = "okay"; phy-mode = "rgmii-txid"; phy-handle = <&cpsw3g_phy0>; }; &cpsw_port2 { status = "okay"; phy-mode = "rgmii"; phy-handle = <&cpsw3g_phy1>; }; &cpsw3g_mdio { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&main_mdio1_pins_default>; cpsw3g_phy0: ethernet-phy@0 { compatible = "ethernet-phy-id001b.b031"; reg = <4>; }; cpsw3g_phy1: ethernet-phy@1 { compatible = "ethernet-phy-id0022.1620"; reg = <0>; txc-skew-ps = <900>; rxc-skew-ps = <900>; rxd0-skew-ps = <420>; rxd1-skew-ps = <420>; rxd2-skew-ps = <420>; rxd3-skew-ps = <420>; txd0-skew-ps = <420>; txd1-skew-ps = <420>; txd2-skew-ps = <420>; txd3-skew-ps = <420>; rxdv-skew-ps = <420>; txen-skew-ps = <420>; }; }; ここでは、TJA1120Aのphy-modeとして「rgmii-txid」を指定します。 しかし、レジスタRGMII_TXC_DELAY_CONFIGを読み取ると、 0x0014が読み取られ、これは遅延なし(15ビット目)を意味し、 RGMII_RXC_DELAY_CONFIGは0x8014を読み取り、これは遅延が設定されている(15ビット目)ことを意味します。 また、DTでphy-modeを「rgmii-rxid」に変更すると、 RGMII_RXC_DELAY_CONFIGは0x0014、 RGMII_TXC_DELAY_CONFIGは0x8014になります。 DTで「rgmii」を設定し、phytoolを使用してこれらのレジスタを設定してみましたが、完全に反映され、pingが開始され、その後RGMII_RXC_DELAY_CONFIGの15ビット目がHIGHに設定され、 RGMII_TXC_DELAY_CONFIGの15ビット目がLOWに設定されました。 物理モードのDT設定において、なぜこのような反転現象が発生するのかを理解したい。 私たちのAM62A7ベースのECUでは、PCBがRX_Clockの内部遅延を必要としているため、「rgmii-txid」が設定されました。問題なく動作しています。 また、DTSが処理してくれるのであれば、このPHYモードにおけるピンストラップの使用についても知りたいです。 Re: TJA1120A RGMII Mode- Delay Config こんにちは、 TJA1120Aドキュメントによると、RGMIIの遅延構成はレジスタ名とレジスタ内で記述された遅延が直接一致しないため、やや混乱を招くことがあります。 デバイスDS内のRGMII_RXC_DELAY_CONFIG/RGMII_TXC_DELAY_CONFIGレジスタのビット説明を参照してください。 0xAFCC RGMII_RXC_DELAY_CONFIG: ビット15 = 内部TXC遅延を有効にする 0xAFCD RGMII_TXC_DELAY_CONFIG: ビット15 = 内部RXC遅延を有効にする   したがって、設定を確認する際に重要なのは、実際のレジスタビットの記述と初期化後の最終レジスタ読み返し値です。 また、ピンストラップはリセット後のデフォルト設定のみを定義する点に注意してください。ソフトウェアドライバは後でMDIOでこれを上書きできるため、システム起動後にレジスタを読み返すことで有効な構成を検証する必要があります。 また、同じRGMIIクロック遅延がMAC側とPHY側の両方で有効化されていないかも、基板のタイミング設計で意図されていないことを確認してください。 BR、ペトル
View full article
Flash 配置混乱 RT1176 八路 DDR 您好,恩智浦 我在配置Macronix Octal DDR模式的闪存时遇到了一些问题。 我正在基于 NXP FMU-6XRT 参考设计的定制板上使用 PX4 代码栈。我使用的是 MX25UM51245G 而不是 MX25UM51345G,但这两个部件之间的差异很小。 我尝试在 Macronix 八进制 DDR 模式下运行它,并启用 DQS 外部采样,采样频率至少为 100MHz。参考设计运行频率为 200MHz。启动内存配置即使在 166MHz 的频率下也能成功测试所需配置的内存。 我尝试的配置是以下默认配置。第一个程序“g_flash_config”可以成功启动、写入、读取等,但对于软件来说并不理想。"g_flash_fast_config" 失败。 我尝试在“fast_config”的DTR模式下将频率降低到166MHz、133MHz、50MHz和30MHz,但都没有效果。 我尝试使用从启动内存配置生成的 FCB,但由于结构布局存在一些差异,因此很难将其应用于 PX4 代码。 我也尝试过 csHoldTime、csSetupTime 和 dataValidTime 的不同组合,但都没有结果。 我尝试在低频 DTR 八进制中使用 DQS 内部模式,但也没有成功。 接下来我还可以尝试什么? #include /**************************************************************************** * Public Data ****************************************************************************/ locate_data(".boot_hdr.conf") const struct flexspi_nor_config_s g_flash_config = { .memConfig = { #if !defined(CONFIG_BOARD_BOOTLOADER_INVALID_FCB) .tag = FLEXSPI_CFG_BLK_TAG, #else .tag = 0xffffffffL, #endif .version = FLEXSPI_CFG_BLK_VERSION, .readSampleClksrc=kFlexSPIReadSampleClk_LoopbackInternally, .csHoldTime = 1, .csSetupTime = 1, .deviceModeCfgEnable = 1, .deviceModeType = kDeviceConfigCmdType_Generic, .waitTimeCfgCommands = 1, .controllerMiscOption = (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable), .deviceType = kFlexSpiDeviceType_SerialNOR, .sflashPadType = kSerialFlash_1Pad, .serialClkFreq = kFlexSpiSerialClk_100MHz, .sflashA1Size = 64ul * 1024u * 1024u, .dataValidTime = { [0] = {.time_100ps = 0}, }, .busyOffset = 0u, .busyBitPolarity = 0u, .lookupTable = { /* Read Dedicated 3Byte Address Read(0x03), 24bit address */ [0 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x03, RADDR_SDR, FLEXSPI_1PAD, 0x18), //0x871187ee, [0 + 1] = FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x04, STOP_EXE, FLEXSPI_1PAD, 0),//0xb3048b20 }, }, .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, .ipcmdSerialClkFreq = 1, .serialNorType = 2, .reserve2[0] = 0x7008200, }; const struct flexspi_nor_config_s g_flash_fast_config = { .memConfig = { .tag = FLEXSPI_CFG_BLK_TAG, .version = FLEXSPI_CFG_BLK_VERSION, .readSampleClksrc=kFlexSPIReadSampleClk_LoopbackInternally, .csHoldTime = 3, .csSetupTime = 3, .deviceModeCfgEnable = 1, .deviceModeType = kDeviceConfigCmdType_Spi2Xpi, .waitTimeCfgCommands = 1, .deviceModeSeq = { .seqNum = 1, .seqId = 6, /* See Lookup table for more details */ .reserved = 0, }, .deviceModeArg = 2, /* Enable OPI DDR mode */ .controllerMiscOption = (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DdrModeEnable), .deviceType = kFlexSpiDeviceType_SerialNOR, .sflashPadType = kSerialFlash_8Pads, .serialClkFreq = kFlexSpiSerialClk_133MHz, .sflashA1Size = 64ul * 1024u * 1024u, .dataValidTime = { [0] = {.time_100ps = 10}, }, .busyOffset = 0u, .busyBitPolarity = 0u, .lookupTable = { /* Read */// EEH+11H+32bit addr+20dummy cycles+ 4Bytes read data /* Macronix manual says 20 dummy cycles @ 200Mhz, FlexSPI peripheral Operand value needs to be 2N in DDR mode hence 0x28 */ [0 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0xEE, CMD_DDR, FLEXSPI_8PAD, 0x11), //0x871187ee, [0 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, DUMMY_DDR, FLEXSPI_8PAD, 0x28),//0xb3288b20, [0 + 2] = FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_8PAD, 0x04, STOP_EXE, FLEXSPI_1PAD, 0x00), //0xa704, /* Read status */ [4 * 2 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x05, CMD_DDR, FLEXSPI_8PAD, 0xfa), [4 * 2 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, DUMMY_DDR, FLEXSPI_8PAD, 0x04), [4 * 2 + 2] = FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_8PAD, 0x04, STOP_EXE, FLEXSPI_1PAD, 0x00), /* Write enable SPI *///06h [4 * 3 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP_EXE, FLEXSPI_1PAD, 0x00),//0x00000406, /* Write enable OPI SPI *///06h [4 * 4 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x06, CMD_DDR, FLEXSPI_8PAD, 0xF9), /* Erase sector */ [4 * 5 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x21, CMD_DDR, FLEXSPI_8PAD, 0xDE), [4 * 5 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, STOP_EXE, FLEXSPI_1PAD, 0x00), /*Write Configuration Register 2 =01, Enable OPI DDR mode*/ //72H +32bit address + CR20x00000000 = 0x01 [4 * 6 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x72, CMD_SDR, FLEXSPI_1PAD, 0x00),//0x04000472, [4 * 6 + 1] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x00, CMD_SDR, FLEXSPI_1PAD, 0x00),//0x04000400, [4 * 6 + 2] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x00, WRITE_SDR, FLEXSPI_1PAD, 0x01),//0x20010400, /*Page program*/ [4 * 9 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x12, CMD_DDR, FLEXSPI_8PAD, 0xED),//0x87ed8712, [4 * 9 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, WRITE_DDR, FLEXSPI_8PAD, 0x04),//0xa3048b20, }, }, .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, .ipcmdSerialClkFreq = 1, .serialNorType = 2, .reserve2[0] = 0x7008200, }; Re: Flash configuration confusion RT1176 Octal DDR 你好@SimonHugr , 如果您计划使用 DDR 模式,请记住还必须考虑字节交换配置。本文提供了一些有用的信息,说明在使用 DDR 模式时,MX25UM51245GXDI00 的字节交换为何如此重要。 我强烈建议使用启动内存配置来生成 FCB,安全配置工具v26.6 提供了 MX25UM51245G 的模板,可以作为您配置的良好起点。另外,您可能也知道,这个工具可以帮助您测试配置。 此外,我建议查看这篇社区帖子,特别是从第 15 点开始的步骤。该部分更详细地解释了安全配置工具如何生成启动内存配置,并有助于阐明该工具生成的参数和输出。 最后,您可以使用 flexspi_nor_polling_transfer_cm7 示例来验证生成的 FCB,并在继续进行启动配置之前验证读取和写入操作是否正常工作。 BR 哈比卜 Re: Flash configuration confusion RT1176 Octal DDR 很遗憾,目前还没有结果。我仍然认为这与数据顺序互换有关,我可能漏掉了一些配置字节…… Re: Flash configuration confusion RT1176 Octal DDR 谢谢你,马斯米塞姆 事实上,我注意到例如数据应该互换一下。我将再次检查我的查找表。 Re: Flash configuration confusion RT1176 Octal DDR 参考此帖: https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Internal-Boot-from-Flash-memory-not-starting-on-imxRT1176-custom/mp/1830699 我应该通过编辑 misc 选项来交换数据顺序,根据 Zephyr RTOS 的说明(https://github.com/zephyrproject-rtos/hal_nxp/blob/3a36ee1f8b9fc2168fc0bf80377ace8298292993/mcux/mcux-sdk-ng/devices/RT/RT1170/MIMXRT1176/drivers/romapi/fsl_romapi.h#L340-L355 ) 数据交换字节已经插入,但我感觉好像漏掉了什么。 .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, .ipcmdSerialClkFreq = 1, .isDataOrderSwapped = true .serialNorType = 2, .reserve2[0] = 0x7008200, Re: Flash configuration confusion RT1176 Octal DDR 嘿@SimonHugr , 我首先要确认的是 MX25UM51245G 和 MX25UM51345G 之间的实际区别。虽然零件编号非常相似,但它们并不是完全相同的设备。根据 Macronix 的数据手册,MX25UM51345G 明确支持 DOPI(双倍传输速率 OPI)字节模式数据序列,而 MX25UM51245G 属于不同的产品型号。这会影响 FlexSPI 控制器使用的命令格式、字节顺序和 LUT 配置。 您还可以对比一下我的配置,我的配置适用于 MX25UM513 和 MX25UW6345G: https://github.com/Masmiseim36/Coremark_iMXRT/blob/master/XiP/flexspi_flash_OSPI_Macronix.c 雷加尔斯 Re: Flash configuration confusion RT1176 Octal DDR 你好,哈比卜 对于我们的固件,我无法使用安全配置工具生成 FCB,而是需要在固件启动时加载 FCB,因此我需要创建 mem_config 和 flash_config 结构并自行配置。 我发现 Zephyr 项目在 flash_nor_config 中引用了一个 isDataOrderSwapped 字节。 https://github.com/zephyrproject-rtos/hal_nxp/blob/3a36ee1f8b9fc2168fc0bf80377ace8298292993/mcux/mcux-sdk-ng/devices/RT/RT1170/MIMXRT1176/drivers/romapi/fsl_romapi.h#L347-L348 Claude 提到 controllerMiscOption 的第 5 位有一个 padSettingOverride 位,第 7 位有一个 dataSwap 位,但我不太确定 LLM 是否严重地臆造了这些信息。 使用安全配置工具生成 FCB 并使用此工具将其转换为 C 结构体时 https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs-Knowledge/i-MX-RT-FLEXSPI-booting-guide/ta-p/1669262 我没有设置第 5 位或第 7 位,所以我认为 LLM 有问题,但是 isDataSwapped 已设置,并且在 FCB 中通常被引用为 reserved0[0]。 我在安全配置工具中找不到 MX25UM51245G 的模板,只有 MX25U51245G(四闪存)、MX25UM51345G 和 MX25UMxxx45G 的模板。 但我尝试过的所有八进制DDR配置都无法启动。 有趣的是,尽管 BT_FUSE_SEL = 1 且引脚 BOOTMODE0/1 = 0,MCU 在某些配置后通常会自动进入 ISP 模式。这种情况并不稳定,我不确定是什么配置导致了这个问题。 MCU在读取闪存失败后是否会进入ISP模式? 谢谢 BR Re: Flash configuration confusion RT1176 Octal DDR 你好@SimonHugr , 很抱歉,MX25UM51245G 没有模板,只有 MX25U51245G 和 MX25UM51345G 可用。 根据您的描述,使用您当前的启动内存配置设置,与闪存设备的通信似乎工作正常。单击“转换为完整 FCB”后,该工具会将配置编程到闪存中,然后使用您指定的参数将其读取回来,如下所述: 如果所选设置中有任何一项不被闪存设备支持,该工具应报告类似于以下内容的错误: 为了进一步验证社区帖子中提到的使用 FCB 变流器生成的 LUT 是否正常工作,请您在从内部 RAM 运行应用程序时,使用 flexspi_nor_polling_transfer_cm7 SDK 示例进行测试。如果您对示例有任何疑问,请随时联系我。 此外,您能否提供一些关于您尝试启动的应用程序的更多详细信息? -这是 SDK 示例还是您自己的应用程序? 你使用的是哪个集成开发环境(IDE)? -您的应用程序是执行 XIP 还是非 XIP? -除了启动过程之外,您是否在任何其他阶段访问过闪存? 关于进入 ISP 模式,请确保您的定制板上的启动引脚符合MIMXRT1160/1170 硬件开发指南第 5 章“启动、复位和其他”中提到的建议?这样做是为了避免与启动引脚相关的任何硬件问题。 回答您的问题,如果没有有效的镜像文件,您可以进入ISP模式,如图10-1所示的RM“启动流程”: BR 哈比卜
View full article
RT1010/RT1011 FLEXIO EDMA 我使用 iMX RT1011 Nano 套件 不错的板 我尝试从移位器 0 设置 8 位并行的 EDMA Flexio。 定时器 0 设置为 30MHz,EDMA 发送 512 字节(每个请求 1 字节) 代码: FLEXIO_DEV->SHIFTCTL[TX_SHIFTER] = FLEXIO_SHIFTCTL_TIMSEL(WR_TIMER) | FLEXIO_SHIFTCTL_TIMPOL(0U) | FLEXIO_SHIFTCTL_PINCFG(3U) /* 输出 */ | FLEXIO_SHIFTCTL_PINSEL(DATA_PIN_START) | FLEXIO_SHIFTCTL_PINPOL(0U) | FLEXIO_SHIFTCTL_SMOD(2U); /* 传输 */ /* 定时器0:写保护选通,每字节一个脉冲 * TIMCMP 低字节 = (flexio_clk / (2*wr_clk)) - 1 * TIMCMP[15:8] = (beats*2)-1 = 1,表示每次移位加载一个字节 */ timDiv = (flexioClk_Hz / (2U * wrClock_Hz)); 如果 (timDiv != 0U) { timDiv -= 1U; } timDiv &= 0xFFU; FLEXIO_DEV->TIMCMP[WR_TIMER] = (1U << 8U) | FLEXIO_DEV->TIMCMP[WR_TIMER] = (1U << 8U) |蒂姆迪夫; FLEXIO_DEV->TIMCFG[WR_TIMER] = FLEXIO_TIMCFG_TIMOUT(1U) | FLEXIO_TIMCFG_TIMDEC(0U) | FLEXIO_TIMCFG_TIMRST(0U) | FLEXIO_TIMCFG_TIMDIS(2U) /* 禁用比较 */ | FLEXIO_TIMCFG_TIMENA(2U) /* 高触发时启用 */ | FLEXIO_TIMCFG_TSTOP(0U) | FLEXIO_TIMCFG_TSTART(0U); FLEXIO_DEV->TIMCTL[WR_TIMER] = FLEXIO_TIMCTL_TRGSEL((4U * TX_SHIFTER) + 1U) /* Shifter0 标志 */ | FLEXIO_TIMCTL_TRGPOL(1U) /* 低电平有效 */ | FLEXIO_TIMCTL_TRGSRC(1U) /* 内部 */ | FLEXIO_TIMCTL_PINCFG(3U) /* 输出 */ | FLEXIO_TIMCTL_PINSEL(WR_PIN) | FLEXIO_TIMCTL_PINPOL(1U) /* WR 低电平有效 */ | FLEXIO_TIMCTL_TIMOD(1U); /* 双 8 位波特率/位 */ /* 启用来自 Shifter0 的 DMA 请求 */ FLEXIO_DEV->SHIFTSDEN |= (1U << TX_SHIFTER); /* 启用 FlexIO */ FLEXIO_DEV->CTRL |= FLEXIO_CTRL_FLEXEN_MASK; 我在逻辑分析仪上看到了信号。 看起来和我预期的一样,但我在某些 512 包中发现数据缺失。 我的意思是,比如先发送 200 字节,然后停止,之后再发送所有 512 个字节。 扎希 Re: RT1010/RT1011 FLEXIO EDMA 你好@TZAHI , 非常感谢您对我们产品的关注以及对我们社区的使用。 最有可能的检查方向是:在 30 MHz WR 时钟下,eDMA 能否足够快地持续填充 FlexIO SHIFTBUF。 在当前每次请求传输一个字节的配置下,DMA 请求速率可能会非常高。这对于 eDMA、总线仲裁和 FlexIO SHIFTBUF 重新填充时间来说可能非常紧张。 一个可能的症状是变速箱换挡器运转不畅。请在传输失败后立即检查 SHIFTERR,然后再重新初始化或清除 FlexIO: 如果可能的话,请尝试提高 CPU/总线时钟频率,或者将 WR 时钟频率降低到 30 MHz 以下,例如降低到 20 MHz 或 10 MHz。如果传输在较低的 WR 时钟频率下变得稳定,则强烈表明该问题与 DMA/FlexIO 的重新填充时序有关。 希望对你有帮助 顺祝商祺! 5月
View full article
晶振波形异常 你好,@ lukaszadrapa 我们公司在使用贵公司的FS32K144HFT0MLHT这款MCU, 使用晶振为AV08000009这款8MHz的无源晶振,波形异常。请问这样的晶振波形 贵公司的MCU可以接受吗 是否会影响MCU的正常使用吗 Re: 晶振波形异常 嗨@Kyp 示波器截图似乎没有显示实际的 8 MHz 晶体波形。显示的频率(~256 Hz)与预期的振荡器频率不一致,很可能是由于所选示波器时基和采样率引起的混叠所致。因此,仅凭这一测量结果无法评估晶振(晶体振荡器)的质量。应该使用速度快得多的时基来观察实际的振荡器波形。 此致, Lukas
View full article
LPC54113 Power API 「power」関数のAPIの使い方を知りたいです。SDKを通じて、この関数は特定の関数に直接使えることがわかりました。しかし、iap APIとは異なり、エントリーポイントや使用方法に関する説明は提供されていません。 LPC541XX Re: LPC54113 Power API こんにちは、 @jcxzさん はい、おっしゃる通りです。 POWER APIのより詳細な説明を含む他のSDKを参照することもできます。 BR アリス Re: LPC54113 Power API 54シリーズの他のチップのSDKsをダウンロードすることで、私はPOWER_TypeとPOWER_BASEを見つけることができました。ありがとうございます。 Re: LPC54113 Power API 私のLPC54S018はNXPのウェブサイトからSDKをダウンロードしました。PowerAPI、ClockAPIなどの機能が含まれています。 例えば、POWER_SetVoltageForFreq(...) など。 また、API関数を呼び出すためのエントリーポイントとプロトタイプについても説明しています。 LPC54113についても同様だと思います。
View full article
LX2160A:接收器上未使用的 SerDes 通道的下拉值 你好, 芯片: LX2160A 应用笔记 AN5407 规定,如果未使用 SerDes 通道,则应将其下拉: 如果某些 SerDes 通道未连接,请将其接收器引脚拉低至 GND。 请问下拉菜单的值是多少?或者我应该将接收器引脚直接连接到 GND? 谢谢。 Re: LX2160A: Pull down value on receiver for SerDes lanes not used 你好, AN5407 中的“将接收器引脚拉低至 GND”的说法故意含糊不清——NXP 的澄清是,直接将 0 Ω 连接到 GND 是正确且首选的方法。 SerDes 掉电 即使 RX 引脚连接到 GND,如果 SerDes 模块仍然通电,AN5407 还建议通过固件掉电未使用的通道:在 PBI 阶段配置通用控制 0 寄存器以掉电未使用的 SerDes 通道。如果整个 SerDes 模块已经掉电,则无需单独掉电各个通道。 此致
View full article
水晶発振器の波形異常 こんにちは、@lukaszadrapa 弊社では貴社製のFS32K144HFT0MLHTマイクロコントローラを使用しています。 8MHzの受動水晶発振器(AV08000009)を使用した場合、波形が異常になります。この波形は貴社製MCUにとって許容範囲内でしょうか? MCUの正常な動作に影響しますか? Re: 晶振波形异常 こんにちは、 @Kypさん オシロスコープのスクリーンショットには、実際の8MHz水晶発振器の波形が表示されていないようです。表示されている周波数(約256Hz)は、予想される発振器の周波数と一致しておらず、選択されたオシロスコープのタイムベースとサンプリングレートによるエイリアシングが原因である可能性が最も高い。したがって、この測定だけで結晶振動子の品質を評価することはできません。実際の発振器波形を観測するには、より高速な時間軸を使用する必要がある。 よろしくお願いいたします。 ルーカス
View full article
如何使用 S32 设计工作室 MCP 集成 如何使用S32 Design Studio MCP集成?是否有相关资料和文档? Re: How to use S32 Design Studio MCP Integration 你好, 遗憾的是,相关文档和使用示例仍在开发中。我希望它能尽快对外发布,但不知道具体日期。
View full article
フラッシュ構成の混乱 RT1176 オクタル DDR こんにちは、NXP Macronix Octal DDRモード用にフラッシュメモリを設定する際に、いくつか問題が発生しました。 NXP FMU-6XRTのリファレンスデザインをベースにしたカスタムボード上でPX4コードスタックを使っています。私はMX25UM51345Gの代わりにMX25UM51245Gを使用していますが、部品の違いはごくわずかです。 Macronix Octal DDRモードで、DQS外部サンプリングを少なくとも100MHzで実行しようとしています。リファレンスデザインでは200MHzで動作させています。ブートメモリ構成は、166MHzの場合でも、目的の構成でメモリを正常にテストします。 私が試した設定は、以下のデフォルト設定です。最初の「g_flash_config」は起動、書き込み、読み込みなどを成功させていますが、ソフトウェアには理想的ではありません。「g_flash_fast_config」が失敗します。 「fast_config」のDTRモードで、周波数を166MHz、133MHz、50MHz、30MHzに下げてみましたが、効果はありませんでした。 ブートメモリ構成から生成されたFCBを使用してみましたが、構造体のレイアウトにいくつかの違いがあり、PX4コードに適用するのが困難でした。 csHoldTime、csSetupTime、dataValidTimeのさまざまな組み合わせを試してみましたが、結果は得られませんでした。 低周波DTRオクタールでDQS内部を試してみましたが、うまくいきませんでした。 次に何を試せばいいでしょうか? #include /**************************************************************************** * Public Data ****************************************************************************/ locate_data(".boot_hdr.conf") const struct flexspi_nor_config_s g_flash_config = { .memConfig = { #if !defined(CONFIG_BOARD_BOOTLOADER_INVALID_FCB) .tag = FLEXSPI_CFG_BLK_TAG, #else .tag = 0xffffffffL, #endif .version = FLEXSPI_CFG_BLK_VERSION, .readSampleClksrc=kFlexSPIReadSampleClk_LoopbackInternally, .csHoldTime = 1, .csSetupTime = 1, .deviceModeCfgEnable = 1, .deviceModeType = kDeviceConfigCmdType_Generic, .waitTimeCfgCommands = 1, .controllerMiscOption = (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable), .deviceType = kFlexSpiDeviceType_SerialNOR, .sflashPadType = kSerialFlash_1Pad, .serialClkFreq = kFlexSpiSerialClk_100MHz, .sflashA1Size = 64ul * 1024u * 1024u, .dataValidTime = { [0] = {.time_100ps = 0}, }, .busyOffset = 0u, .busyBitPolarity = 0u, .lookupTable = { /* Read Dedicated 3Byte Address Read(0x03), 24bit address */ [0 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x03, RADDR_SDR, FLEXSPI_1PAD, 0x18), //0x871187ee, [0 + 1] = FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x04, STOP_EXE, FLEXSPI_1PAD, 0),//0xb3048b20 }, }, .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, .ipcmdSerialClkFreq = 1, .serialNorType = 2, .reserve2[0] = 0x7008200, }; const struct flexspi_nor_config_s g_flash_fast_config = { .memConfig = { .tag = FLEXSPI_CFG_BLK_TAG, .version = FLEXSPI_CFG_BLK_VERSION, .readSampleClksrc=kFlexSPIReadSampleClk_LoopbackInternally, .csHoldTime = 3, .csSetupTime = 3, .deviceModeCfgEnable = 1, .deviceModeType = kDeviceConfigCmdType_Spi2Xpi, .waitTimeCfgCommands = 1, .deviceModeSeq = { .seqNum = 1, .seqId = 6, /* See Lookup table for more details */ .reserved = 0, }, .deviceModeArg = 2, /* Enable OPI DDR mode */ .controllerMiscOption = (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DdrModeEnable), .deviceType = kFlexSpiDeviceType_SerialNOR, .sflashPadType = kSerialFlash_8Pads, .serialClkFreq = kFlexSpiSerialClk_133MHz, .sflashA1Size = 64ul * 1024u * 1024u, .dataValidTime = { [0] = {.time_100ps = 10}, }, .busyOffset = 0u, .busyBitPolarity = 0u, .lookupTable = { /* Read */// EEH+11H+32bit addr+20dummy cycles+ 4Bytes read data /* Macronix manual says 20 dummy cycles @ 200Mhz, FlexSPI peripheral Operand value needs to be 2N in DDR mode hence 0x28 */ [0 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0xEE, CMD_DDR, FLEXSPI_8PAD, 0x11), //0x871187ee, [0 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, DUMMY_DDR, FLEXSPI_8PAD, 0x28),//0xb3288b20, [0 + 2] = FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_8PAD, 0x04, STOP_EXE, FLEXSPI_1PAD, 0x00), //0xa704, /* Read status */ [4 * 2 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x05, CMD_DDR, FLEXSPI_8PAD, 0xfa), [4 * 2 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, DUMMY_DDR, FLEXSPI_8PAD, 0x04), [4 * 2 + 2] = FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_8PAD, 0x04, STOP_EXE, FLEXSPI_1PAD, 0x00), /* Write enable SPI *///06h [4 * 3 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP_EXE, FLEXSPI_1PAD, 0x00),//0x00000406, /* Write enable OPI SPI *///06h [4 * 4 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x06, CMD_DDR, FLEXSPI_8PAD, 0xF9), /* Erase sector */ [4 * 5 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x21, CMD_DDR, FLEXSPI_8PAD, 0xDE), [4 * 5 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, STOP_EXE, FLEXSPI_1PAD, 0x00), /*Write Configuration Register 2 =01, Enable OPI DDR mode*/ //72H +32bit address + CR20x00000000 = 0x01 [4 * 6 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x72, CMD_SDR, FLEXSPI_1PAD, 0x00),//0x04000472, [4 * 6 + 1] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x00, CMD_SDR, FLEXSPI_1PAD, 0x00),//0x04000400, [4 * 6 + 2] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x00, WRITE_SDR, FLEXSPI_1PAD, 0x01),//0x20010400, /*Page program*/ [4 * 9 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x12, CMD_DDR, FLEXSPI_8PAD, 0xED),//0x87ed8712, [4 * 9 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, WRITE_DDR, FLEXSPI_8PAD, 0x04),//0xa3048b20, }, }, .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, .ipcmdSerialClkFreq = 1, .serialNorType = 2, .reserve2[0] = 0x7008200, }; Re: Flash configuration confusion RT1176 Octal DDR こんにちは、 @SimonHugr さん。 DDRモードを使用する場合は、バイトスワッピングの設定も考慮する必要があることにご注意ください。この記事では、DDRモードを使用する際にMX25UM51245GXDI00のバイトスワッピングを考慮することがなぜ重要なのかについての役立つ情報を提供します。 FCBを生成するにはBoot Memory Configurationを使うことを強くお勧めします。 Secure Provisioning Tool v26.6はそのMX25UM51245Gのテンプレートを提供しており、構成の良い出発点として役立ちます。また、ご存知かもしれませんが、このツールを使用すると設定をテストできます。 さらに、このコミュニティ投稿、特に15番目の手順から始まる部分を参照することをお勧めします。そのセクションでは、セキュアプロビジョニングツールがブートメモリ構成を生成する方法についてより詳細な説明を提供しており、ツールによって生成されるパラメータと出力の理解に役立つ可能性があります。 最後に、flexspi_nor_polling_transfer_cm7例を使って生成されたFCBを検証し、読み書き操作が正しく動作しているか確認してから起動設定を進めることができます。 BR ハビブ Re: Flash configuration confusion RT1176 Octal DDR 残念ながらまだ結果は出ていません。やはり何らかのデータ順序の入れ替えが行われているか、どこかで設定バイトが不足しているのではないかと考えています。 Re: Flash configuration confusion RT1176 Octal DDR マスミセイムさん、ありがとうございます。 確かに、例えばデータを入れ替える必要があることに気づきました。もう一度LUTを確認してみます。 Re: Flash configuration confusion RT1176 Octal DDR このスレッドを参照して:https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Internal-Boot-from-Flash-memory-not-starting-on-imxRT1176-custom/m-p/1830699 Zephyr RTOSの指示に従って、ミスオプションを編集してデータの順序を入れ替えるべき https://github.com/zephyrproject-rtos/hal_nxp/blob/3a36ee1f8b9fc2168fc0bf80377ace8298292993/mcux/mcux-sdk-ng/devices/RT/RT1170/MIMXRT1176/drivers/romapi/fsl_romapi.h#L340-L355 データスワップバイトは挿入されるのですが、何か見落としているような気がします。 .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, .ipcmdSerialClkFreq = 1, .isDataOrderSwapped = true .serialNorType = 2, .reserve2[0] = 0x7008200, Re: Flash configuration confusion RT1176 Octal DDR やあ、 @SimonHugr 、 まず最初に確認したいのは、MX25UM51245GとMX25UM51345Gの実際の違いです。部品番号は非常によく似ていますが、それらは同一の機器ではありません。Macronixのデータシートによると、MX25UM51345GはDOPI(Double Transfer Rate OPI)バイトモードのデータシーケンスを明示的にサポートしていますが、MX25UM51245Gは別の製品バリアントに属しています。これにより、FlexSPIコントローラで使用されるコマンドフォーマット、バイト順序、LUT構成に影響を与えることがあります。 私の設定も比較できます。MX25UM513とMX25UW6345G: https://github.com/Masmiseim36/Coremark_iMXRT/blob/master/XiP/flexspi_flash_OSPI_Macronix.c よろしく Re: Flash configuration confusion RT1176 Octal DDR こんにちは、ハビブ 私たちのファームウェアでは、セキュアプロビジョニングツールを使用してFCBを生成することができないため、代わりにFCBをファームウェアの起動時にロードする必要があります。そのため、mem_configおよびflash_config構造体を作成し、自分で設定する必要があります。 Zephyrプロジェクトがそのflash_nor_configでisDataOrderSwappedのバイトを参照していることを見つけました https://github.com/zephyrproject-rtos/hal_nxp/blob/3a36ee1f8b9fc2168fc0bf80377ace8298292993/mcux/mcux-sdk-ng/devices/RT/RT1170/MIMXRT1176/drivers/romapi/fsl_romapi.h#L347-L348 また、Claude は controllerMiscOption のビット 5 に padSettingOverride ビット、ビット 7 に dataSwap ビットを参照していますが、LLM がこの情報をかなり誇張しているかどうかはわかりません。 Secure Provisioningツールを使用してFCBを生成し、このツールを使用してC構造体に変換する場合 https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs-Knowledge/i-MX-RT-FLEXSPI-booting-guide/ta-p/1669262 ビット5や7は設定されていないのでLLMが間違っていると思いますが、isDataSwappedは設定されていて、通常FCBでreserved0[0]として参照されています。 セキュアプロビジョニングツールでMX25UM51245Gのテンプレートは見つかりませんが、MX25U51245G(クアッドフラッシュ)、MX25UM51345G、MX25UMxxx45Gだけです。 しかし、私が試したどのオクタルDDR構成も起動できませんでした。 興味深いことに、BT_FUSE_SEL=1でピンBOOTMODE0/1=0であっても、特定の設定後に自動的にISPモードに入ることがよくあります。これは一貫して発生しているわけではなく、どの設定が原因なのか分かりません。 フラッシュの読み取りに失敗した後、MCUはISPモードに入るのでしょうか? よろしくお願い申し上げます。 BR Re: Flash configuration confusion RT1176 Octal DDR こんにちは、 @SimonHugr さん。 申し訳ございませんが、MX25UM51245Gのテンプレートはございません。MX25U51245GとMX25UM51345Gのみご利用いただけます。 ご説明いただいた内容から判断すると、現在のブートメモリ構成設定では、フラッシュデバイスとの通信は正常に機能しているようです。「完全なFCBに変換」をクリックすると、ツールは構成をフラッシュメモリに書き込み、その後、以下に説明するように、指定したパラメータを使用してそれを読み戻します。 選択された設定のいずれかがフラッシュデバイスでサポートされていない場合、ツールは次のようなエラーを報告するはずです。 コミュニティ投稿でFCBコンバーターで生成されたLUTが正しく動作しているかさらに確認するために、flexspi_nor_polling_transfer_cm7 SDKの例で、内部RAMからアプリケーションを実行しながらテストしていただけますか?例について質問があれば教えてください。 さらに、起動しようとしているアプリケーションについてもう少し詳しく教えてもらえますか? -SDKの例ですか、それともご自身のアプリケーションですか? -どのIDEを使っていますか? -あなたのアプリケーションはXIPを実行していますか、それとも非XIPですか? -起動中以外でフラッシュにアクセスしていますか? ISPモードでの入りについてですが、カスタムボードのブートピンがハードウェア 開発MIMXRT1160ガイドの第5章「起動、リセット、その他」の推奨事項に従っているか確認していただけますか?これは、ブートピンに関するハードウェアの問題を回避するためです。 ご質問にお答えすると、有効なイメージが利用できない場合、ISPモードで入ることができます。図10-1のRMの「ブートフロー」に示されています。 BR ハビブ
View full article
ELEはホストがアクセスできない非揮発性ストレージに鍵を保持できますか? こんにちは、 EdgeLock セキュア・エンクレーブ(ELE)での永続キー保存についてお尋ねしたいです。 私の理解によると、ELEが暗号操作に使用する鍵は、キーストレージサービスを使って永続的に保存できます。私が理解している典型的な流れは以下のとおりです。 1. 対象キーのキーブロブを作成し、ホストにエクスポートします。 2. エクスポートしたキーブロブをフラッシュメモリなどの不揮発性メモリに保存します。 3. 暗号化操作に鍵が必要な場合は、キーブロブをインポートし、ELE を介して鍵を使用します。 この方法では、キーブロブはELEによって生成されるため、ホストは実際のキー素材を読み取ることができません。しかし、Flashではキーブロブ自体がホストに保存されているため、ホストはキーブロブを削除したり上書きしたりできるようです。 私の質問は次のとおりです。 ELEからはアクセス可能だがホストからはアクセスできない不揮発性ストレージ領域に鍵(またはそのキーブロブ)を保存する方法はありますか?これにより、鍵マテリアルやキーブロブがホストに一切公開されることなく、ELEが暗号化操作を実行できるようになります。 言い換えれば、ELEが永続的なキーストレージを完全にセキュアな領域内で所有および管理し、ホストがキーやキーブロブを直接扱うことがないようにすることは可能でしょうか? ご指導をよろしくお願いいたします。 Re: Can ELE Retain Keys in Host-Inaccessible Non-Volatile Storage? こんにちは、 @t_hosomi さん。お元気でお過ごしでしょうか。 NVMフローにおける鍵の生成と保存に関するあなたの理解は正しいです。 しかし、ELEには不揮発性メモリがないため(SRMのセクション10.3.1に記載されているとおり)、サポートされている唯一の方法は、エクスポートされたキーブロブをホストのNVMに保存することです。 この情報がお役に立てば幸いです。 Re: Can ELE Retain Keys in Host-Inaccessible Non-Volatile Storage? こんにちは、RomanVRさん。 ご回答ありがとうございます。 ELE自体は不揮発性ストレージを提供しないため、永続的なキーデータはホストの不揮発性メモリに保存する必要があることを理解しています。 この点を明確にしていただきありがとうございます。
View full article
Clarification on eMIOS DMA Request Mapping Hello Team, I am currently using eMIOS1_CH13 for the LiPS sensor in DMA mode. The configuration uses DMA Channel 0 and DMAMUX0. While reviewing the S32K3xx DMAMUX mapping Excel, I observed that for eMIOS1, only DMA requests 0, 1, 9, and 10 are listed under DMAMUX0. However, my application is configured to use eMIOS1_CH13. Could you please clarify the following: Which DMA request source should be used for eMIOS1_CH13? Does eMIOS1_CH13 support DMA triggering, or is DMA support limited to the eMIOS channels corresponding to DMA requests 0, 1, 9, and 10? Thank you for your support. Best regards, Jyothsna Sagili Re: Clarification on eMIOS DMA Request Mapping Hi, according to the S32K3 DMAMUX mapping, eMIOS provides DMA request sources only for channels 0, 1, 9, 10, 16, 17, 18, and 19. These are the only eMIOS channels that can generate DMA requests. Since eMIOS1_CH13 is not one of these channels, it does not have a dedicated DMA request source in DMAMUX and cannot directly trigger eDMA transfers. If DMA triggering is required, please use one of the eMIOS channels associated with the available DMA request sources (0, 1, 9, 10, 16, 17, 18, or 19). BR, Petr
View full article
关于 eMIOS DMA 请求映射的说明 各位同事好, 我目前在 DMA 模式下使用 eMIOS1_CH13 连接 LiPS 传感器。该配置使用 DMA 通道 0 和 DMAMUX0。 在查看 S32K3xx DMAMUX 映射 Excel 时,我发现对于 eMIOS1,DMAMUX0 下只列出了 DMA 请求 0、1、9 和 10。但是,我的应用程序配置为使用 eMIOS1_CH13。 请您澄清以下问题: eMIOS1_CH13 应该使用哪个 DMA 请求源? eMIOS1_CH13 是否支持 DMA 触发,还是 DMA 支持仅限于与 DMA 请求 0、1、9 和 10 对应的 eMIOS 通道? 感谢您的支持。 顺祝商祺! 乔斯纳·萨吉利 Re: Clarification on eMIOS DMA Request Mapping 您好, 根据 S32K3 DMAMUX 映射,eMIOS 仅为通道 0、1、9、10、16、17、18 和 19 提供 DMA 请求源。只有这些 eMIOS 通道才能生成 DMA 请求。 由于 eMIOS1_CH13 不是这些通道之一,因此它在 DMAMUX 中没有专用的 DMA 请求源,不能直接触发 eDMA 传输。如果需要 DMA 触发,请使用与可用 DMA 请求源(0、1、9、10、16、17、18 或 19)关联的 eMIOS 通道之一。 BR,彼得
View full article
Flash configuration confusion RT1176 Octal DDR Hello NXP I got some issues configuring the flash memory for Macronix Octal DDR mode. I am using the PX4 code stack on a custom board based on the NXP FMU-6XRT reference design. I am using the MX25UM51245G instead of the MX25UM51345G, but the part differences are minimal. I am trying to run it in Macronix Octal DDR mode with DQS external sampling at atleast 100MHz. Reference design is running it at 200MHz. The Boot Memory Configuration succesfully tests the memory with the desired configuration even at 166MHz. The configuration I have tried is the following default config. The first one, "g_flash_config" succesfully boots, writes, read, etc, but is not ideal for the software. "g_flash_fast_config" fails. I have tried reducing the frequency to 166MHZ, 133MHz, 50 MHz, and 30MHz without results in the DTR mode in the "fast_config". I have tried using the FCB generated from the Boot Memory Configuration, but there is some struct layout differences which have made it hard to apply to the PX4 code.  I am tried different combinations of csHoldTime, csSetupTime and dataValidTime without results aswell. I tried DQS interal in low freq DTR Octal, but it did not work either. What could I try next? #include /**************************************************************************** * Public Data ****************************************************************************/ locate_data(".boot_hdr.conf") const struct flexspi_nor_config_s g_flash_config = { .memConfig = { #if !defined(CONFIG_BOARD_BOOTLOADER_INVALID_FCB) .tag = FLEXSPI_CFG_BLK_TAG, #else .tag = 0xffffffffL, #endif .version = FLEXSPI_CFG_BLK_VERSION, .readSampleClksrc=kFlexSPIReadSampleClk_LoopbackInternally, .csHoldTime = 1, .csSetupTime = 1, .deviceModeCfgEnable = 1, .deviceModeType = kDeviceConfigCmdType_Generic, .waitTimeCfgCommands = 1, .controllerMiscOption = (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable), .deviceType = kFlexSpiDeviceType_SerialNOR, .sflashPadType = kSerialFlash_1Pad, .serialClkFreq = kFlexSpiSerialClk_100MHz, .sflashA1Size = 64ul * 1024u * 1024u, .dataValidTime = { [0] = {.time_100ps = 0}, }, .busyOffset = 0u, .busyBitPolarity = 0u, .lookupTable = { /* Read Dedicated 3Byte Address Read(0x03), 24bit address */ [0 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x03, RADDR_SDR, FLEXSPI_1PAD, 0x18), //0x871187ee, [0 + 1] = FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x04, STOP_EXE, FLEXSPI_1PAD, 0),//0xb3048b20 }, }, .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, .ipcmdSerialClkFreq = 1, .serialNorType = 2, .reserve2[0] = 0x7008200, }; const struct flexspi_nor_config_s g_flash_fast_config = { .memConfig = { .tag = FLEXSPI_CFG_BLK_TAG, .version = FLEXSPI_CFG_BLK_VERSION, .readSampleClksrc=kFlexSPIReadSampleClk_LoopbackInternally, .csHoldTime = 3, .csSetupTime = 3, .deviceModeCfgEnable = 1, .deviceModeType = kDeviceConfigCmdType_Spi2Xpi, .waitTimeCfgCommands = 1, .deviceModeSeq = { .seqNum = 1, .seqId = 6, /* See Lookup table for more details */ .reserved = 0, }, .deviceModeArg = 2, /* Enable OPI DDR mode */ .controllerMiscOption = (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DdrModeEnable), .deviceType = kFlexSpiDeviceType_SerialNOR, .sflashPadType = kSerialFlash_8Pads, .serialClkFreq = kFlexSpiSerialClk_133MHz, .sflashA1Size = 64ul * 1024u * 1024u, .dataValidTime = { [0] = {.time_100ps = 10}, }, .busyOffset = 0u, .busyBitPolarity = 0u, .lookupTable = { /* Read */// EEH+11H+32bit addr+20dummy cycles+ 4Bytes read data /* Macronix manual says 20 dummy cycles @ 200Mhz, FlexSPI peripheral Operand value needs to be 2N in DDR mode hence 0x28 */ [0 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0xEE, CMD_DDR, FLEXSPI_8PAD, 0x11), //0x871187ee, [0 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, DUMMY_DDR, FLEXSPI_8PAD, 0x28),//0xb3288b20, [0 + 2] = FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_8PAD, 0x04, STOP_EXE, FLEXSPI_1PAD, 0x00), //0xa704, /* Read status */ [4 * 2 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x05, CMD_DDR, FLEXSPI_8PAD, 0xfa), [4 * 2 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, DUMMY_DDR, FLEXSPI_8PAD, 0x04), [4 * 2 + 2] = FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_8PAD, 0x04, STOP_EXE, FLEXSPI_1PAD, 0x00), /* Write enable SPI *///06h [4 * 3 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP_EXE, FLEXSPI_1PAD, 0x00),//0x00000406, /* Write enable OPI SPI *///06h [4 * 4 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x06, CMD_DDR, FLEXSPI_8PAD, 0xF9), /* Erase sector */ [4 * 5 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x21, CMD_DDR, FLEXSPI_8PAD, 0xDE), [4 * 5 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, STOP_EXE, FLEXSPI_1PAD, 0x00), /*Write Configuration Register 2 =01, Enable OPI DDR mode*/ //72H +32bit address + CR20x00000000 = 0x01 [4 * 6 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x72, CMD_SDR, FLEXSPI_1PAD, 0x00),//0x04000472, [4 * 6 + 1] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x00, CMD_SDR, FLEXSPI_1PAD, 0x00),//0x04000400, [4 * 6 + 2] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x00, WRITE_SDR, FLEXSPI_1PAD, 0x01),//0x20010400, /*Page program*/ [4 * 9 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x12, CMD_DDR, FLEXSPI_8PAD, 0xED),//0x87ed8712, [4 * 9 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, WRITE_DDR, FLEXSPI_8PAD, 0x04),//0xa3048b20, }, }, .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, .ipcmdSerialClkFreq = 1, .serialNorType = 2, .reserve2[0] = 0x7008200, }; Re: Flash configuration confusion RT1176 Octal DDR Hello @SimonHugr, If you plan to use DDR mode, please keep in mind that the byte swapping configuration must also be considered. this post provides useful information about why important take in mind the byte swapping on the MX25UM51245GXDI00 when you are using DDR mode.  I highly recommend use the Boot Memory Configuration to generate the FCB, the Secure provisioning tool v26.6 offers a template of the MX25UM51245G, which can serve as a good starting point for your configuration. Also, as you may know, this tool allows you to test your configurations. Additionally, I recommend see this community post, particularly the steps starting from point 15. That section provides a more detailed explanation of how the Secure Provisioning Tool generates the boot memory configuration and may help clarify the parameters and output produced by the tool. Finally, you can use the flexspi_nor_polling_transfer_cm7 example to validate the generated FCB and verify that read and write operations are functioning correctly before proceeding with the boot configuration. BR Habib Re: Flash configuration confusion RT1176 Octal DDR No results yet sadly, I still think it has something to do with some data order swap is done and I am missing some configuration byte somewhere... Re: Flash configuration confusion RT1176 Octal DDR Thank you Masmiseim Indeed, I noticed that the data should be swapped for example. I will go through my LUT once more. Re: Flash configuration confusion RT1176 Octal DDR Refering to this thread: https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Internal-Boot-from-Flash-memory-not-starting-on-imxRT1176-custom/m-p/1830699 I should swap the data order by editing the misc option and according to zephyr RTOS https://github.com/zephyrproject-rtos/hal_nxp/blob/3a36ee1f8b9fc2168fc0bf80377ace8298292993/mcux/mcux-sdk-ng/devices/RT/RT1170/MIMXRT1176/drivers/romapi/fsl_romapi.h#L340-L355 the dataswap byte goes in, but I think I am missing something. .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, .ipcmdSerialClkFreq = 1, .isDataOrderSwapped = true .serialNorType = 2, .reserve2[0] = 0x7008200, Re: Flash configuration confusion RT1176 Octal DDR Hey @SimonHugr, One thing I would verify first is the actual difference between the MX25UM51245G and MX25UM51345G. Although the part numbers are very similar, they are not identical devices. According to the Macronix datasheets, the MX25UM51345G explicitly supports DOPI (Double Transfer Rate OPI) Byte Mode data sequence, while the MX25UM51245G belongs to a different product variant. This can affect the command format, byte ordering and LUT configuration used by the FlexSPI controller. You can also compare my configuration which works with MX25UM513 and MX25UW6345G: https://github.com/Masmiseim36/Coremark_iMXRT/blob/master/XiP/flexspi_flash_OSPI_Macronix.c Regars Re: Flash configuration confusion RT1176 Octal DDR Hello Habib For our firmware I am not able to use the secure provisioning tool to generate the FCB, and instead the FCB needs to be loaded on boot in firmware and therefor I need to create the mem_config and flash_config struct and configure it myself. I found the zephyr project referenced a isDataOrderSwapped byte in the flash_nor_config https://github.com/zephyrproject-rtos/hal_nxp/blob/3a36ee1f8b9fc2168fc0bf80377ace8298292993/mcux/mcux-sdk-ng/devices/RT/RT1170/MIMXRT1176/drivers/romapi/fsl_romapi.h#L347-L348 and Claude reference a padSettingOverride bit on bit 5 and a dataSwap bit on bit 7 in the controllerMiscOption, but I am not sure if the LLM is heavily hallucinating this information. When generating the FCB using the Secure Provisioning tool and converting it into a C-struct using this tool https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs-Knowledge/i-MX-RT-FLEXSPI-booting-guide/ta-p/1669262 I do not get bit 5 or 7 set so I think the LLM is wrong, but the isDataSwapped is set and is referenced as reserved0[0] in the FCB normally. I can not find a template for the MX25UM51245G in the secure provisioning tool, only the MX25U51245G (which is a Quad flash), the MX25UM51345G and the MX25UMxxx45G. But any config Octal DDR config that I have tried have not worked to boot. Interestingly often the MCU goes automatically into ISP mode after certain configuration despite BT_FUSE_SEL = 1 and having pins BOOTMODE0/1 = 0. This has not been consistent and I am not sure what configuration causes this. Does the MCU go into ISP mode after failing to read the flash or something? Thank you BR Re: Flash configuration confusion RT1176 Octal DDR Hello @SimonHugr, I apologies there is not a template to MX25UM51245G, only are available the MX25U51245G and MX25UM51345G. Based on your description, it seems that communication with the flash device is working correctly using your current Boot Memory Configuration settings. When you click "Convert to Complete FCB", the tool programs the configuration into the flash and then reads it back using the parameters you specified, as described below: If any of the selected settings are not supported by the flash device, the tool should report an error similar to the following: To further verify that the LUT generated using the FCB converter from the community post is functioning correctly, could you please test it with the flexspi_nor_polling_transfer_cm7 SDK example while running the application from internal RAM? Please let me know if you have questions about the example. In addition, could you provide me a few more details about the application you are trying to boot? -Is an SDK example or if your own application? -Which IDE you are using? -Is your application performing XIP or NON-XIP? -Are you accessing the flash at any point other than during the boot process? Regarding to entering in ISP mode, could you please make sure that the boot pins on your custom board followed the recommendations mentioned in the chapter 5 "Boot, reset, and miscellaneous" of the Hardware Development Guide for the MIMXRT1160/1170? This to avoid any hardware issue regarding the boot pins.   Answering your question, you can enter in ISP mode if is not available a valid image, as shown the figure 10-1 "boot flow" of the RM: BR Habib 
View full article
eMIOS DMA要求マッピングに関する説明 こんにちは、チームの皆さん、 現在、LiPSセンサのDMAモードではeMIOS1_CH13を使っています。この構成はDMAチャネル0とDMAMUX0を使用します。 S32K3xx DMAMUXマッピングExcelをレビューしていると、eMIOS1ではDMA要求0、1、9、10のみが記載されていることに気づきましたDMAMUX0。しかし、私のアプリケーションはeMIOS1_CH13を使うように設定されています。 以下の点を明確にしていただけますか? どのDMA要求ソースを使うべきかeMIOS1_CH13? eMIOS1_CH13 DMAトリガーをサポートしていますか?それともDMAはDMAリクエスト0、1、9、10に対応するeMIOSチャネルに限定されているのでしょうか? ご支援ありがとうございます。 よろしくお願いいたします。 ジョツナ・サギリ Re: Clarification on eMIOS DMA Request Mapping こんにちは、 S32K3 DMAMUXマッピングによると、eMIOSはチャネル0、1、9、10、16、17、18、19に対してのみDMAリクエストソースを提供します。これらはDMA要求を生成できる唯一のeMIOSチャネルです。 eMIOS1_CH13はこれらのチャネルの一つではないため、DMAMUX内に専用のDMA要求ソースがなく、eDMA転送を直接トリガーすることはできません。DMAトリガーが必要な場合は、利用可能なDMAリクエストソースに関連するeMIOSチャネルのいずれか(0、1、9、10、16、17、18、または19)を使用してください。 BR、ペトル
View full article
LPC54113 Power API I would like to know how to use the API of the "power" function. Through the SDK, I found that this function can be directly use on certain functions. However, unlike the iap API, there is no provided entry point or instructions on how to use it. LPC541XX  Re: LPC54113 Power API Hi @jcxz  Yes, you are correct. You can refer to other SDKs that contain more detailed description for the POWER APIs. BR Alice Re: LPC54113 Power API By downloading the SDKs of other chips in the 54 series, I was able to find POWER_Type and POWER_BASE.Thank you. Re: LPC54113 Power API For my LPC54S018, I downloaded the SDK from the NXP website. It includes functions of PowerAPI, ClockAPI, and so on. For example: POWER_SetVoltageForFreq(...), etc. It also describes the entry points and prototypes for calling the API functions. I think it's similar for the LPC54113.
View full article