Multi Source Translation Content

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Multi Source Translation Content

ディスカッション

ソート順:
QSPI 1 で MGC アクセス制御を無効にするにはどうすればよいでしょうか? 私は、カスタム ドライバを使用して S32E2 評価ボードで QSPI を動作させることに取り組んでいます。EMMC からのブートから QSPI からのブートに切り替えるプロセス中であるため、JTAG を使用してコードをロードし、RAM が不足しています。評価ボードには、QSPI フラッシュが QSPI1 B に接続されています。主に SFAR などの特定のレジスタへの書き込みに問題があります。SFAR は MGC によって保護されているようなので、ビット 31 (GVLD) をクリアしてアクセス制御を無効にしたいと思います。ただし、リファレンス・マニュアルによると、MGC にアクセスできるのはバス・マスタ 0x1F のみであり、これが HSE コアです。QSPI0 のこれらのレジスタにアクセスできるバス マスターを変更できる HSE_QSPI0_DAT0 の形式で QPSI0 のバイパス メカニズムがあるようですが、QSPI1 に相当するものを見つけることができませんでした。 誰か助けてくれませんか? Re: How do you disable MGC access control on QSPI 1? こんにちは@AdamH_work 、 NXP サポートにお問い合わせいただきありがとうございます。ご質問に関してですが、おっしゃったレジスタにアクセスするための正しい方法を検索するのに少し時間が必要です。 現時点では、S32ZE RTD 2.0.1 で提供しているQspi_Ip_Example_S32Z2XX_R52またはMemAcc_Example_S32E2XX_R52サンプル プロジェクトを確認することをお勧めします。これらのプロジェクトでは RTD が使用されていますが、S32Z/E ファミリで QSPI を使用するために必要な手順を把握することができます。 よろしくお願いします。 Re: How do you disable MGC access control on QSPI 1? こんにちは@AdamH_work 、 返信が遅くなり申し訳ありません。セクション65.1.6 QuadSPI_0とセキュリティレジスタの相互作用[ページ3349、S32Z2リファレンス・マニュアル、Rev. 5、2025-01-28]、セクション121.2.1.5 QuadSPI_0データ0 (HSE_QSPI0_DAT0) [ページ6674] の表もご確認ください。表の最初の行では、HSE_QSPI0_DAT0の値に応じて、MGCレジスタにアクセスできるマスターIDを設定する方法について説明しています。 問題を解決できたかどうか教えてください Re: How do you disable MGC access control on QSPI 1? こんにちは@AdamH_work 、 混乱させてしまい申し訳ございません。さて、私が理解しているのは、元々の問題は克服されたということですが、それで正しいでしょうか? IP コマンドを送信するための最適なフローをチェックするには、サンプル プロジェクトMemAcc_Example_S32E2XX_R52を確認してください。特に、関数Qspi_Ip_StatusType Qspi_Ip_IpCommand ()と、それが静的 Qspi_Ip_StatusType Qspi_Ip_InitReset()およびQspi_Ip_StatusType Qspi_Ip_RunCommand() でどのように呼び出されるかを確認してください。 他にご質問があればお知らせください。 Re: How do you disable MGC access control on QSPI 1? 私はその部分をすでに見ていましたが、それは QuadSPI 0 のみをカバーしているようで、私はこれを QuadSPI 1 で実行しようとしています。その間に、MDAD および FRAD レジスタをプログラムしてすべてのアクセスを許可する方法を見つけ、IP コマンドを開始すると SFAR にデータが設定されるようですが、現在はビジー状態になっているため、MGC ですべてを無効にする必要はないかもしれません。 Re: How do you disable MGC access control on QSPI 1? MDAD/FRAD を設定し、LUT をプログラミングした後、IP コマンドを開始できるようになりました。フラッシュ通信の最初のステップとして、S32E288-975EVB 評価ボード上の Micron MT25QL256ABA8E12 からシリアル フラッシュ検出パラメータを読み取ろうとしています。スロット 8 に次の LUT シーケンスを設定しました。 コマンドパッド1 0x5A アドレスパッド1 24 ダミーパッド1 8 パッド1 16を読み取り 停止パッド1 0 シーケンスは開始しているようですが、その後、無限にビジーな状態に陥ってしまうようです。SFAR は 0x10000000 (設定された開始アドレス) に設定され、IPCR は 0x08000008 (スロット 8、8 バイト) に設定されます。BUFXCR レジスタは、バッファ 3 を除いてすべてサイズ 0 に設定し、バッファ 3 はすべてのマスターに設定しました (値 0x80004000)。金曜日に、オシロスコープで CS0/D0/D1 ピンを調べることができ、IP コマンドが開始されると CS がアサートされるものの、デアサートされないことが分かりました。コマンドとアドレスが送信され、その後にダミー サイクルが続き、その後 D1 がアクティブになってデータに応答するように見えます。しかし、読み取りは完了せず、ただノンストップでデータをクロックし続けているように見えます。フラッシュ チップが SFDP バッファを何度も繰り返して循環するため、D1 に繰り返しパターンが表示されます (少なくとも私はそう推測します)。 実行を一時停止すると、次の画面が表示されます。 読み取りが完了しない原因が何なのかはわかりません。QSPI 読み取りに関するデータシートのセクションを読みましたが、この動作を説明するものは見つかりませんでした。クロックを下げてみました (ビット タイミングを見ると最初は約 100 MHz のようでしたが、その後 CGM に /10 分周器を追加したところ、D1 のビット パターンが遅くなりましたが、ビジー動作は変わりませんでした)。 Re: How do you disable MGC access control on QSPI 1? こんにちは@AdamH_work 、 メモリのデータシートを見ると、SFDP (0x5A) は「通常の」操作ではなく、コントローラが通信フローを意図的に停止する必要があるようです。 これにより、読み取りが完了しない理由を説明できます。私の見るところでは、QSPI ペリフェラルは動作しており、少なくとも通信は行われているので、現時点での問題は操作の種類にある可能性があります。もっと簡単な操作を試してみませんか?例えば、私が言及した例では、 Qspi_Ip_Cfg.c の MemCfg_0_SPI3ByteAddress_paInitOperations_0 と MemCfg_0_SPI3ByteAddress_paLutOperations_0 という LUT シーケンスが見つかります。初期化操作については、 Qspi_Ip.c の Qspi_Ip_InitOperation () でどのように使用されているかを確認してください。 別の操作を実行して、異なる動作が表示されるかどうかを教えてください。 よろしくお願いします。 Re: How do you disable MGC access control on QSPI 1? 結局、問題は DLL を適切に設定していなかったことにありました。私は S32DS の例に従って DLL バイパス モードの初期化シーケンスを実行し、それをコードに再実装したところ、読み取り操作が正しく完了するようになりました。次の課題は書き込み操作ですが、この問題はCANとして解決済みとしてマークできます。
記事全体を表示
LPC5536 和 Hyperram 你好 我在 LPC5536JBD100 上配置 FLEXSPI 外设时遇到了难题;hyperram 芯片是 S27KS0642GABHV020。该系统位于自定义板上,我们已经成功地在其中集成了其他功能。 我受到 AN12239 的启发,它适用于不同的处理器,但以一种与我正在使用的芯片非常相似的芯片为例:在我看来,主要区别在于 S27KS0642 的新节点技术,它比应用程序节点中使用的 S27KS0641 更快,但时序图(因此虚拟周期)和命令是相同的。 另一个灵感来源是这篇文章 https://community.nxp.com/t5/MCX-Microcontrollers-Knowledge/MCX-N947-FlexSPI-Connecting-to-HyperRAM-Analysis-and/ta-p/1988799 这与我使用的处理器不同,但解释了配置数据结构中某些字段的含义。 我还看了示例 lpcxpresso55s36_flexspi_octal_polling_transfer 来比较 FlexSPI 配置(知道必须进行某些更改,因为它针对的是闪存设备)。 我的症状是,当我尝试读取供应商 ID 时,函数不返回 kStatus_Success(返回值为 7001)。 我检查了时钟是否已连接: CLOCK_SetClkDiv(kCLOCK_DivFlexSpiClk, 0U, true); /*!< Reset FLEXSPICLKDIV divider counter and halt it */ CLOCK_SetClkDiv(kCLOCK_DivFlexSpiClk, 2U, false); /*!< Set FLEXSPICLKDIV divider to value 2 */ CLOCK_AttachClk(kPLL0_to_FLEXSPI); /*!< Switch FLEXSPI to PLL0 */ 并通过图形用户界面配置了引脚 周波的配置方式为 int config_hr(void) { flexspi_config_t config; uint32_t tempCustomLUT[ARRAY_SIZE(customLUT)] = {0U}; /* Copy LUT information from flash region into RAM region, because flash will be reset and back to single mode; In lately time, LUT table assignment maybe failed after flash reset due to LUT read entry is application's required mode(such as octal DDR mode) and flash is being in single SDR mode, they don't matched. */ memcpy(tempCustomLUT, customLUT, sizeof(tempCustomLUT)); /* Get FLEXSPI default settings and configure the flexspi. */ FLEXSPI_GetDefaultConfig(&config); /* Init FLEXSPI. */ config.rxSampleClock = kFLEXSPI_ReadSampleClkExternalInputFromDqsPad;//kFLEXSPI_ReadSampleClkLoopbackFromDqsPad;//kFLEXSPI_ReadSampleClkExternalInputFromDqsPad; //config.enableSckBDiffOpt = true; //config.enableCombination = true; config.ahbConfig.enableAHBPrefetch = true; config.ahbConfig.enableAHBBufferable = true; config.ahbConfig.enableAHBCachable = true; // config.enableDoze = false; FLEXSPI_Init(EXAMPLE_FLEXSPI, &config); /* Configure RAM settings according to serial RAM feature. */ FLEXSPI_SetFlashConfig(EXAMPLE_FLEXSPI, &deviceconfig, kFLEXSPI_PortA1); /* Update LUT table. */ FLEXSPI_UpdateLUT(EXAMPLE_FLEXSPI, 0, tempCustomLUT, ARRAY_SIZE(customLUT)); /* Do software reset. */ FLEXSPI_SoftwareReset(EXAMPLE_FLEXSPI); return 0; } 我检查过了,即使在读取供应商 ID 的函数中,我们使用的也是 A1 端口 status_t flexspi_hyper_ram_get_id(FLEXSPI_Type *base, uint32_t *vendorId) { flexspi_transfer_t flashXfer; status_t status; uint32_t id; /* Write data */ flashXfer.deviceAddress = 0x0U; flashXfer.port = kFLEXSPI_PortA1; flashXfer.cmdType = kFLEXSPI_Read; flashXfer.SeqNumber = 1; flashXfer.seqIndex = HYPERRAM_CMD_LUT_SEQ_IDX_READREG; flashXfer.data = &id; flashXfer.dataSize = 4; status = FLEXSPI_TransferBlocking(base, &flashXfer); *vendorId = id & 0xffffU; return status; } flexspi_device_config_t 结构的初始化过程如下 flexspi_device_config_t deviceconfig = { .flexspiRootClk = 75000000, /* 75MHZ SPI serial clock */ .isSck2Enabled = false, .flashSize = FLASH_SIZE, .CSIntervalUnit = kFLEXSPI_CsIntervalUnit1SckCycle, .CSInterval = 2, .CSHoldTime = 1, .CSSetupTime = 1, .dataValidTime = 1, .columnspace = 3, .enableWordAddress = true, .AWRSeqIndex = HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA, .AWRSeqNumber = 1, .ARDSeqIndex =HYPERRAM_CMD_LUT_SEQ_IDX_READDATA, .ARDSeqNumber = 0, .AHBWriteWaitUnit = kFLEXSPI_AhbWriteWaitUnit2AhbCycle, .AHBWriteWaitInterval = 0, .enableWriteMask = true, }; LUT 值为 #define LATENCY (0x04) uint32_t customLUT[20] = { /* Read Data */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0,kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, LATENCY), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Write Data */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20,kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, LATENCY), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Read Register */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xE0,kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, LATENCY), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Write Register */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x60,kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, LATENCY), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), }; 这对我来说很有感知,因为我总共使用了 48 个地址位,8 个键盘上有 DDR 模式,命令是正确的。 我是不是漏掉了什么? Re: LPC5536 and Hyperram 你好 谢谢。 不,我配置了更多引脚,但截图拍得很差:我猜有 8 个数据引脚,一个 RWDS、一个 CS_n 和一对差分时钟引脚。 Re: LPC5536 and Hyperram 你好@img_gabrigob 关于引脚配置 您是否只配置了 5 个数据引脚? S27KS0642GABHV020 需要 8 个数据引脚。 BR 哈利 Re: LPC5536 and Hyperram 你好 谢谢。我给你回复了,但我想我做错了什么(第一次使用这个社区),回复直接转到了我的原帖。 Re: LPC5536 and Hyperram 你好@img_gabrigob 首先,我认为您可以检查硬件。 探测物理信号(示波器): 确认 CK 按您预期的速率切换,交易的 CS# 脉冲,当您触发信号 Read-ID 序列时,DQ [7:0]/RWDS 会显示活动。 并将 FlexSPI 串行时钟降低到较低的安全频率(例如20-25 MHz),同时进行调试。 那么我认为您可以参考这个 LUT。 /* Read Register */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xE0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG + 1] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x06), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Write Register */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x60, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG + 1] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x06), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG + 2] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), RT1064 HyperRAM 支持 S27KS0641 和 S27KS0642 - NXP Community BR 哈利 Re: LPC5536 and Hyperram 你好,@Harry_Zhang、 谢谢您! 我试着查看我的 LUT 与您链接的另一篇文章中用户使用的 LUT 之间是否存在任何差异,但即使在尝试调整延迟等待状态下的假人数量后,我还是遇到了同样的问题。 我不知道我是否在安装 IDE 时配置错误,但在 LPC5536 上,我似乎无法通过 flexspi_config_t 数据结构设置差分时钟(字段 enableSckBDiffOpt 位于禁用的 ifdef 中)。 我们在董事会采取了一些措施。CSN 和 CLK 信号处于激活状态。 我们使用两种压摆率(标准和高)来捕获时钟 时钟频率比我预想的要慢(我想我把它设置为 75MHz,这里是 75/2,而不是 150/2)。 数据和 RWDS 信号稳定在 0V。我们只是在数据信号上看到一个小故障(5 毫微秒)。 我还附上了从图形用户界面输出的 pin_mux 和 clock_config 文件。 请问您还有其他建议吗? 顺祝商祺! Re: LPC5536 and Hyperram 您好! 感谢您的回复 我再次检查了电路图,...我意识到 RESN 不受 FLEXspi 控制,因此我更改了软件,使其上升。 现在控制器可以工作了,我们还将 MCU 上的引脚配置为快速转换速率选项。 例如,这是 RWDS 与 CLK 的对比。 因此,问题在于 LUT 中的延迟值(使用您的链接进行更正)和 RESET。 我还有一些不明白的地方,即使这对这个项目并不重要,但可能对未来的应用有用:从时钟树中的配置来看,我期望 CLK 频率为 75MHz,但我测量的频率为 37.5MHz。 还有其他我错过的时钟分频器吗? 谢谢! 顺祝商祺! 加布里埃尔 Re: LPC5536 and Hyperram 你好@img_gabrigob 您能分享与 HyperRAM 的连接原理图吗? BR 哈利 Re: LPC5536 and Hyperram 你好@img_gabrigob 根据 LPC55S36 数据表。 时钟频率最高为 50M(DDR 模式)。 /* Flexspi frequency 150MHz / 3 = 50MHz */ CLOCK_SetClkDiv(kCLOCK_DivFlexSpiClk, 0U, true); /*!< Reset FLEXSPICLKDIV divider counter and halt it */ CLOCK_SetClkDiv(kCLOCK_DivFlexSpiClk, 3U, false); /*!< Set FLEXSPICLKDIV divider to value 3 */ CLOCK_AttachClk(kPLL0_to_FLEXSPI); /*!< Switch FLEXSPI to PLL0 */ BR 哈利
記事全体を表示
Example MPC5748G FlexCAN RXFIFO SDK PA RTM200 S32DS.Power.2017.R1 ******************************************************************************** Detailed Description: Configures the FlexCAN 0 to transmit and receive a CAN message  Baudrate to is set to 500kbps. In this config, RXFIFO is used to receive a messages. 16 filter elements are defined in the RXFIFO table. Both standard and extended IDs are used. MB10 is moreover used to receive a message with given standard ID. MB11 is used to transmit a message upon button press. The callback function is installed as well and is it called each time message is received in MB10, RXFIFO or message is transmitted. NOTE! Termination resistor (120Ohm) have to be placed on transceivers output             12V power supply must be connected. ------------------------------------------------------------------------------ Test HW: DEVKIT-MPC5748G Maskset: 0N78S Target : FLASH Fsys: 160 MHz PLL ******************************************************************************** General
記事全体を表示
关于Keil 无法正确下载程序问题的总结   当我们在使用Keil 时,经常会遇到无法下载程序的问题,以下对两种常见的情况进行总结:    1. 在我们需要将某工程代码移植到同系列其他型号器件上使用时,如果只是更改了器件型号,这时可能会导致无法正确下载。需要注意的是不仅要在Device中更换型号,还需要在Flash Download栏中选择正确的flash loader 并且设置正确的RAM起始地址。   举个例子:假设我们需要将FRDM_KL26的Sample code中的hello_world工程移植到256K flash的KL26上使用。打开FRDM_KL26的Sample code中hello_world工程,我们可以看到Device中器件为MKL26Z128xxx4,        在Target中可以看到Flash和RAM的起始地址和大小信息。          如果使用Jlink调试接口,选择J-LINK/J-TRACE Cortex  ,之后选择Setting,可以看到flash loader的相关信息。         将此工程移植到到256K flash的器件上,我们需要做的事情是:      在device中进行修改,选择MKL26Z256xxx4               在Target中可以看到这时flash和RAM的起始地址和大小信息已经自动做了更改。不需要再手动修改了。         但是在Flash Download中的设置还是之前的设置,并没有改变。           所以这时是无法正确下载程序的,需要我们手动去修改这里的两处配置。     一是 RAM for Algorithm中的Start应该设置为0x1FFFE000(从Target栏中可以获取该值),Size不用更改。      二是Program Algorithm 删除掉128k的flash loader ,添加256K的flash loader。       2.第二种可能遇到的情况是:本来可以正常下载的程序当复制到另外一台电脑时就无法正常下载了。遇到这种现象时,需要检查一下Flash Download中的相关配置是否正确,很可能会遇到 Program Algorithm中flashloder为空的情况,发生这种情况的原因可能是两个电脑的Keil版本不同,所以flash loader所在路径就会不同,这样flash loader就会变成空白,这时需要自己手动添加一下即可。
記事全体を表示
ST7701 drivers Hello I'm trying to communicate with a ST7701 display controller. Are some examples available? Can anyone share if possible? I'm using an i.MX RT1170 board. In the SDK examples I found the drivers for the HX8394, RM68191 and RM68200 display controllers. I would like to find something similar for ST7701. Can anyone help me please? Thank you and kind regards, Francesco Solito Re: ST7701 drivers Hi @SolitoFrancesco, At the moment, we don't have any driver support in our SDKs for the ST7701 display controller. The integration with this controller would have to be done manually. It is important to adjust the resolution values, synchronization signals and clock frequencies of the LCDIF module to allow compatibility with the display controller. If using the EVK, you can use the SDK drivers and adjust the values of the following functions: BOARD_InitLcdifClock() BOARD_InitMipiDsiClock() BOARD_SetMipiDsiConfig() These functions along with the macros for the synchronization values and are all referenced on the "display_support.c" file, which will be the main file to focus on when adjusting the support for your display controller.   Also make sure to look into the following application note, as it goes into a lot more detail about how the setup for an LCD display works and other useful considerations: i.MX RT eLCDIF RGB Mode Use Case (nxp.com)    BR, Edwin. Re: ST7701 drivers Good morning I modified the files you mentioned, following the indications that I received from the display manufacturer and from the driver manufacturer. I'm able to write and read into the driver registers through MIPI. I can see the differential MIPI waveforms with oscilloscope (also after the "configuration" phase), but I'm still not able to see anything on the display. I'm using the demo example from NXP SDK called "mipi_dsi_compiance_test". Can you please try to help more? Thank you and kind regards, Francesco Solito Re: ST7701 drivers Hi @SolitoFrancesco, Have you been able to debug your code while running? Do you see any error message being printed? And what data patterns do you see on the data line? Do these patterns coincide with the expected ones described on the readme.md file? BR, Edwin. Re: ST7701 drivers Hello, I have the same situation (same driver and resolution, and the base is a test example that worked on the devboard). The controller is configured, and I can also read the statuses (without any errors), and the data on the DSI lines is present, but the screen displays nothing. Changing the videoMode in dsi_dpi_config from kDSI_DpiBurst to other modes also has no effect. It looks like the screen isn't accepting the video stream?  Re: ST7701 drivers Hello. The example project works correctly with the display DEMO_PANEL_RK055MHD091. Then I switched to the panel that I have to use in my final application. It has different resolution (480x800) and so I adapted the defines. Then I changed the drivers (fsl .h and .c files) and I'm able to communicate with my display. I can write and readback the registers. But after the configuration of the display, when the example project starts sending the image buffer, I can see the MIPI waveforms on the oscilloscope, but nothing on the display. Consider that the display is not broken, because I tried to turn on all the pixels through the dedicated command and I can see the screen completely white. What I don't understand is if the problem is in the configuration of the display or in something else that I have to adapt in the example project. I contacted the display manufacturer and the controller manufacturer, but I need as much help as possible from all sides. Is it possible to get the fsl drivers for the controller that is mounted in my display? It is a Sitronix ST7701. Please let me know. Thank you and kind regards, Francesco Re: ST7701 drivers Hello Rino I'm making a comparison between my settings and yours (at the end I'll upload here). In the meanwhile, what I noticed is that I'm using a ST7701, instead you are probably using a ST7701S (with S suffix). I think they are similar but I'm not sure. The thing that I noticed is that the display now works even if I don't make any initialization at all. It starts "slowly" and with low britghteness, but it works. Then, if I only sends the settings from 0xE0 to 0xEF (that aren't documented in the ST7701 datasheet), the display start up very fast and with the correct colors. It seems that all the other settings are not necessary (it sounds strange). Let's keep in touch. I'll share the comparison when I'm finished. Thank you very much again. Kind regards, Francesco Re: ST7701 drivers Hello Francesco,  I managed to get the display working. In the DisplayTFT_SetMipiDsiConfig function, add the line: dsiConfig.enableNonContinuousHsClk = true; for example, after these lines: DSI_GetDefaultConfig(&dsiConfig); dsiConfig.numLanes = DISPLAY_MIPI_DSI_LANE_NUM; dsiConfig.autoInsertEoTp = true; Assuming you have the display IC configured correctly (if necessary, I can share the configuration for my screen) and the display clock (my settings are around 26MHz). Best regards, Chris Re: ST7701 drivers Hello Rino Thank you very much for your suggestion. It seems to work also in my application. Great. I probably need to better setup something, but now I can see the image on the screen. Please if possible share your configuration, so I can compare with mine to better refine it. If I see something different I'll tell you here. Thank you again. Where did you came up the the enableNonContinuousHsClk setting? Kind regards, Francesco Re: ST7701 drivers Hello,  the file was created based on other drivers in the SDK. You can still change the delays to shorter ones. This morning, I confirmed the configuration sequence and made a few changes as recommended by the display manufacturer, but there was no further improvement, so I started taking a closer look at the DSI configuration itself. I know the clocks were fine, and so was the video mode (burst mode), so the only options left were those for the DSI itself. Familiarizing myself with (and other parts in docs): https://docs.nxp.com/bundle/AN13573/page/topics/continuous_vs_non-continuous_clock.html BR, Chris  Re: ST7701 drivers Hello Rino As promised, please find in attachment the settings comparison between yours and mine. I didn't go in details, but if me or you will find something interesting in the differences, please let's continue to write here. Kind regards, Francesco Re: ST7701 drivers Hello Francesco, Sorry for the delay. I looked through your comparison and noticed a lot of differences, partly due to the screens themselves (we have a glass/touch/screen sandwich, and there was a configuration fix for that – or at least that's what the supplier explained 🙂 ). Some settings, like power control, aren't required for startup, but for quality improvement (contrast/gamma settings). And what's funny is that the whole "Sunlight Readable Enhancement" thing, I think they called it, is required, regardless of whether we're running it or not. Based on this data, it automatically sets optimal parameters. If they're incorrect or missing (default values), it takes a while to automatically set them -> hence the slow startup, as you've noticed. The documentation itself can be quite irritating, many of the commands are undocumented, and without them, it's often impossible to fully start the screen. This isn't just with this model, I've encountered this with several other Sitronix models. Kind regards, Chris
記事全体を表示
imx8mp ドキュメント こんにちは、 以下のリビジョン番号の文書が欲しいです IMX8MPIEC Rev.2、2023年2月データシート IMX8MPRM Rev.1、2023年6月版リファレンスマニュアル よろしくお願いいたします ラビンドラ Re: imx8mp docs こんにちは、 あなたが探している i.MX 8M Plus ドキュメントの最新リビジョンは次の通りであることを確認できます: 1. IMX8MPIEC Rev.2、02/2023 データシート - これはデータシートの現在のバージョンです。 2. IMX8MPRM Rev.1、06/2023 リファレンス マニュアル - これはリファレンス マニュアルの現在のバージョンです。 両方のドキュメントは、NXP の Web サイトからダウンロードできます。以下の場所からアクセスできます。 - データシート: https://www.nxp.com/webapp/Download?colCode=IMX8MPIEC - リファレンス・マニュアル: https://www.nxp.com/webapp/Download?colCode=IMX8MPRM これらのドキュメントには、i.MX 8M Plus プロセッサの最新の仕様と情報が記載されています。ドキュメントの改訂版間で仕様が異なる場合は、常に最新の改訂版が古いバージョンに優先します。   よろしくお願いします。    
記事全体を表示
Separating Control Plane and Data Plane between GPP and AIOP on LS2085 This document introduces a method to separate control plane and data plane between GPP(ARM) and AIOP based on different L4 protocols implemented in the AIOP software. So far, in the current MC version, this scenario could not be implemented from WRIOP using DPDMUX, so it is a good choice for users to separate the traffic in AIOP.   1. Basic Concept of DPAA2 Objects   2. AIOP Application to Implement Control in ARM and Data Plane in AIOP   3. Build AIOP Application Project with CodeWarrior   4. Running AIOP Application Program on LS2085ARDB QorIQ LS2 Devices
記事全体を表示
s32_LLCE S32 系列中 LLCE 的加速方法主要是通过基于软件的路由和转发实现的,这种理解是否正确?实际上,硬件只包含一个查找表,而目的地的转发则完全由软件处理? Re: s32_LLCE 你好,@yuancz 谢谢你的帖子。 1。从 S32G SOC 的角度来看,LLCE 是 SOC 上的 IP 块,LLCE 将主机 CPU 从所有接口级任务中卸下,以及对帧进行验证、身份验证以确保网络安全,它可以用于硬件加速以筛选和排定消息的优先级,因为S32 SOC上的内核不需要运行任何代码来处理此类流量,从这个角度来看,它确实是硬件加速引擎。 2. LLCE 实际上是恩智浦开发的内核、存储器、硬件加速 IP 模块和固件的组合。从 IP 块来看,软件(FW)运行在 M0+ 内核上,内核和其他硬件一起通过 FW API 实现主机所需的功能,从 LLCE 本身来看,一些操作是通过运行在 M0+ 内核上的代码完成的,这可以看作是基于软件(FW)的操作。 BR 切宁
記事全体を表示
[不正使用] 記事作成者: @jeremyzhou / ナレッジベース: imxrt@tkb / 報告者: eikewp eikewp は、 @jeremyzhou が投稿した記事 「マイクロコントローラ使用の認識モデル」を 以下の理由で報告しました。 理由:ヌードまたは性行為 詳細: CANゼニカルを注文します 安いゼニカル 土曜日配送 インターネット ジェネリックゼニカル 購入安いゼニカル60mg ロイズ薬局のゼニカル インドにおけるゼニカルの価格 次のゼニカルをどこで注文できるか ゼニカルの割引 ゼニカルを購入したい 一般ゼニカル錠 CANゼニカルを注文します 注文ゼニカル 安いゼニカル錠 ゼニカルはどこで買える? ゼニカルアメックスの迅速な配達 ゼニカルの割引 ゼニカルイギリスでオンライン購入 ゼニカルを購入したい ジェネリックゼニカル ゼニカルを注文する ゼニカルを注文したい ゼニカルイギリスでオンライン購入 できるゼニカルを購入しました ゼニカルを次に注文する場所 ゼニカルの購入方法 ゼニカル肥満 スクリプトなし バジルドン 一般ゼニカル錠 一般ゼニカル薬の割引 ゼニカルヴァイタイジェネリック フィナステリド ゼニカルのオンライン購入情報 ジェネリックゼニカル薬の割引 購入安いゼニカル60mg ゼニカルブランド 安い kchge ジェネリックゼニカル錠 安いゼニカル 英国 オンライン ゼニカルブランド 安い kchge 欲しいゼニカルを注文する ジェネリックゼニカル錠 ゼニカル オンライン購入 5bdvi ロイズ薬局のゼニカル 記事リンク: https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs-Knowledge/Recognition-model-for-microcontroller-use/ta-p/1103364 記事の著者: @jeremyzhou |メールアドレス 報告者: eikewp |メールレポーター 報告された記事には 8 件のコメントがあります。
記事全体を表示
S32K148锁死 S32K148 MCU用J-LINK错刷Flash,再用J-LINK链接发生如下错误,JLINK unsecured已没用,怎么解决? Connecting ... - Connecting via USB to probe/ programmer device 0 - Probe/ Programmer firmware: J-Link V9 compiled Dec 13 2022 11:14:50 - Probe/ Programmer S/N: 25994751 - Device "S32K148" selected. - Target interface speed: 50 kHz (Fixed) - VTarget = 3.301V - ConfigTargetSettings() start - ConfigTargetSettings() end - Took 305us - InitTarget() start - SWD selected. Executing JTAG -> SWD switching sequence. - Protection bytes in flash at addr. 0x400 - 0x40F indicate that readout protection is set. For debugger connection the device needs to be unsecured. Note: Unsecuring will trigger a mass erase of the internal flash. - Executing default behavior previously saved in the registry. - Device will be unsecured now. - Timeout while unsecuring device. Erase never stops. - InitTarget() end - Took 2.17s - Found SW-DP with ID 0x2BA01477 - DPv0 detected - CoreSight SoC-400 or earlier - Scanning AP map to find all available APs - AP[2]: Stopped AP scan as end of AP map has been reached - AP[0]: AHB-AP (IDR: 0x24770011, ADDR: 0x00000000) - AP[1]: JTAG-AP (IDR: 0x001C0000, ADDR: 0x01000000) - Iterating through AP map to find AHB-AP to use - AP[0]: Skipped. Could not read CPUID register - AP[1]: Skipped. Not an AHB-AP - Attach to CPU failed. Executing connect under reset. Re: S32K148锁死 Hi@dongkuili 首先不见得保证能恢复,因为加密段被你写入了错误持续值,可能并不支持mass erase擦除 可以阅读该文档6. S32K1xx系列MCU芯片锁死(lockup)现象 https://mp.weixin.qq.com/s?__biz=MzI0MDk0ODcxMw==&mid=2247485716&idx=1&sn=979631aa2385a4e3c7651ee75ee252b4&chksm=e9124d92de65c484f1cfec7de451958cfd5cf818c46a4f71a7d3dd8a522af229c5a18aad58ff&scene=21#wechat_redirect Re: S32K148锁死 Hi@dongkuili 这和你使用什么软件没关系,按照文章中说的,直接去测试reset管脚的波形来判断是否可能被恢复,不能的话就不要再浪费你的时间了。 Re: S32K148锁死 谢谢回复 仔细看了链接文档和芯片手册,多次尝试还是无法通过mass erase恢复,想用S32FlashTool_v2.3.4,但不支持S32K148,有支持S32K148的S32FlashTool吗?
記事全体を表示
基于 RT1170 通过 USB DFU 更新固件 基于 RT1170 通过 USB DFU 更新固件 基于 RT1170 通过 USB DFU 更新固件 开发环境 准备dfu-util 准备dfu-util 的步骤 运行演示 使用 SDK 中的预建固件 使用自定义固件 无需借助外部编程工具即可在现场执行微控制器 (MCU) 固件升级是一项必要的功能。 对于支持 USB 设备控制器的 MCU,USB 设备固件更新 (DFU) 类提供了一种解决方案。USB_DFU 引导加载程序只需要一台 PC 和一根 USB 电缆。 RT系列也提供了此功能。以 RT1170 为例,SDK 中 USB 类下提供了一个 DFU 项目。该项目基于 MCUXpresso IDE。通过运行 SDK 中的 dev_dfu_freertos_cm7 项目,RT1170 将被枚举为 dfu 设备,并且在通过另一根 USB 电缆将其连接到主机 PC 后,用户可以使用“dfu-util”实用程序将固件下载到该设备。 开发环境 软件环境: SDK版本:2.15.000 IDE: MCUXpresso IDE 演示项目: dev_dfu_freertos_cm7 主机软件: dfu-util 下载链接: dfu-util 对于 Windows 64 位:下载dfu-util-0.9-win64.zip   硬件环境: 主板:RT1170-EVKB   Preparing dfu-util dfu-util用于将固件下载到 DFU 设备,但它不会将 CRC32 添加到固件中。由于 SDK 中的 DFU demo 会验证 CRC32,以确保写入 Flash 的固件没有位错误,因此需要修改dfu-util源代码。 准备dfu-util 的步骤 安装依赖项 sudo apt-get build-dep libusb-1.0-0 dfu-util sudo apt-get 安装 gcc-mingw-w64-x86-64 下载dfu-util和libusb源代码 git克隆https://git.code.sf.net/p/dfu-util/dfu-util git 克隆https://github.com/libusb/libusb.git 修改源代码中的 CRC 代码 修改dfu_file.c中的dfu_store_file函数,将CRC32添加到Firmware后缀。 /* 如果有后缀,则写入 */ 如果(写入后缀){ uint8_t dfusuffix[DFU_SUFFIX_LENGTH]; dfusuffix[0] = 文件->bcdDevice & 0xff; dfusuffix[1] = 文件->bcdDevice >> 8; dfusuffix[2] = 文件->idProduct & 0xff; dfusuffix[3] = 文件->idProduct >> 8; dfusuffix[4] = 文件->idVendor & 0xff; dfusuffix[5] = 文件->idVendor >> 8; dfusuffix[6] = 文件->bcdDFU & 0xff; dfusuffix[7] = 文件->bcdDFU >> 8; dfusuffix[8] = 'U'; dfusuffix[9] = 'F'; dfusuffix[10] = 'D'; dfusuffix[11] = DFU_SUFFIX_LENGTH; /*crc = dfu_file_write_crc(f, crc, dfusuffix, DFU_SUFFIX_LENGTH - 4);*/ dfusuffix[12] = crc; dfusuffix[13] = crc >> 8; dfusuffix[14] = crc >> 16; dfusuffix[15] = crc >> 24; crc = dfu_file_write_crc(f,crc,dfusuffix + 12, 4); }   构建libusb mkdir -p构建 cd libusb-1.0.24 ./autogen.sh PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig./configure --host=x86_64-w64-mingw32 --prefix=$PWD/../build 制作 进行安装 光盘 .. Build dfu-util cd dfu-util-0.11 ./autogen.sh PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig./configure --host=x86_64-w64-mingw32 --prefix=$PWD/../build 制作 进行安装 光盘 .. 完成这些步骤后,新构建的工具将位于/build/bin文件夹中。 打开 Windows 的 cmd。使用新的dfu-suffix.exe运行以下命令,CRC32 将添加到固件中。 dfu-suffix.1 exe -a你的固件 运行演示 使用 SDK 中的预建固件 SDK 提供了一个预编译的固件二进制文件 ( dev_hid_mouse_bm.bin ),其中已包含 CRC32 校验码。请按以下步骤操作: 使用 MCUXpresso IDE 将dev_dfu_freertos_cm7演示刷入 EVKB 板。   通过 USB 将开发板连接到主机 PC。 在 USB 设备描述符中,我们找到供应商 ID 和产品 ID:   运行以下命令下载固件: dfu-util.exe -d <你的视频:进程号> -D <你的固件> 下载后,DFU 演示将验证 CRC32 并在 RAM 中执行新的固件。该设备将被枚举为 USB 鼠标,在屏幕上以矩形图案移动。 使用自定义固件 使用自定义固件时,请确保图像加载到正确的地址(例如,0x10000)。如果偏移量不正确,即使 CRC 校验通过,DFU 演示也将无法加载固件。 构建和加载自定义固件: 将hello_world_cm7项目导入 MCUXpresso IDE。 在托管链接器脚本设置中,启用“将应用程序链接到 RAM”。 调整内存设置以匹配 DFU 项目要求,确保 ITCM 是第一个 RAM 区域。 构建项目并生成二进制文件。 使用修改后的dfu-util工具将 CRC32 附加到二进制文件并将其下载到开发板。验证自定义固件是否正确执行。 CRC 添加: 新固件加载成功: 中文版及演示版请见此链接: https://www.nxpic.org.cn/module/forum/forum.php?mod=viewthread&tid=803149&fromuid=3253523 动手实践培训
記事全体を表示
寻找兼容的压力传感器 大家好 我正在寻找一个兼容的压力传感器来替换原来的 125pc05d1。 125pc05d1 是原装压力传感器,属于压差型。 我附上了原压力传感器的外形图和技术规格。 125pc05d1 的灵敏度约等于 Δmv/Δp ≈ 70mv/5psi ≈ 14,由于后续放大电路复杂,我不知道如何调整。如果有与之兼容的具有相同灵敏度的新型压力传感器,那就再好不过了。 有关更详细的测试,请参阅下面的链接。 https://www.eevblog.com/forum/repair/replacing-the-pressure-sensor-requires-assistance/ 感谢您的帮助。 Re: Seeking a compatible pressure sensor 你好 请考虑使用 MPX10DP,因为它在外形和功能上都最接近原装 125pc05d1。如果您需要更宽的压力范围或更高的输出电压以获得更高的分辨率,请考虑 MPX5010DP,尽管它需要额外的信号调节。 BRs, Tomas Re: Seeking a compatible pressure sensor 谢谢!
記事全体を表示
i.MX6ULLのセカンダリブートがリセット後にハングする 私はeMMCを搭載したi.MX6ULLを持っており、AN13872ガイドのセクション13.2.2に従ってセカンダリブートをテストしようとしています。「セカンダリ ブートを使用したブート イメージの作成」 。 次のコマンドを使用してヘッダーを作成しました。 dd if=/dev/zero of=./header.bin bs=1K count=1 次に、 hexeditツールを使用して、オフセット0x208を0x00112233に変更し、 0x20Cを0に設定して、元の U-Boot がテスト目的でセカンダリ ブート イメージとして起動するSOにしました。 これは 16 進ダンプです: $ hexdump -C header.bin 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000200 00 00 00 00 00 00 00 00 33 22 11 00 00 00 00 00 |........3"......| 00000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000400 次に、ヘッダーをシステムの U-Boot と連結しました。 cat header.bin u-boot-tagged.imx > u-boot-primary-secondary.imx 結果のファイルを SCP 経由でボードにコピーしました。 最後に、i.MX6 内部から、次のコマンドを使用してイメージを eMMC にフラッシュしました。 root@imx6ull:~# dd if=./u-boot-primary-secondary.imx of=/dev/mmcblk1 bs=512 skip=1 seek=1 結果の 16 進ダンプは次のとおりです。 root@imx6ull:~# hexdump -C /dev/mmcblk1 -n 1088 00000000 fa b8 00 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |................| 00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..| 00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u| 00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..| 00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001b0 00 00 00 00 00 00 00 00 2a 4a 6c 07 00 00 80 00 |........*Jl.....| 000001c0 01 40 0c 03 42 9f 00 20 00 00 e2 af 00 00 00 00 |.@..B.. ........| 000001d0 41 c0 83 03 e0 ff 00 e0 00 00 3e 70 1a 00 00 00 |A.........>p....| 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200 00 00 00 00 00 00 00 00 33 22 11 00 00 00 00 00 |........3"......| 00000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000400 d1 00 20 40 00 00 80 87 00 00 00 00 2c f4 7f 87 |.. @........,...| 00000410 20 f4 7f 87 00 f4 7f 87 00 00 00 00 00 00 00 00 | ...............| 00000420 00 f0 7f 87 00 f0 09 00 00 00 00 00 d2 01 f0 40 |...............@| 00000430 cc 01 ec 04 02 0c 40 04 00 00 00 00 02 0c 40 68 |......@.......@h| 00000440 13.2.3節で説明したように、U-Bootからのセカンダリブートをテストするコマンドを実行すると、次のような結果が出ます: Hit any key to stop autoboot: 0 => mw.l 20D8044 40000000 => md.l 20D8044 1 020d8044: 40000000 ...@ => reset resetting ... しかし、この時点でシステムはハングします。 同じ U-Boot を 2 回連結し、それに応じてオフセット0x20Cの値を調整してみましたが、結果は変わりませんでした。これはこのテストの結果の 16 進ダンプです。 user@machine:~/linux-maker$ hexdump -C swu_singlecopy_rescue_imx6ull_emmc_20251128.sdcard -n 1072 00000000 fa b8 00 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |................| 00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..| 00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u| 00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..| 00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001b0 00 00 00 00 00 00 00 00 4e 58 99 cc 00 00 00 03 |........NX......| 000001c0 e0 ff 0c 03 e0 ff 00 20 03 00 00 c0 03 00 00 03 |....... ........| 000001d0 e0 ff 83 03 e0 ff 00 e0 06 00 00 40 1f 00 00 00 |...........@....| 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200 00 00 00 00 00 00 00 00 33 22 11 00 00 20 00 00 |........3"... ..| 00000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000400 d1 00 20 40 00 00 80 87 00 00 00 00 2c f4 7f 87 |.. @........,...| 00000410 20 f4 7f 87 00 f4 7f 87 00 00 00 00 00 00 00 00 | ...............| 00000420 00 f0 7f 87 00 f0 09 00 00 00 00 00 d2 01 e8 40 |...............@| 00000430 user@machine:~/linux-maker$ hexdump -C swu_singlecopy_rescue_imx6ull_emmc_20251128.sdcard -n 1072 -s 0x400000 00400000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00400400 d1 00 20 40 00 00 80 87 00 00 00 00 2c f4 7f 87 |.. @........,...| 00400410 20 f4 7f 87 00 f4 7f 87 00 00 00 00 00 00 00 00 | ...............| 00400420 00 f0 7f 87 00 f0 09 00 00 00 00 00 d2 01 e8 40 |...............@| 00400430 以下の投稿を検索して読みました。 https://community.nxp.com/t5/i-MX-Processors/iMX6SX-Redundant-Boot/mp/715959 https://community.nxp.com/t5/i-MX-Security/Secondary-Redundant-boot-in-i-MX-6-7-8M-Family-of-Applica... https://community.nxp.com/t5/i-MX-Security/BootROM-HABv4-Redundant-boot-support-is-not-triggered-whe... しかし、解決策は見つかりませんでした。 何が間違っているのでしょうか? Re: Secondary Boot on i.MX6ULL Hangs After Reset さらにいくつかのテストを実行したところ、i.MX6ULL が mmcblk1boot0 をプライマリ ブート パーティションとして使用していることがわかりました。実際、このパーティションを破損させようとすると、システムは起動に失敗します。 パーティションの内容は次のとおりです。 root@imx6ull:~# hexdump -C /dev/mmcblk1boot0 -n 4096 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000400 d1 00 20 40 00 00 80 87 00 00 00 00 2c f4 7f 87 |.. @........,...| 00000410 20 f4 7f 87 00 f4 7f 87 00 00 00 00 00 00 00 00 | ...............| 00000420 00 f0 7f 87 00 f0 09 00 00 00 00 00 d2 01 e8 40 |...............@| 00000430 cc 01 e4 04 02 0c 40 68 ff ff ff ff 02 0c 40 6c |......@h......@l| 00000440 ff ff ff ff 02 0c 40 70 ff ff ff ff 02 0c 40 74 |......@p......@t| 00000450 ff ff ff ff 02 0c 40 78 ff ff ff ff 02 0c 40 7c |......@x......@|| 00000460 ff ff ff ff 02 0c 40 80 ff ff ff ff 02 0e 04 b4 |......@.........| 00000470 00 0c 00 00 02 0e 04 ac 00 00 00 00 02 0e 02 7c |...............|| 00000480 00 00 00 30 02 0e 02 50 00 00 00 30 02 0e 02 4c |...0...P...0...L| 00000490 00 00 00 30 02 0e 04 90 00 00 00 30 02 0e 02 88 |...0.......0....| この領域にセカンダリベクターテーブル (SVT) を書き込もうとすると、システムが起動しなくなります。SO、SVT はどこに記述すればよいのでしょうか? 私はいつも uuu を使用してシステムをフラッシュしてきました。特に、イメージ全体をフラッシュする必要がある場合は、次のようにします。 uuu -b emmc_all U-Boot のみを更新する必要がある場合は、次のようにします。 uuu -b emmc mmcblk1boot0 パーティションを作成して書き込むのは uuu だと思います。ブート手順の他の部分も変更されている可能性がありますか? Re: Secondary Boot on i.MX6ULL Hangs After Reset あなたの説明と投稿された画像に基づくと、eMMC ユーザー パーティションが破損していますが、システムは引き続き起動できます。これは、i.MX6ULL のセカンダリ ブートに eMMC ブート パーティション (boot1 または boot 2) を使用していることを示します。専用のブート パーティションが必要な場合は、準備したイメージをそこに書き込む必要があります。もちろん、eMMC ブート パーティションは十分な大きさである必要があります。あるいは、Linux の u-boot コマンドまたは mmc ツールを使用して、ブート パーティションをユーザー パーティションに切り替えることもできます。 こちらはセカンダリブート用のコレクションです。 https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/iMX-secondary-boot-collection/ta-p/1916915 https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/i-MX8MM-SDCARD-Secondary-Boot-Demo/ta-p/1500011で Windows と Linux の両方で実行できるスクリプトがあり、セカンダリ ブート イメージの作成に役立ちます。 試してみましたが、とても良いです。 soc_name: imx6(imx6ファミリ全体)、imx8mq、imx8mm Re: Secondary Boot on i.MX6ULL Hangs After Reset 奇妙なことに気付きました。次のコマンドでプライマリ イメージの IVT を破損させようとすると、 sudo dd if=/dev/zero of=/dev/mmcblk1 bs=1 seek=1024 count=32 && sync‍‍‍‍‍‍‍‍‍‍ セカンダリ U-Boot がなくてもシステムは起動します。 私が持っている mmc パーティションは次のとおりです。 root@imx6ull:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS mmcblk1 179:0 0 58.2G 0 disk |-mmcblk1p1 179:1 0 120M 0 part /boot `-mmcblk1p2 179:2 0 1000M 0 part / mmcblk1boot0 179:8 0 4M 1 disk mmcblk1boot1 179:16 0 4M 1 disk U-Boot バイナリも mmcblk1boot0 に書き込まれているようです。 システムが実際に mmcblk1boot0 に保存されている U-Boot を使用していて、そこに SIT とセカンダリ U-Boot を書き込む必要がある可能性はありますか? @Bio_TICFSL 、この点について明確にしていただけますか? Re: Secondary Boot on i.MX6ULL Hangs After Reset 16 進ダンプを見ると、オフセット 0x208 を 0x00112233 に変更し、0x20C を 0 に設定していることがわかりますが、firstSectorNumber フィールドが正しくない可能性があります。このフィールドは、セカンダリ イメージが始まるセクターを指す必要があります。 このテストでは、手順全体を検証するために、プライマリ U-Boot をセカンダリ U-Boot として使用しようとしていたため、 firstSectorNumber を0 に設定しました。 私の投稿の最後の 16 進ダンプでは、代わりに 2 つの異なる U-Boot イメージ (プライマリとセカンダリ) を使用して、より標準的なテストを実行しました。そのCASE、 firstSectorNumberは0x2000に設定されました。これは、セカンダリ U-Boot が実際に始まるオフセットに対応します: 0x2000 * 512 (つまり、ブロック サイズ) + 1024 (つまり、MBR サイズ) = 0x400400 、投稿したリンクで説明されているとおりですが、システムはリセット後もハングしたままになります。 何か見逃しているのでしょうか? Ps: あなたが投稿したこのコマンドは imx8 専用であり、imx6 には対応していないと思います。 mw.l 0x30390098 0x40000000 Re: Secondary Boot on i.MX6ULL Hangs After Reset Hello この問題は、セカンダリ イメージ テーブル (SIT) 構成に関係しているようです。eMMC を使用して i.MX6ULL の冗長ブートを実装する場合、SIT の firstSectorNumber フィールドをプライマリ ブート イメージのサイズに応じて正しく設定する必要があります。 適切なセカンダリブートの実装: 1. SIT に以下の重要な値があることを確認します。 - タグ = 0x00112233 (正しく設定されています) - firstSectorNumber = プライマリイメージのアラインサイズ/512バイト - すべての予約フィールドが適切に設定されていることを確認する 2. セカンダリ イメージが 0x1000 境界でプライマリ イメージの後に正しく配置されていることを確認します。 3.イメージをフラッシュした後、次のコマンドを使用して PERSIST_SECONDARY_BOOT フラグを設定します。 「」 mw.l 0x30390098 0x40000000 「」 16 進ダンプを見ると、オフセット 0x208 を 0x00112233 に変更し、0x20C を 0 に設定していることがわかりますが、firstSectorNumber フィールドが正しくない可能性があります。このフィールドは、セカンダリ イメージが始まるセクターを指す必要があります。 プライマリ U-Boot イメージのサイズ (適切に調整) に基づいて firstSectorNumber を再計算し、セカンダリ ブート イメージが正しいオフセットに配置されていることを確認してください。セカンダリ イメージは、プライマリ イメージが終了した後のセクター境界から開始する必要があります。 冗長ブートの実装に関する詳細は、次のコミュニティドキュメントを参照してください。 https://community.nxp.com/t5/i-MX-Security/Secondary-Redundant-boot-in-i-MX-6-7-8M-Family-of-Application/ta-p/1117103 よろしくお願いします。 Re: Secondary Boot on i.MX6ULL Hangs After Reset   前述したように、セカンダリ ブートは使用パーティションだけでなくブート パーティションでも機能する必要があります。   eMMC ブート パーティションが十分な大きさの場合は、次の 2 つのコマンドを試して、セカンダリ ブートの flash.bin (flash_secondary_boot.bin) をブート パーティションに書き込むことができます。   uuu emmc uuu emmc [flash_secondary_boot.bin] 注: ここでのflash.binは通常使用するプライマリブートイメージのみです。uuuヘルプを確認してください。 uuu [-d -m -v -bmap -no-bmap] -b[run] arg... Run Built-in scripts emmc burn boot loader to eMMC boot partition arg0: _flash.bin bootloader arg1: _image[Optional] image burn to emmc, default is the same as bootloader   前に提供したリンクのスクリプトを使用して、セカンダリ ブート イメージを作成CAN。   プライマリ イメージを完全にゼロで構成されたファイルに置き換えることで、プライマリ イメージの破損をシミュレートCANできます。   https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/i-MX8MM-SDCARD-Secondary-Boot-Demo/ta-p/ ...   https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/iMX-secondary-boot-collection/ta-p/19169 ... Re: Secondary Boot on i.MX6ULL Hangs After Reset @kawateb265 さんのご回答のおかげで、ようやく問題を解決できました。imx6 は boot0 パーティションから起動していました。ユーザー パーティションから起動するには、u-boot で次のコマンドを実行する必要がありました。 => mmc partconf 1 1 7 0 EXT_CSD[179], PARTITION_CONFIG: BOOT_ACK: 0x1 BOOT_PARTITION_ENABLE: 0x7 PARTITION_ACCESS: 0x0 ここで '0x7' はユーザー パーティションを有効にします。説明は次のとおりです: https://docs.u-boot.org/en/v2025.01/usage/cmd/mmc.html#:~:text=0x7,boot この変更を適用すると、「md.l 20D8044 1」によるテストは正常に動作し、リセット コマンド後にセカンダリ U-Boot が起動します。 Re: Secondary Boot on i.MX6ULL Hangs After Reset ご説明ありがとうございます。 私の場合、前のメッセージの lsblk 出力に示されているように、Yocto が自動的に作成したと思われる 2 つのブート パーティション、「mmcblk1boot0」と「mmcblk1boot1」があります。 スクリプトによって生成されたバイナリを mmcblk1boot0 に配置する必要がありますか? もしSOなら、mmcblk1boot1 の目的は何ですか? Re: Secondary Boot on i.MX6ULL Hangs After Reset コレクション全体を読むと、i.MX8QXP eMMC セカンダリ ブートの 2 つのブート パーティションが相互にバックアップされていることがわかります。ただし、i.MX8MM と iMX6 のブート パーティションは相互にバックアップされておらず、一方が独立しています。 https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/iMX-secondary-boot-collection/ta-p/1916915 https://community.nxp.com/t5/NXP-Tech-Blog/i-MX8QXP-eMMC-セカンダリブート/ba-p/1257704#M45
記事全体を表示
S32K3 的 CAN 采样点测试值太小的问题 你好,恩智浦 在使用 S32K311 进行开发时,选择了 16 MHz 的外部晶振。配置 CANFD 时,CAN 时钟源使用 60 MHz 的 AIPS_PLAT_CLK。为数据字段配置了 80% 的采样点,并启用 TDC。但是,在CANOE中实际测得的采样点只能达到72%。 在其他型号(如 S32K312 和 S32K342)的测试中也出现了这个问题。 以下是我们设置采样点和测试数据的配置之一。我们将采样点配置为 76% ,但实际测试结果为 67% 。 谨致问候, xianlong Re: Problem of the CAN sampling point test value being too small for S32K3 你好@武仙龙 请与我分享您的项目,我会花时间进行测试。 Re: Problem of the CAN sampling point test value being too small for S32K3 你好,@Senlent 我们修改了多种配置。在 S32K3 配置为 80% 的条件下,CANoe 测试的最佳结果是 72% ,谢谢 xianlong Re: Problem of the CAN sampling point test value being too small for S32K3 你好@武仙龙 对于 CAN FD 数据阶段 最新必须在 CANoe 中设置可能的最新采样点。然后,VH6501 发送帧并 延长然后 VH6501 发送帧,并在每个间隔后将各个比特位延长一个刻度。 这似乎是 VH6501 的配置问题。您可以尝试将此处的参数修改为 70%, 76.667%, 和 80% ,然后再次测试。 Re: Problem of the CAN sampling point test value being too small for S32K3 你好,@Senlent 我们咨询了几位经验丰富的工程师。他们介绍说,S32K1 和 K3 的小采样点测试也存在问题,这个问题可能与 MCU 关系不大。使用 CANoe 进行测试时,测试结果都偏低。他们建议,在 80% 的实际测试要求下,可以适当增加为 S32K3 配置的采样点。您可以使用任何恩智浦演示程序进行测试,这种现象应该是可以重现的。 敬上, xianlong Re: Problem of the CAN sampling point test value being too small for S32K3 你好@武仙龙 客户的测试可能存在缺陷,请相信自己的测试。 我将花一些时间进行一些测试,但这不是我的优先事项,可能需要几个月的时间。 天内给您答复。 Re: Problem of the CAN sampling point test value being too small for S32K3 你好@武仙龙 这仍然应该是测试问题,而不是 MCU 引起的。 不过,我会花一些时间做一些简单的测试。我可能会使用示波器直接进行测试,这应该是最精确的测量方法。 Re: Problem of the CAN sampling point test value being too small for S32K3 您好,@Senlent 如果您有更有说服力的结果,也请与我们分享。 我们使用了其他一些仪器进行测试,得到的采样点与我们在设置中预期的比较接近。不过,对于客户来说,CANoe 的行业认可度非常高。 敬上, xianlong Re: Problem of the CAN sampling point test value being too small for S32K3 好的 Re: Problem of the CAN sampling point test value being too small for S32K3 你好@武仙龙 很抱歉,我不能进行这项测试。 我没有合适的干扰设备来进行测试,而 FLEXCAN 报告中的测试结果已经证明测试通过。 我可以私下把相关证明发给你。 Re: Problem of the CAN sampling point test value being too small for S32K3 非常感谢。
記事全体を表示
NFC ON KW In the process of practical application, customers often need the combination of ble + NFC. At present, our IOT-DK006 is the only development board with NFC module. But the NFC example is not perfect. So we porting the library of NFC reader- PN7150, to support KW series microcomputer so that KW series can handle the demand of ble + NFC function. Now I will introduce you how to port the NFC lib to KW. 1 PN7150 Introduction PN7150 is the high-performance version of PN7120, the plug’n play NFC solution for easy integration into any OS environment, reducing Bill of Material (BOM) size and cost. PN71xx controllers are ideal for home-automation applications such as gateways and work seamlessly with NFC connected tags. 2 Tools hardware:FRDM-KW36,PN7150 , some wire software:mcuxpresso11.3 package:NXP-NCI MCUXpresso example Project This package contains the nfc library and example that we need. We will refer the ‘NXPNCI-K64F_example’ firstly. Sdk version: 2.2.8, Example: frdmkw36_rtos_examples_freertos_i2c  3 Steps Hardware part:We need connect the PN7150 to KW36 like the picture. Although we can connect the PN7150 to board through the ardunio connector, the pin’s voltage is not enough to drive the PN7150. So we need a wire connected to U1 to get 3.3V.   PN7150 FRDM-KW36 VBAT/PVDD 3.3V VANT 5V GND GND IRQ PTA16 VEN PTC15 SCL PTB0,I2C0 SDA PTB1,I2C0 Software part:We should add the nfc library and directory into our project. You can check the following picture to know what file is necessary. If you want to know how to add directory into our project, you can refer this link. The red line shows what file we need. Please notice that when we add file path into the mcuxpresso configuration, we also need add the path into ‘Path and Symbols’ . We need add some macro into ‘Preprocessor’. We copy the NXPNCI-K64F_example’s main file content into our ‘freertos_i2c.c’. Next, we need modify the file pin_mux.c, tml.c and board.h   In file board.h,add the following macro. Don't forget to enable the pin clock. /* NXPNCI NFC related declaration */ #define BOARD_NXPNCI_I2C_INSTANCE I2C0 #define BOARD_NXPNCI_I2C_BAUDRATE (100000) #define BOARD_NXPNCI_I2C_ADDR       (0x28) #define BOARD_NXPNCI_IRQ_PORTIRQn PORTA_IRQn #define BOARD_NXPNCI_IRQ_GPIO     (GPIOA) #define BOARD_NXPNCI_IRQ_PORT     (PORTA) #define BOARD_NXPNCI_IRQ_PIN      (16U) #define BOARD_NXPNCI_VEN_GPIO     (GPIOC) #define BOARD_NXPNCI_VEN_PORT     (PORTC) #define NXPNCI_VEN_PIN            (5U)     In file pin_mux.c, add head file ‘board.h’. Add the following code in function ’ BOARD_InitPins’. The step is to configure the VEN, IRQ and I2C0. This example contains the I2C1’s code, you can comment them.     /* Initialize NXPNCI GPIO pins below */   /* IRQ and VEN PIN_MUX Configuration */   PORT_SetPinMux(BOARD_NXPNCI_IRQ_PORT, BOARD_NXPNCI_IRQ_PIN, kPORT_MuxAsGpio);   PORT_SetPinMux(BOARD_NXPNCI_VEN_PORT, NXPNCI_VEN_PIN, kPORT_MuxAsGpio);   /* IRQ interrupt Configuration */   NVIC_SetPriority(BOARD_NXPNCI_IRQ_PORTIRQn, 6);   EnableIRQ(BOARD_NXPNCI_IRQ_PORTIRQn);   PORT_SetPinInterruptConfig(BOARD_NXPNCI_IRQ_PORT, BOARD_NXPNCI_IRQ_PIN, kPORT_InterruptRisingEdge); Finally, in file tml.c, modify PORTC_IRQHandler as PORTA_IRQHandler We finished all steps. 4 Results We use ntag to test the reading and writing operation. When the tag is closed to the PN7150, we will get the following message. The text recording is ‘VER=03’. Next, we will modify the text recording We need add the new macro to preprocessor. We can modify the variable NDEF_MESSAGE in function task_nfc_reader to modify the text recording. Then we download the program again. We will see the original text ‘VER=03’ and the text has been modified. Then we read the tag again. We will see the new text. If we want to send the larger text, what should we do? We need modify the macro ‘ADD’. When only 4 characters are sent, ‘ADD’ is 0. And every additional character is added, the ‘ADD’ will add. We modify the tag as ‘Ver=03’, and we have two more characters. So ‘ADD’ needs to be defined as 2 It firstly shows the text ‘Test’. Then it will show the new text ‘Ver=03’. Other tags’ reading and writing operation can be enabled by defining some macro.       BLE Software KW
記事全体を表示
aarch64Linuxカーネルメモリ管理 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> aarch64 linuxカーネルメモリマッピングレイアウトと基本的な管理内容についての簡単な紹介。 内容は次のとおりです。 実行後のカーネルの仮想メモリのレイアウトとマッピング i.MX8QM/QXPカーネル予約メモリレイアウト カーネルメモリの割り当て方法と技術(Buddy、cma、IONなど) DMAバッファ管理、SWIOTLB、IOMMU GPU メモリ管理 さまざまなユースケースに合わせてメモリをカスタマイズする方法 安定性とパフォーマンスを向上させるためにCMAの使用を避ける方法 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> aarch64 linuxカーネルメモリマッピングレイアウトと基本的な管理内容についての簡単な紹介。 内容は次のとおりです。 実行後のカーネルの仮想メモリのレイアウトとマッピング i.MX8QM/QXPカーネル予約メモリレイアウト カーネルメモリの割り当て方法と技術(Buddy、cma、IONなど) DMAバッファ管理、SWIOTLB、IOMMU GPU メモリ管理 さまざまなユースケースに合わせてメモリをカスタマイズする方法 安定性とパフォーマンスを向上させるためにCMAの使用を避ける方法
記事全体を表示
Kinetis 器件的复位引脚建议 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 嘿,Kinetis 爱好者们!我们 Kinetis 微控制器系统工程团队了解客户遇到的各种情况,但没有一种情况像复位引脚的处理那样特别麻烦。本文档的目的是提供我们在 Kinetis 系统工程部门收到的常见问题 (FAQ) 列表。这是一个动态列表,因此可能并不完整。然而,我们希望您发现以下问题和答案很有用。 问:我需要连接复位信号才能调试 Kinetis 设备吗? 这是一个常见的问题。严格来说,您不需要将 Kinetis 设备的设备复位线连接到调试连接器即可进行调试。调试端口 MDM-AP 寄存器允许通过仅使用 SWD_CLK 和 SWD_DIO 线设置系统复位请求位来使处理器保持复位状态。 但是,在决定从调试连接器中省略复位线之前,您应该仔细考虑这可能会如何影响在某些情况下对设备进行编程和调试的能力。 调试器/闪存编程器或外部调试器是否需要复位引脚?您使用的特定工具可能仅支持通过重置线重置设备,而不提供通过 MDM-AP 重置设备的功能。 您是否更改了调试信号的默认功能?您可能需要在应用程序中使用 SWD_CLK 和/或 SWD_DIO 信号来实现其他功能。对于低引脚数封装来说尤其如此。一旦功能发生变化(通过 PORTx_PCRy 寄存器),您将无法再通过这些信号访问 MDM-AP。如果您无法访问重置信号,那么您就无法阻止核心执行禁用引脚 SWD 功能的代码。因此您将无法重新编程该设备。为了防止这种情况,您需要: 设置您的代码以在复位释放几秒钟后更改 SWD 引脚的功能,以便调试器可以在发生这种情况之前停止核心。 在您的代码中放置某种“后门”机制,不会在这些引脚上重新编程 SWD 功能或重新启用 SWD 功能。例如,通过 UART 或 SPI 接口发送的特定字符序列。 一些 Kinetis 设备允许禁用复位引脚的复位功能。在这种情况下,您只能使用 SWD 信号作为通过 MDM-AP 重置设备的一种方式。如果您除了禁用复位引脚之外还更改了 SWD 引脚功能,那么如果您想对设备进行重新编程,就必须提供重新启用 SWD 功能的后门方法。 Kinetis硬件支持 Kinetis K系列MCU Kinetis L系列MCU Kinetis V系列MCU/单片机 Kinetis W系列MCU
記事全体を表示
PCA9698 のステータスをご存知ですか? こういうものが必要かもしれないと思いました。ステータスはどうですか?もっと新しい類似製品はありますか? ランディ Re: Do you know the status of PCA9698 ? こんにちは、ランディ。 PCA9698 は現在も生産中ですが、HVQFN56 バージョン (PCA9698BS) は製造が中止されます。TSSOP56 バージョン (PCA9698DGG) は引き続き完全にアクティブでサポートされており、新しいデザインに推奨される選択肢です。同じ 40 ビット GPIO 数と電流能力を単一チップで提供する新しい NXP デバイスは存在しないため、その機能が必要な場合、PCA9698DGG は依然として最適なソリューションです。 BRs、トーマス
記事全体を表示
imx93 m33 rpmsg hello_world test Board/Setup CPU: i.MX93  Boot media: SD (mmc 1) Goal: run CM33 RPMsg-Lite string echo demo and communicate from Linux (A55) Problem Summary I’m trying to start the Cortex‑M33 RPMsg demo either: from U‑Boot using bootaux, or from Linux using remoteproc (firmware loaded from firmware) I’m seeing: U‑Boot data aborts when trying to access certain CM33 alias addresses (e.g. 0x1ffe0000 / 0x0ffc0000) Linux remoteproc tries to load rpmsg_lite_str_echo_rtos_remote.bin and fails with error -2 (file not found), then falls back to sysfs fallback. I’m unsure what the correct memory copy address and boot address should be for CM33 on i.MX93 (system vs alias address), and how to align U‑Boot bootaux flow with Linux remoteproc flow. What I tested SD partition layout and boot files U‑Boot shows SD is mmc 1: u-boot=> mmc list FSL_SDHC: 0 (eMMC) FSL_SDHC: 1 (SD) Partition table: u-boot=> part list mmc 1 Partition Map for MMC device 1 -- Partition Type: DOS Part Start Sector Num Sectors UUID Type 1 16384 681574 076c4a2a-01 0c Boot 2 704512 5769534 076c4a2a-02 83 Boot partition contents include DTBs and an mcore-demos/ directory: u-boot=> fatls mmc 1:1 ... mcore-demos/ ... I can load the demo: u-boot=> fatload mmc 1:1 ${loadaddr} mcore-demos/rpmsg_lite_str_echo_rtos_remote.bin 39004 bytes read in 3 ms u-boot=> echo ${loadaddr} 0x80400000 u-boot=> echo ${filesize} 985c The first two words look like a valid CM33 vector table: u-boot=> md.l ${loadaddr} 2 80400000: 2001e000 0ffe0595 Reading 0x1ffe0000 causes abort: Linux side: remoteproc firmware load fails In Linux, when remoteproc0 powers up, it tries to load firmware: [ 84.714629] remoteproc remoteproc0: powering up imx-rproc [ 84.721926] remoteproc remoteproc0: Direct firmware load for rpmsg_lite_str_echo_rtos_remote.bin failed with error -2 [ 84.732549] remoteproc remoteproc0: Falling back to sysfs fallback for: rpmsg_lite_str_echo_rtos_remote.bin here is the reserved memory: reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; linux,cma { compatible = "shared-dma-pool"; reg = <0 0x88000000 0 0x04000000>; /* 64 MB @ 0x8800_0000 */ reusable; linux,cma-default; }; /* Ethos-U: move away from the kernel boot (32 MB) */ ethosu_mem: ethosu_region@8c000000 { compatible = "shared-dma-pool"; reg = <0 0x8c000000 0 0x02000000>; no-map; }; vdev0vring0: vdev0vring0@84000000 { reg = <0 0x84000000 0 0x00008000>; no-map; }; vdev0vring1: vdev0vring1@84008000 { reg = <0 0x84008000 0 0x00008000>; no-map; }; vdev1vring0: vdev1vring0@84010000 { reg = <0 0x84010000 0 0x00008000>; no-map; }; vdev1vring1: vdev1vring1@84018000 { reg = <0 0x84018000 0 0x00008000>; no-map; }; rsc_table: rsc-table@2021e000 { reg = <0 0x2021e000 0 0x00001000>; no-map; }; /* OCRAM */ vdevbuffer: vdevbuffer@84020000 { compatible = "shared-dma-pool"; reg = <0 0x84020000 0 0x00100000>; /* 1 MB */ no-map; }; ele_reserved: ele-reserved@90000000 { compatible = "shared-dma-pool"; reg = <0 0x90000000 0 0x00100000>; /* 1 MB @ 0x9000_0000 */ no-map; }; }; ethosu { compatible = "arm,ethosu"; fsl,cm33-proc = <&cm33>; memory-region = <&ethosu_mem>; power-domains = <&mlmix>; }; What is the correct procedure to start CM33 RPMsg demo on i.MX93 from U‑Boot? If CM33 is started by U‑Boot (bootaux), what is the recommended Linux configuration? Re: imx93 m33 rpmsg hello_world test Hi , the BSP version is VERSION="6.6-scarthgap (scarthgap)" I use imx93 custom board with 512MB RAM and there is no hello_world.elf these are under the /lib/firmware   imx93-11x11-evk_m33_TCM_low_power_wakeword.elf imx93-11x11-evk_m33_TCM_power_mode_switch.elf imx93-11x11-evk_m33_TCM_rpmsg_lite_pingpong_rtos_linux_remote.elf  imx93-11x11-evk_m33_TCM_rpmsg_lite_str_echo_rtos.elf imx93-11x11-evk_m33_TCM_sai_low_power_audio.elf after testing it u-boot=> fatload mmc 1:1 80000000 mcore-demos/rpmsg_lite_str_echo_rtos_remote.bin 39004 bytes read in 3 ms (12.4 MiB/s) u-boot=> cp.b 0x80000000 0x201e0000 0x10000 u-boot=> bootaux 0x1ffe0000 0 ## Starting auxiliary core addr = 0x1FFE0000... it doesnt start, it freezes. Re: imx93 m33 rpmsg hello_world test Hi, Thank you for your interest in NXP Semiconductor products, Using prebuilt cortex-M demos is a great way to start, are you using i.MX 93 EVK or a custom board with the prebuilt image flashed? What BSP are you using? To run Cortex-M demos in U-boot you can use the following snippet: u-boot=> fatload mmc 1:1 80000000 sdk20-app.bin u-boot=> cp.b 0x80000000 0x201e0000 0x10000 u-boot=> bootaux 0x1ffe0000 0 RPMSG has to be ran in Linux RPROC framework since you have to reserve memory in DTB for RPMSG and Cortex-A RPMSG communication is over a Linux driver. root@imx93evk:~# echo hello_world.elf > /sys/class/remoteproc/remoteproc0/ firmware root@imx93evk:~# echo start > /sys/class/remoteproc/remoteproc0/state Regards Re: imx93 m33 rpmsg hello_world test Hi @bora, Please try with imx93-11x11-evk_m33_TCM_rpmsg_lite_str_echo_rtos.elf That is the binary you are testing, please refer to the available examples in SDK: SDK_24_12_00_MCIMX93-EVK\boards\mcimx93evk\multicore_examples - rpmsg_lite_pingpong_rtos_linux - rpmsg_lite_str_echo_rtos Regards Re: imx93 m33 rpmsg hello_world test Hi , I tried that and this is the result, root@imx93-11x11-lpddr4x-evk:~# echo start > /sys/class/remoteproc/remoteproc0/state [ 105.274513] remoteproc remoteproc0: powering up imx-rproc [ 105.282905] remoteproc remoteproc0: Booting fw image imx93-11x11-evk_m33_TCM_rpmsg_lite_str_echo_rtos.elf, size 59028 [ 105.294019] remoteproc remoteproc0: Registered carveout doesn't fit len request [ 105.301405] rproc-virtio: probe of rproc-virtio.1.auto failed with error -12 [ 105.309101] remoteproc remoteproc0: Registered carveout doesn't fit len request [ 105.316561] rproc-virtio: probe of rproc-virtio.2.auto failed with error -12 [ 105.830361] remoteproc remoteproc0: remote processor imx-rproc is now up Re: imx93 m33 rpmsg hello_world test Hi, I could reproduce with the next steps on LF-6.12.49 EVK Cortex-A U-boot Hit any key to stop autoboot: 0 u-boot=> fatload mmc 0:1 ${loadaddr} mcore-demos/imx93-11x11-evk_m33_TCM_rpmsg_lite_str_echo_rtos.bin 19816 bytes read in 18 ms (1 MiB/s) u-boot=> cp.b ${loadaddr} 0x201e0000 0x20000 u-boot=> bootaux 0x1ffe0000 0 ## Starting auxiliary core addr = 0x1FFE0000... u-boot=> pri mmcargs mmcargs=setenv bootargs ${jh_clk} ${mcore_clk} console=${console} root=${mmcroot} u-boot=> editenv m mfgtool_args mmcargs mmcautodetect mmcboot mmcdev mmcpart mmcroot u-boot=> editenv mmcargs edit: setenv bootargs ${jh_clk} ${mcore_clk} console=${console} root=${mmcroot} clk_ignore_unused u-boot=> boot Cortex-A Linux root@imx93evk:~# lsmod | grep -i imx_rpmsg_tty root@imx93evk:~# modprobe imx_rpmsg_tty Cortex-M from U-boot to Linux. RPMSG String Echo FreeRTOS RTOS API Demo... Nameservice sent, ready for incoming messages... Get Message From Master Side : "hello world!" [len : 12] Regards Re: imx93 m33 rpmsg hello_world test on u-boot I started and worked but in linux via .elf file I get imx_rproc_kick: failed (0, err:-62) Re: imx93 m33 rpmsg hello_world test I tested also but for me no result, I still cant communicate with m33. I use custom board not imx93-11x11-evk , I use uart1 and no uart2, for m33 I have JTAG. Re: imx93 m33 rpmsg hello_world test I also dont see any ttyRPMSG under /dev
記事全体を表示
FLEXIO_CTRL[DBGE] 的含义是什么? DBGE 上的参考手册措辞有点短 "在调试模式下启用 FLEXIO 操作" 如果禁用它并调试代码会发生什么? 试图弄清楚在使用 FLEXIO 和调试 FLEXIO 驱动程序时,哪些调试操作是安全的。 我想,让调试器在接收模式下读取 SHIFTBUFn 或任何其他具有读取副作用的硬件寄存器都是不安全的,即使在调试器中不小心碰了一下也不行。 Re: What is the meaning of FLEXIO_CTRL[DBGE] 你好,@Henrik-Wires 如果"Enable FLEXIO operation in debug mode" 被禁用,当调试器停止 CPU 时,FLEXIO 模块也会停止。冻结所有 FIexIO 活动,直到执行恢复。 下面的主题也讨论了这个问题:这是否意味着 flexio 无法在调试模式下工作? BR、VaneB Re: What is the meaning of FLEXIO_CTRL[DBGE] 你好,@Henrik-Wires 正如 S32K3 参考手册中所述,当设置了相应的 SHIFTSTAT [SSF] 标志时,必须只读取 ShiftBufn 寄存器。 Re: What is the meaning of FLEXIO_CTRL[DBGE] 这是否也意味着,如果禁用 DBGE,使用调试器访问 FLEXIO 寄存器也是安全的,或者使用调试器读取 SHIFTBUFn 会扰乱移位状态标志 SHIFTSTAT[SSF] ? Re: What is the meaning of FLEXIO_CTRL[DBGE] 能否以某种方式阻止 S32DS 尝试访问寄存器?只有短暂访问 SHIFTBUFn 的指针,调试器才会通过清除 SHIFTSTAT[SSF]来访问该值,从而扰乱 FLEXIO 状态。 Re: What is the meaning of FLEXIO_CTRL[DBGE] 你好,@Henrik-Wires 能否请您说明一下这将用于什么目的,或者您想实现什么样的分析? Re: What is the meaning of FLEXIO_CTRL[DBGE] 你好,@Henrik-Wires 集成开发环境本身不会阻止对寄存器的访问。这种保护可以通过 MPU 或 XRDC 来实现;不过,我认为这种方法与您想要实现的目标是一致的。 相反,你可以监测何时设置 SHIFTSTAT [SSF],然后验证相应的 ShiftBufn 寄存器是否包含预期值。 Re: What is the meaning of FLEXIO_CTRL[DBGE] 我正在探索、编写和调试一个定制的低级 FLEXIO 驱动程序。 调试时出现了奇怪的结果,我怀疑是由于 S32DS 在通过驱动程序步进时获取 SHIFTBUFn 寄存器的值,干扰了 SHIFTSTAT[SSF] 状态,导致事件丢失。 Re: What is the meaning of FLEXIO_CTRL[DBGE] 该驱动程序显然会监测 SHIFTSTAT 并相应地访问 ShiftBufn。 我的问题是,使用 S32DS 跳过驱动程序代码可能会触发信号对 SHIFTSTAT 的调试读取,这似乎会干扰该寄存器中的状态。例如,当鼠标指向 SHIFTSTAT 指针时。 如果我小心避免用调试器接触任何此类指针,那么驱动程序就能正常工作。 我曾希望禁用 DBGE 可以让调试器访问 SHIFTSTAT,而不会干扰 **bleep**FSTAT 寄存器的状态,但从你的回复来看,情况并非如此。 Re: What is the meaning of FLEXIO_CTRL[DBGE] 你好,@Henrik-Wires 禁用 DBGE 位并不能防止调试器干扰 SHIFTSTAT 等寄存器,因为 DBGE 并不控制调试读取行为。相反,DBGE 可控制外设是否在内核停止运行时继续运行。
記事全体を表示