Multi Source Translation Content

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

Multi Source Translation Content

ディスカッション

ソート順:
S32K3用SVDファイル - ライセンスに関する質問 S32K388とS32K344 SVDファイルから派生したソフトウェアをリリースしたいと考えています。しかし、SVDファイルには以下のテキストが含まれています。 著作権 2016-2024 NXP NXP機密かつ独自的な情報。このソフトウェアは所有または管理されています NXPによるものであり、適用される規定に厳密に従ってのみ使用可能です ライセンス条件。明示的にそのような条件を受け入れるか、ダウンロードすることで、 インストール、アクティベート、またはその他の方法でソフトウェアを使用することで、あなたは あなたが読んだこと、そして従うことに同意すること、そして そのようなライセンス条件に縛られています。もしあなたが 適用されるライセンス条件がある場合、保持、インストール、アクティベートができません または、ソフトウェアを使ったほうがいいです。 このコードを公開リポジトリに入れることはCANですか?それとも、リポジトリにS32DSをダウンロードしてSVDファイルを自分で抽出するように指示するガイドを記載する必要があるのでしょうか? Re: SVD files for S32K3 - license question ご質問ありがとうございます。残念ながら、S32K3 SVD ファイル (S32K344.svd、S32K388.svd)本ソフトウェアには「NXP機密および専有」ライセンスが付与されており、派生作品の再配布や公開リポジトリへの掲載は許可されていません。 以下の方法をお勧めします。 SVDから得られたコードを公開リポジトリに直接含めないでください。ライセンス条項に違反する可能性が高いです。 代わりに、リポジトリにビルドスクリプトやツールを提供し、ユーザーにS32DSを自分でダウンロードしてSVDファイルを抽出し、ローカルでコード生成ステップを実行するよう指示してください。 派生コードを公開するために明示的な許可が必要な場合は、NXPの営業担当者にお問い合わせの上、正式なライセンス例外を申請してください。 NXPがSVDファイルのライセンス条項を明確化または更新するまでは、これが最も安全な方法です。
記事全体を表示
RT1064に関するパラレルRGB LCDインターフェースピンの質問 こんにちは、 間違っていたら訂正してください。私の考えではRT1064は2つのLCDインターフェースを備えています。 - 1つはGPIOバス上にあり、CLK/HSYNC/VSYNC信号と最大24ビットのデータ信号を備えています。 そして、 - SEMCバス上に設置された8/16ビットMPU/8080インターフェース用の別のもの 私はILI9341コントローラ付きのLCDモジュールを使っています。私の計画はテキストとアイコンを表示することで、動画やアニメーションは一切行いません。このデザインでは外部メモリは使っておらず、SEMCバスが利用可能です。 Q1。私のアプリケーションに最適な機関はどれでしょうか? Q2。SEMCバス上には、並列モードでILI9341とインターフェースするために必要な以下のピンが配置されています: - D/CX - WRX - RDX i.MXRT 106x Re: Parallel RGB LCD interface pins question on RT1064 こんにちは、 @batmat さん。 GPIOバスをベースにしていると言っているLCDモジュールは、ディスプレイの駆動専用に設計されたEnhanced LCD インターフェース(eLCDIF)モジュールです。 もう一つのモジュールはスマート外部メモリコントローラ(SEMC)で、特定のディスプレイの駆動に使えますが、その設計は外部メモリの駆動に特化しています。ただし、ほとんどの8080ベースのディスプレイは、このモジュールとFlexIOピンの機能を組み合わせることでSEMC機能も搭載されています。以下のアプリケーションがこの機能を説明しています:https://mcuxpresso.nxp.com/appcodehub?search=an-flexio_8080_rt1050 ILI9341のデータシートをざっと見たところ、このドライバはeLCDIFモジュールと互換性のあるRGBインターフェース、SEMCモジュールに対応した8080インターフェース、さらにはLPSPIモジュールで実装可能な3/4ラインSPIインターフェースなど、複数の種類のインターフェースをサポートしているようです。 とはいえ、最適な選択肢は、お客様の性能要件と利用可能なピン配置に合致するものでしょう。 SEMC信号に関しては、WRX(書き込み信号)とRDX(読み出し信号)はどちらも特定のFlexIOピンに定義されています。前述のアプリケーションノートの場合、それぞれFlexIO2_00とFlexIO2_01となります。D/CX信号は、データラインがデータを送信するかコマンド情報を送信するかを決定するためのレジスタ選択(RS)信号に相当します。 BR、 エドウィン。
記事全体を表示
关于RT1064的并行RGB LCD接口引脚问题 你好, 如果我理解有误请指正,但在我看来,RT1064 似乎有两个 LCD 接口: - 一个位于 GPIO 总线上,带有 CLK/HSYNC/VSYNC 信号以及最多 24 位数据信号 以及 - 另一个用于位于 SEMC 总线上的 8/16 位 MPU/8080 接口 我使用的是一个搭载ILI9341 控制器的 LCD 模块。我的计划是显示文本和图标,不会播放任何视频或动画。此设计中未使用任何外部存储器,因此可以使用 SEMC 总线。 问题1:哪种接口最适合我的应用? Q2. 在 SEMC 总线上,用于以并行模式连接 ILI9341 的以下引脚位于何处: - D/CX - WRX - RDX i.MX RT106x Re: Parallel RGB LCD interface pins question on RT1064 嗨@batmat , 您提到的基于 GPIO 总线的 LCD 模块是增强型 LCD 接口 (eLCDIF) 模块,它是专门为驱动显示器而设计的。 另一个模块是智能外部存储器控制器 (SEMC) 模块,它当然可以用来驱动某些类型的显示器,但它的设计更侧重于驱动外部存储器,尽管大多数基于 8080 的显示器在将此模块与 FlexIO 引脚的功能结合起来时也符合 SEMC 的功能。以下应用程序描述了此功能: https://mcuxpresso.nxp.com/appcodehub?search =an-flexio_8080_rt1050 从 ILI9341 数据手册的快速浏览来看,我认为该驱动程序支持多种类型的接口,包括与 eLCDIF 模块兼容的 RGB 接口、与 SEMC 模块兼容的 8080 接口,甚至还有可以使用 LPSPI 模块实现的 3/4 线 SPI 接口。 也就是说,最好的建议是选择最符合您的性能要求和可用引脚排列的产品。 对于 SEMC 信号,WRX(写入信号)和 RDX(读取信号)均定义在特定的 FlexIO 引脚上。对于上述应用笔记,它们分别是 FlexIO2_00 和 FlexIO2_01。D/CX 信号相当于寄存器选择 (RS) 信号,用于确定数据线是发送数据还是命令信息。 BR, 埃德温。
記事全体を表示
imx95 + la12xx こんにちは、NXP 問題の説明:現在、PCIe経由で接続されたIMX95とLA1234を使用しています。hostsw_la12xx用のカーネルドライバをコンパイルし、yami.koをロードしましたが、LSPCIを使用してLA1234デバイスを検出できません。 1. LA1234に書き込むためのプログラムがありません。LSPCI経由でプログラムを表示するには、まず書き込む必要がありますか?プログラムを書き込むにはどうすればよいですか? Re: imx95 + la12xx yami.ko lspci 観測された現象に基づくと、現在の問題はホスト側のコンパイルまたはロード処理に起因する可能性は低い。LA1234が観測される前提条件は、LA1234が既にPCIeエンドポイントとして正常に起動しており、PCIeリンクが正常にトレーニングされていることである。 LA1234にプログラムが書き込まれていない、またはブートされていない場合、i.MX95側が lspci 経由でLA1234を認識できないのは当然です。i.MX95がルートコンプレックスとしてデバイスを列挙するには、LA1234がサポートされているブートソースから起動してLA12xx BSP/FreeRTOS/PCIe EPファームウェアを実行し、PCIeエンドポイントの初期化を完了する必要があります。 hostsw_la12xx/kernel_driver/yami.ko これはホストLinux側のLA12xx PCIeドライバです。通常、ホストがPCIeデバイスを列挙した後、PCIeインバウンド/アウトバウンドウィンドウ、e200 OSブート、VSPAイメージブート、IPC/RFICなど、LA12xxのさらなる初期化処理を行います。LA1234側でPCIe EPが完全に有効になっていない場合、デバイスが lspci に直接表示されることはありません。 まずは以下の手順を確認することをお勧めします。 LA1234のブートモード/ブートソースが正しいこと、およびLA1234がPCIeエンドポイントドライバを含むLA12xx BSP/FreeRTOSイメージを起動したことを確認してください。 LA1234 PCIeコントローラがEPとして構成され、i.MX95側がRCとして構成されていることを確認してください。 PCIe REFCLK、PERST#、電源シーケンス、SerDesレーン設定、レーン幅/速度が一致しているかどうかを確認してください。 i.MX95側はまず dmesg | grep -i pcie 、 echo 1 > /sys/bus/pci/rescan 、 lspci -nn -vv を実行して、エンドポイント列挙があるかどうかを確認します。 それでもデバイスが認識されない場合は、まず正常に動作することが確認されているPCIeエンドポイントを使用してi.MX95に接続し、i.MX95 RC側のハードウェアとデバイスツリー/カーネル構成が正しいことを確認することをお勧めします。その後、LA1234側に戻り、EPの起動とハードウェア接続を確認してください。 LA1234をプログラムするには、LA12xx SDK/BSPに付属のLA1234/LA12xxボードブートイメージと対応するプログラミング手順を使用する必要があります。公開されている hostsw_la12xx リポジトリには主にホスト側のソフトウェアが含まれており、FreeRTOS側のコードは含まれていません。そのため、LA12xx SDKユーザーガイド/BSPリリースパッケージのLA12xxボードブートとイメージプログラミングに関するセクションを参照してください。
記事全体を表示
S32 Design Studio S32 Design Studio v2.0をインストールしようとしています。S32 design studio v2.0をインストールすると、このファイルをライセンス申請に持って行request.xml、パソコンに保存Activation.xml送信されます。インストール画面に戻るとタイムアウトが発生し、Activation.xml ファイルを追加できません。彼らが許可した時間内にこれをどうすればいいですか? Re: S32 design Studio こんにちは、 アクティベーションリクエストに固有マシンIDが欠落しています。このIDがなければS32DSは起動できません。別のPCマシンでの最初の試行時に、そのIDが含まれており、アクティベーションは正常に完了しました。 仮想マシンを使用している場合、「マシンUIDが見つかりません」というエラーがよく発生します。場合によっては、OSのセキュリティポリシーがS32SDをブロックしてOSからそのようなIDを取得することもあります。c:\ProgramData\FLEXnet\フォルダの内容をバックアップして削除し、再度インストールを試してみてください。
記事全体を表示
S32DSのソフトウェアは期限切れです。 質問したいのですが、S32DSソフトウェアのライセンスがまもなく切れます。どうやって更新すればいいですか? Re: The S32DS software has expired. こんにちは、 現在は延長されています。 よろしくお願いいたします。 ピーター
記事全体を表示
S32K312 Secureboot and Program Flash The attached CMM file is a script that writes the FBL and App to the S32K312 MCU and then activates SecureBoot, SecureDebug, and Configuration Lock. We would like to request a review and improvement regarding the HardFault issue that occurs when running this CMM. Previously, as shown in the screenshot, a HardFault occurred after the FBL and App were imported when executing "Go," with the JTAG Clock set to 5 MHz throughout. As a change, we set SYStem.JtagClock to 1 MHz after importing the App file. With this change, HardFaults rarely occurred at the "Go" step when running the CMM, so we concluded that lowering the JTAG Clock speed is an effective approach. However, when the modified CMM is applied, a "stopped by vectbl" error occasionally occurs at "Go" after the FBL and App have been imported. We kindly ask you to review the CMM so that it can run stably overall, and we would like to inquire about how to improve it so that the "stopped by vectbl" error does not appear at all. Original CMM: GN7_PE_MAIN_G_SECURE_260412.cmm Modified CMM (JTAG Clock changed to 1 MHz): GN7_PE_MAIN_G_SECURE_260412_0714RE.cmm Additionally, we would like to import a different FBL after SecureBoot has been enabled. Is there a way to import a different FBL while SecureBoot is enabled? If it is possible, we would appreciate it if you could provide a guide. Re: S32K312 Secureboot and Program Flash Hi @jeongwoo  The main problem I can see is this: lukaszadrapa_0-1784181532767.png This means: you load the pink file and you reset the device. After this reset, SBAF is supposed to install HSE firmware. But the key point is - this operation takes about 1 second. But then you reset the MCU again in 0.1s and you are going to reprogram pink file at 0x40_0000 by fbl immediately after that. Increase the waiting time to 1.3s, at least. Otherwise SBAF tries to install HSE FW and you try to reprogram fbl at the same time.  Regards, Lukas Re: S32K312 Secureboot and Program Flash Hello, thank you for your reply. Regarding the part where the delay time is currently set to 0.1 seconds after adding HSE, there are no issues with the program functions written to the controller even when the time is set shorter. I would like to ask if it is absolutely necessary to increase the delay time to 1 second. Re: S32K312 Secureboot and Program Flash Did you tested this with a device where HSE firmware is not installed yet? I don’t think this can work. The installation takes little bit more than 1 second. If you cut the installation by reset after 0.1s and if you erase the pink file right after that, SBAF can’t install the firmware. Re: S32K312 Secureboot and Program Flash Hello, First, I confirmed that when writing with the CMM configured with the existing 0.1-second setting, a hardfault appears in Trace32, but there is no impact on the firmware functionality. It appears that the FBL and APP executed normally. Is there perhaps a register address value that can be used to check whether SBAF or HSE is operating normally? Additionally, regarding the CMM that accounts for the HSE application time you mentioned, "stopped by vectbl" did not appear during execution. However, I confirmed that "stopped by vectbl" is still displayed even when changing "wait 3s" to "wait 2s" after FLASH.ReProgram ALL during APP Import. Could reducing the APP import time also have an impact on this? jeongwoo_0-1784707488443.png Re: S32K312 Secureboot and Program Flash Hi @jeongwoo  I think I may have found a potential issue in the script. lukaszadrapa_0-1784819781177.png After loading fbl_m4, the bootloader is started using the Go command. The script then enters a loop where it periodically reads the Boot Configuration Word and waits for the value 0x9. This means the script is waiting for the bootloader to initialize Secure Boot and update the BOOT_SEQ bit in the Boot Configuration Word. However, performing this update requires the bootloader to erase and reprogram the entire flash sector, which can take quite significant amount of time. During that period, the debugger repeatedly reads the same flash location. This may lead to a Read-While-Write conflict. While a flash block is being erased or programmed, it generally cannot be read at the same time. As a result, the debugger may encounter an access error, which could explain the observed behavior. A cleaner solution would be to use a status variable located in RAM instead of polling a value stored in flash. Once the bootloader has completed all Secure Boot configuration steps, it could update a dedicated RAM variable. The debugger could then periodically read this RAM location. Since RAM accesses do not interfere with flash erase/program operations, this approach avoids any potential Read-While-Write issue. I also noticed that the same method is used multiple times throughout the script, so I would recommend reviewing and updating all similar status checks, not just this particular one. Regarding HSE status: To determine whether the HSE firmware is installed, check bit 0 of the HSE GPR register at address 0x4039C028. If this bit is 1, the HSE firmware is present. To determine whether the HSE firmware has completed initialization and is ready to accept requests, check the HSE_STATUS_INIT_OK flag (bit 24) in the MU0 FSR register. Once this bit is set, HSE initialization is complete and services can be used. Re: S32K312 Secureboot and Program Flash Hello Lukas, Thank you for your reply. My understanding is that after the bootloader has been uploaded once with its initial value (0x1), it performs another Erase/Write cycle to apply Secure Boot (changing 0x1 → 0x9), and during this process the error appears to occur when the polling method attempts to read that address value. jeongwoo_0-1784877741730.png As you advised, we tried to use a status variable located in RAM. However, we distribute our software as a Hex file. In this case, if we use the address defined in the .map file, the RAM address differs from program to program, making it difficult to unify the writing script. As a result, we concluded that in order to check the Secure Boot, Secure Debug, and Configuration Lock status within the script, we need to use the values defined in the IVT. Therefore, based on your feedback, instead of applying a 1.5s delay after the HSE upload, we applied a method that checks the HSE_STATUS_INIT_OK flag (bit 24) of the MU0 FSR register. We removed the existing fixed waits (e.g., wait 1.5s, wait 3s), and modified the script so that, after a reset, it polls until that bit is set before proceeding with the flash write (FBL/APP loading). We added this method to every stage following System Reset and Sys.UP. In addition, we plan to change the status-check polling interval for each status from 0.5s to 1.5s. We have also added a wait before the first read after Go. We would greatly appreciate your opinion on whether these timing settings might be insufficient. So far, we have confirmed that writing with this script completes normally without any Fault, and that the device operates correctly when we perform GO after writing. (We have confirmed that the time it takes for the value at 0x400004 to change from 0x1 to 0x9 is approximately 800ms.) Regarding the previous issue where a HardFault occurred when the FBL was loaded 0.1s after the HSE was uploaded: when we checked the HSE status values you mentioned, we confirmed that all of them are reported as normal. The program functions also appear to execute correctly. This error (HardFault) appears when we load everything through HSE → FBL → APP and then perform GO. Given this, we would appreciate your opinion on whether it would be advisable to increase the delay time so that GO is executed after writing, as you recommended. Best regards, Re: S32K312 Secureboot and Program Flash Yes, waiting for HSE_STATUS_INIT_OK after sys.up and before starting any other programming operations is a good approach. This ensures that there is no read-while-write conflict between the HSE and the application core/programming tool. If the timeout used for checking the BOOT_SEQ bit is long enough for the programming operation to have already completed, that approach could also work. However, using a flag in RAM would be a cleaner solution. If you need a universal solution, a standard global variable placed in a common section is not ideal because its address is not guaranteed to remain constant across different applications. Instead, you could either define a dedicated RAM section at a fixed address and place the flag there or reserve an unused RAM location at a fixed address and access it directly through a pointer. Both approaches provide a stable location that can be shared independently of the application's memory layout. Regards, Lukas Re: S32K312 Secureboot and Program Flash Hello Lukas. As per the guidance you provided earlier, the image file (.elf) now runs successfully ("Running") without being stopped by vectbl. However, the binary file (.hex) still throws a "stopped by vectbl" error when I perform GO after uploading the app. This appears to be a symptom where "the App jumps to an invalid address in its execution flow and fails while trying to fetch the instruction at that location." Is there any way to resolve this issue? Even when the vectbl error occurs, the normal writing appears to complete correctly as originally intended upon POR (Power-On Reset), but I need to confirm whether this error is one that can be safely ignored. Thank you for your continued support. Best regards, jeongwoo_0-1785298132030.png
記事全体を表示
支援要請:S32 Design StudioによるARMライセンス更新エラー 親愛なるNXPサポートチームへ、 こんにちは、 S32 Design Studioのライセンス更新を試みる際に発生したエラーについてサポートをお願いしたいのでお願いしています。 以下に、私のライセンスの詳細と受信したエラーメッセージを示します。 < License Information ><ライセンス情報> ssean_0-1784761042324.png < Error Message ><エラーメッセージ> ssean_1-1784761084965.png ssean_2-1784761092125.png この問題を解決し、ライセンスの延長や更新を成功させる方法についてアドバイスをいただけますか? お時間とご協力に感謝いたします。 よろしくお願いいたします。 ソン・スヒョン Re: Request for Assistance: S32 Design Studio for ARM License Renewal Error こんにちは、 もう一度アクティベーションをお試しください。古いライセンスを返却しました。 Re: Request for Assistance: S32 Design Studio for ARM License Renewal Error @jiri_kral ライセンスは現在有効で、正常に動作しています。 ご協力いただきありがとうございます! よろしくお願いいたします。 ショーン・ソン
記事全体を表示
S32K348-GPIO EIRQ to DMA request Dear NXP Support Team, I.m trying now approach, where GPIO PTD6 has setting as EIRQ14 ,rising edge detection and I want to map this pin signal to the DMA channel, where I try get current value from PIT_1 Timer[0]. This is setup as FreeRunning. Seems that SIUL2 is set correctly for PTDA and I can see toggling on this pin when signal (1Hz) from signal generator is connect on related MCU pin. But DMA not working for me My guess here is that I have problem with finding proper chain from PTD6 ->DMAMUX-> DMA channel 4. and find where exactly I can find these information. From S32K3xx_DMAMUX_map.xlsx I got this: OndrejK_0-1784190602227.png so here is my first issue: Which source->request  is dedicated for PTD6(EIRQ14) ? And how is related Table 44 from RM manual? OndrejK_1-1784190821068.png  Here is fragments of my code which I working on now: Setup PTD6 void Setup_PTD6_EIRQ14_for_DMA(void) {     /* 1. Configuration of physical pin PTD6 via MSCR register */     // PTD6 corresponds to index MSCR[102] (as seen on your screenshot)     IP_SIUL2->MSCR[102] = 0;              // Clear register     IP_SIUL2->MSCR[102] |= (1 << 19);     // IBE = 1 (Input Buffer Enable - configures pin as input)     IP_SIUL2->IMCR[542-(512)] = 3u;     // Optional: if the signal floats, you can enable Pull-Up (PUE=1, PUS=1) or Pull-Down (PUE=1, PUS=0)     /* 2. Activation of edge detection on line EIRQ[14] */     // We want to capture the timestamp on every rising edge     IP_SIUL2->IREER0 |= (1 << 14);        // IREER0[EIRE14] = 1 (Enable Rising Edge)     IP_SIUL2->IFEER0 &= ~(1 << 14);       // IFEER0[EIRE14] = 0 (Disable Falling Edge)     /* 3. Request routing: Change from Interrupt to DMA */     // This step ensures that the edge does not wake up the CPU (NVIC), but triggers the DMA line instead     IP_SIUL2->DIRSR0 |= (1 << 14);        // DIRSR0[DIRS14] = 1 (Select DMA Request instead of Interrupt)     /* 4. Final enable of DMA request generation for EIRQ[14] */     IP_SIUL2->DIRER0 |= (1 << 14);        // DIRER0[EIRE14] = 1 (Activate DMA request line) }   and setup DMA channel: void Setup_eDMA_Channel4_Capture_PIT1(void) {     /* 1. DMAMUX Initialization for eDMA Channel 4 */     // Map EIRQ14 (source 14) to eDMA channel 4     IP_DMAMUX_1->CHCFG[4] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(7u);  // EIRQ14 is source 7 for DMAMUX_1     //IP_DMAMUX_0->CHCFG[4] = 0U;     /* 2. TCD Configuration for Channel 4 pointing to PIT_1 (Exact S32K3 bare-metal syntax) */     // Source: Current value of PIT_1 Timer 0     IP_TCD->TCD4_SADDR = (uint32_t)&(IP_PIT_1->TIMER[0].CVAL);     IP_TCD->TCD4_SOFF  = 0;       // Source does not increment     IP_TCD->TCD4_ATTR  = 0x0202;  // 32-bit source, 32-bit destination     // Minor Loop: Number of bytes transferred per single trigger     // In S32K3 this corresponds to the NBYTES_MLOFFNO register (no minor loop linking)     IP_TCD->NBYTES4.TCD4_NBYTES_MLOFFNO = 4;  // Transfer 4 bytes (32-bit) per trigger     // Destination: Our array in RAM     IP_TCD->TCD4_DADDR = (uint32_t)dma_timestamps;     IP_TCD->TCD4_DOFF  = 4;       // Shift by 4 bytes in RAM after each edge     // Circular buffer: wrap around to the beginning after filling the entire array     IP_TCD->TCD4_DLAST_SGA = -(BUFFER_SIZE * 4);     // Major Loop Counter: Total number of iterations in the loop     //IP_TCD->CITTER4.TCD4_CITER_ELINKNO = BUFFER_SIZE;     IP_TCD->CITER4.TCD4_CITER_ELINKNO = BUFFER_SIZE;     IP_TCD->BITER4.TCD4_BITER_ELINKNO = BUFFER_SIZE;     /* 3. eDMA channel activation for hardware triggers via official macro */     //IP_TCD->CH4_CSR |= DMA_TCD_CH4_CSR_ERQ_MASK;     /* 3. eDMA channel activation for hardware triggers (With asynchronous mode enabled) */     // Bit 0 (ERQ) = 1  -> Enables hardware triggers     // Bit 2 (EARQ) = 1 -> Enables asynchronous requests from external pins (SIUL2 EIRQ)     IP_TCD->CH4_CSR |= 3u;  // ERQ=1, EARQ=1 }   Here I guess is key line: IP_DMAMUX_1->CHCFG[4] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(7u);  // EIRQ14 is source 7 for DMAMUX_1 where I'm little bit confused which IP_DMAMUX and which DMAMUX_CHCFG_SOURCE I need to use and where is proper information about this. Best regards Ondrej    Re: S32K348-GPIO EIRQ to DMA request Hi@OndrejK "Is this meaning, that MCU have 32 TCD channels and TCD 0 to 15 is valid for DMAMUX_0 and TCD 15 to31 is for DMAMUX_1 ?" yes, you can find these info in the datasheet, I copy it for your reference. Senlent_0-1784272853624.png Re: S32K348-GPIO EIRQ to DMA request Hi Senlent, thank you for your answer. please, can you pointed me from where popup your meaning about TCD mapping?  Is this meaning, that MCU have 32 TCD channels and TCD 0 to 15 is valid for DMAMUX_0 and TCD 15 to31 is  for DMAMUX_1 ? So I'm still little bit confused about information regarding DMAMUX and eDMA.  Best regards  Ondrej Re: S32K348-GPIO EIRQ to DMA request Hi@OndrejK Your understanding is correct: PTD6->EIRQ14->DMAMUX1.SOURCE 7. IP_DMAMUX_1->CHCFG[4] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(7u); // EIRQ14 is source 7 for DMAMUX_1 However, the TDC settings are incorrect. My understanding is that they should be as follows: IP_DMAMUX_1->CHCFG[0] ->TCD 16 IP_DMAMUX_1->CHCFG[4] -> TCD 20 instead of TCD4 Re: S32K348-GPIO EIRQ to DMA request HI SenLent,  I made some changes in my code based on my observation. Here is my latest code: main initialization:       Setup_PTD6_EIRQ14_for_DMA();     Setup_PIT1_Timer0_FreeRunning();     Setup_DMAMUX_Channel0_ToTCD16_Capture_PIT1();      //clear EIRQ14 interrupt flag      IP_SIUL2->DISR0 = (1 << 14); and here is rest of code: void Setup_PTD6_EIRQ14_for_DMA(void) {     // 1. Aktivácia hodinového deliča pre filtre v SIUL2 (ak už nie je povolený inde)     IP_SIUL2->IFCPR = 0U; // Nastavenie deličky filtra na Functional Clock (bez dodatočného delenia) // 2. Voliteľne vypnite filter pre daný EIRQ index alebo ho nastavte na minimálny počet cyklov // Pre EIRQ14 (v závislosti od mapovania registrov IFMCR):     IP_SIUL2->IFMCR[14] = 0U; // 0U vypína digitálny filter, hrana prechádza okamžite ako čistý hardvérový trigger     /* 1. Configuration of physical pin PTD6 via MSCR register */     // PTD6 corresponds to index MSCR[102] (as seen on your screenshot)     IP_SIUL2->MSCR[102] = 0;              // Clear register     IP_SIUL2->MSCR[102] |= (1 << 19);     // IBE = 1 (Input Buffer Enable - configures pin as input)     IP_SIUL2->IMCR[542-(512)] = 3u;     // Optional: if the signal floats, you can enable Pull-Up (PUE=1, PUS=1) or Pull-Down (PUE=1, PUS=0)     /* 2. Activation of edge detection on line EIRQ[14] */     // We want to capture the timestamp on every rising edge     IP_SIUL2->IREER0 |= (1 << 14);        // IREER0[EIRE14] = 1 (Enable Rising Edge)     IP_SIUL2->IFEER0 &= ~(1 << 14);       // IFEER0[EIRE14] = 0 (Disable Falling Edge)     /* 3. Request routing: Change from Interrupt to DMA */     // This step ensures that the edge does not wake up the CPU (NVIC), but triggers the DMA line instead     IP_SIUL2->DIRSR0 |= (1 << 14);        // DIRSR0[DIRS14] = 1 (Select DMA Request instead of Interrupt)     /* 4. Final enable of DMA request generation for EIRQ[14] */     IP_SIUL2->DIRER0 |= (1 << 14);        // DIRER0[EIRE14] = 1 (Activate DMA request line) }   void Setup_DMAMUX_Channel0_ToTCD16_Capture_PIT1(void) {     /* 1. DMAMUX Initialization for eDMA Channel 4 */    // Podľa NXP tabuľky prislúcha SIUL2 DMA request 4 zdrojový index 7u     //IP_DMAMUX_1->CHCFG[4] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(7u);     //follow doc ,first disable channel 4, then configure it, and finally enable it     IP_DMAMUX_1->CHCFG[0] = 0u;     /* 2. TCD Configuration for Channel 4 pointing to PIT_1 (Exact S32K3 bare-metal syntax) */     // Source: Current value of PIT_1 Timer 0     IP_TCD->TCD16_SADDR = (uint32_t)&(IP_PIT_1->TIMER[0].CVAL);     IP_TCD->TCD16_SOFF  = 0;       // Source does not increment     IP_TCD->TCD16_ATTR  = 0x0202;  // 32-bit source, 32-bit destination     // Minor Loop: Number of bytes transferred per single trigger     // In S32K3 this corresponds to the NBYTES_MLOFFNO register (no minor loop linking)     IP_TCD->NBYTES16.TCD16_NBYTES_MLOFFNO = 4;  // Transfer 4 bytes (32-bit) per trigger     // Destination: Our array in RAM     IP_TCD->TCD16_DADDR = (uint32_t)dma_timestamps;     IP_TCD->TCD16_DOFF  = 4;       // Shift by 4 bytes in RAM after each edge     // Circular buffer: wrap around to the beginning after filling the entire array     IP_TCD->TCD16_DLAST_SGA = -(BUFFER_SIZE * 4);     // Major Loop Counter: Total number of iterations in the loop     //IP_TCD->CITTER20.TCD20_CITER_ELINKNO = BUFFER_SIZE;     IP_TCD->CITER16.TCD16_CITER_ELINKNO = BUFFER_SIZE;     IP_TCD->BITER16.TCD16_BITER_ELINKNO = BUFFER_SIZE;     //IP_TCD->CH16_CSR |= 3u;  // ERQ=1, EARQ=1     //enable DMAMUX channel 0     IP_DMAMUX_1->CHCFG[0] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(6u);     __asm volatile ("nop");     __asm volatile ("nop");     IP_TCD->CH16_CSR |= 3u; }   And I'm still not able fire up DMA transfer by EIRQ(14) when is this assert. On Debugger I can see flag appear when I change signal on MCU PTD6 pin . Next I can start manually DMA transfer by TCD16_CSR START bit and on TCD channel CITTER value is decreased and value form PIT1_TIMER[0] is stored to my dma_timestamps array. Btw: This should be defined in "normal" SRAM section. I had before set this to data_cache section , what lead to DMA "Destination bus error" new definition: __attribute__((aligned(32))) __attribute__((section(".mcal_data"))) uint32_t dma_timestamps[BUFFER_SIZE];   but If I skip manual START (need to be never set from beginning of code) and I change signal on PTD6 pin , DMA channel do nothing , CITTER register stay on initialize value. Please, can you help identify where I have problem? I still guess that I have issue with proper connection from PTD6-EIRQ(14) asserted flag to the TCD16 channel.  Maybe correct source for DMAMUX channel? For DMAMUX1-CH[0] I tested all sources (1 to 😎 of SUIL2 instances listed on DMAMUX excel table, without any success , but here I'm not sure if my steps was correct too     Re: S32K348-GPIO EIRQ to DMA request Hi@OndrejK I've created a demo for your reference, using PTD6 to trigger DMA for a single data transfer. It's based on S32K344 + RTD 7.0.1. And I've tested it; I can assure you that my understanding is correct. For PTD6, the source should 7.  IP_DMAMUX_1->CHCFG[0] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(7u); Senlent_1-1784689141057.png Re: S32K348-GPIO EIRQ to DMA request Hi SenLent, about choosing DMA channel here was my imagine that I can choose freely one from related DMA_MUX groups Meantime I tested other DMA_MUX <->TCD combination and on my side working only next one  IP_DMAMUX_1->CHCFG[3] and TCD16. I got try next others: IP_DMAMUX_1->CHCFG[4] and TCD17. IP_DMAMUX_1->CHCFG[0] and TCD16. And please, why exactly only IP_DMAMUX_1->CHCFG[3] and TCD16. working ? And  how is the relationship between IP_DMAMUX_1->CHCFG[xx] and TCDyy ? Re: S32K348-GPIO EIRQ to DMA request Hi Senlent, thank you very match for your example. After some changes I have working example now. I attach my adjusted project , where was one important issue: SIUL ICU with DMA req enabling  was set up before whole DMA TCD channel was fully configured. In that case TCD_SADDR and TCD_DADDR was empty(zero values) and after that enabling DMA req in SUIL leads to DMA error - "Source bus error" what bring me sense.  After change order of this initialization. example start working for me. But I have still problem understand exact relation between DMAMUX channel and TCD channel. You wrote that DMAMUX should by configured as CHCGF[0].  After downloading and starting app in our S32k344 custom development board i found that DMAMUX-CHCFG[3] is configured and exactly in code in function  Dma_Mux_Ip_Init_Privileged is  line which exactly lead to this configuration: RegisterIndex = DMA_MUX_IP_GATE_OFFSET((pConfig->pChannelConfigArr[ChannelCount].Channel)); here is screenshot from lauterbach Trace32 debugger, where you can see final setup after all initialization steps: OndrejK_0-1784795174339.png In Design studio I have next configuration after updating RTD to 7.0.1: OndrejK_1-1784795478141.png is this correct and what does it mean that here  is  choice of 3 DMA Mux sources? Re: S32K348-GPIO EIRQ to DMA request Hi@OndrejK Good to hear that. This configuration tool may cause some confusion for developers who are just getting started. For the S32K348, there is no DMAMUX_3; only DMAMUX_0 and DMAMUX_1 exist. •For the S32K310, S32K311, and S32K312: DMAMUX_0 channels 0–5 and DMAMUX_1 channels 0–5 are mapped to eDMA Transfer Control Descriptor (TCD) 0–5 and eDMA Transfer Control Descriptor (TCD) 6–11, respectively. Programming of DMAMUX_0 channels 6–15 and DMAMUX_1 channels 6–15 is therefore not expected; however, if programmed, any access will result in either an error response for channels 8–15 or no error response for channels 6–7. •For the remaining S32K3xx devices: DMAMUX_0 channels 0–15 and DMAMUX_1 channels 0–15 are mapped to eDMA Transfer Control Descriptors (TCDs) 0–15 and eDMA Transfer Control Descriptors (TCDs) 16–31, respectively. The above is taken from the data sheet, and it is easy to understand: The “DMA Hardware Channel” corresponds to the TCD number. When you select DMA_CHANNEL_0 ~ DMA_CHANNEL_15, DMAMUX_0 is used by default; when you select 16–31, DMAMUX_1 is used by default. For example, in this topic, PTD6 corresponds to Source 7 of DMAMUX_1, so “DMA Hardware Channel” can be set to any value between DMA_CHANNEL_16 and DMA_CHANNEL_31. Let’s take another example: if you select EIRQ 7 to trigger DMA, then “Dma Hardware Channel” can be set to any value between DMA_CHANNEL_0 and DMA_CHANNEL_15. Re: S32K348-GPIO EIRQ to DMA request Hi@OndrejK Here is the right order: IP_DMAMUX_0>CHCFG[0] and TCD0. IP_DMAMUX_0->CHCFG[1] and TCD1. IP_DMAMUX_0->CHCFG[2] and TCD2. IP_DMAMUX_0->CHCFG[3] and TCD3. IP_DMAMUX_0->CHCFG[4] and TCD4. IP_DMAMUX_0->CHCFG[5] and TCD5. IP_DMAMUX_0->CHCFG[6] and TCD6. IP_DMAMUX_0->CHCFG[7] and TCD7. IP_DMAMUX_0->CHCFG[8] and TCD8. IP_DMAMUX_0->CHCFG[9] and TCD9. IP_DMAMUX_0->CHCFG[10] and TCD10. IP_DMAMUX_0->CHCFG[11] and TCD11. IP_DMAMUX_0->CHCFG[12] and TCD12. IP_DMAMUX_0->CHCFG[13] and TCD13. IP_DMAMUX_0->CHCFG[14] and TCD14. IP_DMAMUX_0->CHCFG[15] and TCD15. IP_DMAMUX_1->CHCFG[0] and TCD16. IP_DMAMUX_1->CHCFG[1] and TCD17. IP_DMAMUX_1->CHCFG[2] and TCD18. IP_DMAMUX_1->CHCFG[3] and TCD19. IP_DMAMUX_1->CHCFG[4] and TCD20. IP_DMAMUX_1->CHCFG[5] and TCD21. IP_DMAMUX_1->CHCFG[6] and TCD22. IP_DMAMUX_1->CHCFG[7] and TCD23. IP_DMAMUX_1->CHCFG[8] and TCD24. IP_DMAMUX_1->CHCFG[9] and TCD25. IP_DMAMUX_1->CHCFG[10] and TCD26. IP_DMAMUX_1->CHCFG[11] and TCD27. IP_DMAMUX_1->CHCFG[12] and TCD28. IP_DMAMUX_1->CHCFG[13] and TCD29. IP_DMAMUX_1->CHCFG[14] and TCD30. IP_DMAMUX_1->CHCFG[15] and TCD31. Re: S32K348-GPIO EIRQ to DMA request Hi Senlent, meantime I tested this same project with my other colleague , which use S32DS version 3.6.3 and Ozone debugger and his results is same as your.  Seems that you have right. but I'm completely out what's going on on my side?  😞 Re: S32K348-GPIO EIRQ to DMA request Hi SenLent, I made test on latest S32 DS project  and I added more DMA_MUX configurations. Here is screenshot of my setup: OndrejK_0-1785138171795.png and here is result after download build code to our board: OndrejK_2-1785138306423.png As you can see, your described order for assigning DMA_MUX and TCD is not followed. Is this same bug on RTD software or ? Re: S32K348-GPIO EIRQ to DMA request Hi@OndrejK It's obvious that this might be related to the debugger you're using, or perhaps the version of the debugger. Re: S32K348-GPIO EIRQ to DMA request Hi@OndrejK This is the demo you provided; I haven't made any modifications. These are my test results. Senlent_0-1785142055872.png Re: S32K348-GPIO EIRQ to DMA request here is my project, just adjusted latest one which I attached before  I created 2 channel on DMA_MUX_0 as DMA_Channel_0 and DMA_Channel_1. and for these channel is assigned DMA_MUX_0->CHCFG[3] and DMA-MUX_0-CHCFG[2]. Same "mixed" order you can see on DMA_MUX_1 Re: S32K348-GPIO EIRQ to DMA request Hi@OndrejK I can't see what the problem is. Could you explain it more clearly, or provide the complete test project so I can tell you where your doubts lie? Re: S32K348-GPIO EIRQ to DMA request Hi SenLent,  finaly i found where is "issue" here. Problem is that Ozone and Lauterbach just presenting different way od DMA_MUX->CHCFG and final trick is that these CHCFG register is mapped on MCU side (base adress for DMA_MUX_1 is 0x40284000) in this order: 0x40284000 ->CHCFG[3] 0x40284001  ->CHCFG[2] 0x40284002 ->CHCFG[1] 0x40284003 ->CHCFG[0] 0x40284004 ->CHCFG[7] 0x40284005 ->CHCFG[6] 0x40284006 ->CHCFG[5] 0x40284007 ->CHCFG[4] 0x40284008 ->CHCFG[11] .... see my screenshot below OndrejK_0-1785316902701.png and from this moment my result give me sense and corresponding with your tips 🙂 Thank you for your support  and I guess that this ticked can be resolved Re: S32K348-GPIO EIRQ to DMA request Hi@OndrejK Good, please click "ACCEPT AS SOLUTION" to close this topic.
記事全体を表示
i.MX8のAndroidデバイスでIPTV再生パフォーマンスを最適化するにはどうすればいいですか? こんにちは、みんな、 現在、i.MX8プラットフォームをベースにAndroidデバイスでIPTV再生を評価しており、コミュニティの経験から学びたいと思っています。 テスト中に、再生品質は以下のようないくつかの要因によって変動することに気づきました: ハードウェアビデオデコード構成 ネットワークの安定性(イーサネット対Wi-Fi) ライブHLSストリームのバッファサイズ ExoPlayerまたはVLCの設定 再生中のCPUとメモリの使用状況 i.MX プロセッサを扱う方にお聞きしたいのですが、ライブTVストリーミングで最も安定した結果をもたらした設定や最適化は何ですか? 具体的には、以下の点に興味があります。 ExoPlayerの推奨バッファ設定 ハードウェアデコーダーのベストプラクティス ライブイベント中のバッファリングを減らすためのヒント Android TVデバイス向けのパフォーマンスチューニング ネットワークのトラブルシューティング方法 実際の使用経験や、再生安定性を向上させるための推奨事項などをお聞かせいただければ幸いです。 ご回答をお待ちしています。 Re: How do you optimize IPTV playback performance on i.MX8 Android devices? こんにちは、 NXP BSPは、公式に推奨されるIPTVパラメータを提供していません。 NXPのAndroidリリースには、統合されたマルチメディアフレームワーク、コーデック、i.MX プロセッサ向けのプラットフォーム最適化が含まれています。マルチメディア性能を評価する際には、最新のBSPバージョンを使用することを一般的に推奨します。 よろしくお願いします、 志明
記事全体を表示
S32K348-GPIO EIRQ 到 DMA 请求 尊敬的恩智浦技术支持团队: 我现在尝试的方法,将 GPIO PTD6 设置为 EIRQ14,上升沿检测,我想将此引脚信号映射到 DMA 通道,我尝试从 PIT_1 Timer[0] 获取当前值。这是自由奔跑模式。 看起来 SIUL2 已正确设置为 PTDA,当信号发生器发出的信号 (1Hz) 连接到相关的 MCU 引脚时,我可以看到该引脚切换。 但是DMA对我来说不起作用 我的猜测是,我的问题在于找不到从 PTD6 -> DMAMUX -> DMA 通道 4 的正确链路,也找不到在哪里可以找到这些信息。 从 S32K3xx_DMAMUX_map.xlsx 文件中我得到了以下内容: OndrejK_0-1784190602227.png 我的第一个问题是:哪个源->请求是专用的 PTD6(EIRQ14)? RM手册中的表44与此有何关联? OndrejK_1-1784190821068.png 以下是我目前正在编写的部分代码: 设置 PTD6 void Setup_PTD6_EIRQ14_for_DMA ( void ) { /* 1. 通过 MSCR 寄存器配置物理引脚 PTD6 */     // PTD6 对应于索引 MSCR[102](如您的屏幕截图所示)     IP_SIUL2 -> MSCR [ 102 ] = 0 ; // 清除寄存器     IP_SIUL2 -> MSCR [ 102 ] |= ( 1 << 19 ); // IBE = 1(输入缓冲使能 - 将引脚配置为输入)     IP_SIUL2 -> IMCR [ 542 - ( 512 )] = 3u ;     // 可选:如果信号是浮动的,您可以启用上拉(PUE=1,PUS=1)或下拉(PUE=1,PUS=0) /* 2. 激活 EIRQ[14] 线上的边缘检测 */     我们希望捕获每个上升沿的时间戳     IP_SIUL2 -> IREER0 |= ( 1 << 14 ); // IREER0[EIRE14] = 1 (启用上升沿)     IP_SIUL2 -> IFEER0 &= ~ ( 1 << 14 ); // IFEER0[EIRE14] = 0 (禁用下降沿) /* 3. 请求路由:从中断更改为 DMA */     // 此步骤确保边沿不会唤醒 CPU(NVIC),而是触发 DMA 线路。     IP_SIUL2 -> DIRSR0 |= ( 1 << 14 ); // DIRSR0[DIRS14] = 1 (选择 DMA 请求而不是中断) /* 4. 最终启用 EIRQ[14] 的 DMA 请求生成 */     IP_SIUL2 -> DIRER0 |= ( 1 << 14 ); // DIRER0[EIRE14] = 1 (激活 DMA 请求线) }   并建立DMA通道: void Setup_eDMA_Channel4_Capture_PIT1 ( void ) { /* 1. eDMA 通道 4 的 DMAMUX 初始化 */     // 将 EIRQ14(源 14)映射到 eDMA 通道 4     IP_DMAMUX_1 -> CHCFG [ 4 ] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE ( 7u ); // EIRQ14 是 DMAMUX_1 的源 7     //IP_DMAMUX_0->CHCFG[4] = 0U; /* 2. 通道 4 的 TCD 配置指向 PIT_1(完全符合 S32K3 裸机语法) */     // 来源:PIT_1 定时器 0 的当前值     IP_TCD -> TCD4_SADDR = ( uint32_t ) & ( IP_PIT_1 -> TIMER [ 0 ]. CVAL );     IP_TCD -> TCD4_SOFF  = 0 ; // 源值不递增     IP_TCD -> TCD4_ATTR  = 0x0202 ; // 32 位源,32 位目标     // 次要循环:每次触发传输的字节数     // 在 S32K3 中,这对应于 NBYTES_MLOFFNO 寄存器(无次要循环链接)     IP_TCD -> NBYTES4 . TCD4_NBYTES_MLOFFNO = 4 ; // 每次触发信号传输 4 字节(32 位)     // 目标位置:内存中的数组     IP_TCD -> TCD4_DADDR = ( uint32_t ) dma_timestamps ;     IP_TCD -> TCD4_DOFF  = 4 ; // 每次边沿移动后,RAM 中的数据左移 4 个字节     // 循环缓冲区:填充完整个数组后循环回到数组开头     IP_TCD -> TCD4_DLAST_SGA = - ( BUFFER_SIZE * 4 );     // 主要循环计数器:循环中的总迭代次数     //IP_TCD->CITTER4.TCD4_CITER_ELINKNO = BUFFER_SIZE;     IP_TCD -> CITER4 . TCD4_CITER_ELINKNO = BUFFER_SIZE ;     IP_TCD -> BITER4 . TCD4_BITER_ELINKNO = BUFFER_SIZE ; /* 3. 通过官方宏激活硬件触发信号的 eDMA 通道 */     //IP_TCD->CH4_CSR |= DMA_TCD_CH4_CSR_ERQ_MASK; /* 3. 硬件触发信号的 eDMA 通道激活(启用异步模式) */     // 位 0 (ERQ) = 1 -> 启用硬件触发信号     // 位 2 (EARQ) = 1 -> 启用来自外部引脚的异步请求 (SIUL2 EIRQ)     IP_TCD -> CH4_CSR |= 3u ; // ERQ=1,EARQ=1 }   我想关键就在这里: IP_DMAMUX_1 -> CHCFG [ 4 ] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE ( 7u ); // EIRQ14 是 DMAMUX_1 的源 7 我有点困惑,不知道应该使用哪个 IP_DMAMUX 和哪个 DMAMUX_CHCFG_SOURCE,也不知道哪里可以找到相关的正确信息。 此致 翁德雷   Re: S32K348-GPIO EIRQ to DMA request 你好@OndrejK “这是否意味着MCU有32个TCD通道,其中TCD 0到15对DMAMUX_0有效,TCD 15到31对DMAMUX_1有效? ” 是的,这些信息可以在数据手册中找到,我复制下来供您参考。 Senlent_0-1784272853624.png Re: S32K348-GPIO EIRQ to DMA request 你好 Senlent, 感谢您的解答。 请问您能否指出您所说的TCD映射的含义是从哪里产生的? 这是否意味着,MCU 有 32 个 TCD 通道,其中 TCD 0 到 15 对 DMAMUX_0 有效,而 TCD 15 到 31 对 DMAMUX_0 无效? 对于 DMAMUX_1? 所以,我对DMAMUX和eDMA的相关信息仍然有些困惑。 此致 翁德雷 Re: S32K348-GPIO EIRQ to DMA request 你好@OndrejK 你的理解是正确的: PTD6->EIRQ14->DMAMUX1.SOURCE 7. IP_DMAMUX_1->CHCFG[4] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(7u); // EIRQ14 is source 7 for DMAMUX_1 但是,TDC 设置不正确。 我的理解是,它们应该如下所示: IP_DMAMUX_1->CHCFG[0] ->TCD 16 IP_DMAMUX_1->CHCFG[4] -> TCD 20 而不是 TCD4 Re: S32K348-GPIO EIRQ to DMA request 嗨 SenLent, 我根据观察结果对代码进行了一些修改。 这是我最新的代码: 主初始化: Setup_PTD6_EIRQ14_for_DMA ();     setup_PIT1_Timer0_FreeRunning ();     Setup_DMAMUX_Channel0_ToTCD16_Capture_PIT1 ();      //清除 EIRQ14 中断标志      IP_SIUL2 -> DISR0 = ( 1 << 14 ); 以下是其余代码: void Setup_PTD6_EIRQ14_for_DMA ( void ) {     // 1. Aktivácia hodinového deliča pre filtre v SIUL2 (ak už nie je povolený inde)     IP_SIUL2 -> IFCPR = 0U ; // 功能时钟的 Nastavenie deličky filtra (bez dodatočného delenia) // 2. Voliteľne vypnite 过滤器预 daný EIRQ 索引 alebo ho nastavte na minimálny počet cyklov // Pre EIRQ14(v závislosti od mapovania registrov IFMCR):     IP_SIUL2 -> IFMCR [ 14 ] = 0U ; // 0U vypína digitalálny过滤器,hrana prechádza okamžite ako čistý Hardvérový触发器 /* 1. 通过 MSCR 寄存器配置物理引脚 PTD6 */     // PTD6 对应于索引 MSCR[102](如您的屏幕截图所示)     IP_SIUL2 -> MSCR [ 102 ] = 0 ; // 清除寄存器     IP_SIUL2 -> MSCR [ 102 ] |= ( 1 << 19 ); // IBE = 1(输入缓冲使能 - 将引脚配置为输入)     IP_SIUL2 -> IMCR [ 542 - ( 512 )] = 3u ;     // 可选:如果信号是浮动的,您可以启用上拉(PUE=1,PUS=1)或下拉(PUE=1,PUS=0) /* 2. 激活 EIRQ[14] 线上的边缘检测 */     我们希望捕获每个上升沿的时间戳     IP_SIUL2 -> IREER0 |= ( 1 << 14 ); // IREER0[EIRE14] = 1 (启用上升沿)     IP_SIUL2 -> IFEER0 &= ~ ( 1 << 14 ); // IFEER0[EIRE14] = 0 (禁用下降沿) /* 3. 请求路由:从中断更改为 DMA */     // 此步骤确保边沿不会唤醒 CPU(NVIC),而是触发 DMA 线路。     IP_SIUL2 -> DIRSR0 |= ( 1 << 14 ); // DIRSR0[DIRS14] = 1 (选择 DMA 请求而不是中断) /* 4. 最终启用 EIRQ[14] 的 DMA 请求生成 */     IP_SIUL2 -> DIRER0 |= ( 1 << 14 ); // DIRER0[EIRE14] = 1 (激活 DMA 请求线) }   void Setup_DMAMUX_Channel0_ToTCD16_Capture_PIT1 ( void ) { /* 1. eDMA 通道 4 的 DMAMUX 初始化 */    // Podľa NXP tabuľky prislúcha SIUL2 DMA 请求 4 zdrojový 索引 7u     //IP_DMAMUX_1->CHCFG[4] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(7u);     //按照文档操作,先禁用通道 4,然后配置它,最后启用它。     IP_DMAMUX_1 -> CHCFG [ 0 ] = 0u ; /* 2. 通道 4 的 TCD 配置指向 PIT_1(完全符合 S32K3 裸机语法) */     // 来源:PIT_1 定时器 0 的当前值     IP_TCD -> TCD16_SADDR = ( uint32_t ) & ( IP_PIT_1 -> TIMER [ 0 ]. CVAL );     IP_TCD -> TCD16_SOFF  = 0 ; // 源值不递增     IP_TCD -> TCD16_ATTR  = 0x0202 ; // 32 位源,32 位目标     // 次要循环:每次触发传输的字节数     // 在 S32K3 中,这对应于 NBYTES_MLOFFNO 寄存器(无次要循环链接)     IP_TCD -> NBYTES16 . TCD16_NBYTES_MLOFFNO = 4 ; // 每次触发传输 4 字节(32 位)     // 目标位置:内存中的数组     IP_TCD -> TCD16_DADDR = ( uint32_t ) dma_timestamps ;     IP_TCD -> TCD16_DOFF  = 4 ; // 每次边沿移动后,RAM 中的数据左移 4 个字节     // 循环缓冲区:填充完整个数组后循环回到数组开头     IP_TCD -> TCD16_DLAST_SGA = - ( BUFFER_SIZE * 4 );     // 主要循环计数器:循环中的总迭代次数     //IP_TCD->CITTER20.TCD20_CITER_ELINKNO = BUFFER_SIZE;     IP_TCD -> CITER16 . TCD16_CITER_ELINKNO = BUFFER_SIZE ;     IP_TCD -> BITER16 . TCD16_BITER_ELINKNO = BUFFER_SIZE ;     //IP_TCD->CH16_CSR |= 3u; // ERQ=1,EARQ=1     //启用DMAMUX通道0     IP_DMAMUX_1 -> CHCFG [ 0 ] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE ( 6u ); __asm volatile ( "nop" ); __asm volatile ( "nop" );     IP_TCD -> CH16_CSR |= 3u ; }   我仍然无法通过 EIRQ(14) 启动 DMA 传输,即使出现此断言。在调试器中,当我改变MCU PTD6引脚上的信号时,可以看到标志出现。 接下来,我可以通过 TCD16_CSR START 位手动启动 DMA 传输,TCD 通道上的 CITTER 值会减小,并且 PIT1_TIMER[0] 中的值会被存储到我的 dma_timestamps 数组中。 顺便说一下:这应该在“普通”SRAM部分定义。我之前将其设置为数据缓存段,导致出现 DMA“目标总线错误”。 新定义: __attribute__ ((对齐( 32 ))) __attribute__ ((部分( ".mcal_data" ))) uint32_t dma_timestamps [ BUFFER_SIZE ];   但是,如果我跳过手动 START(从代码开始就不需要设置),并且我更改 PTD6 引脚上的信号,DMA 通道不会执行任何操作,CITTER 寄存器保持在初始化值。 请问您能帮我找出问题所在吗? 我仍然认为 PTD6-EIRQ(14) 钳位标志与 TCD16 通道之间的连接存在问题。 可能是DMAMUX通道的正确来源? 对于 DMAMUX1-CH[0],我测试了所有信号源(1 到 😎 我尝试了DMAMUX Excel表格中列出的SUIL2实例,但没有成功,而且我也不确定我的步骤是否正确。     Re: S32K348-GPIO EIRQ to DMA request 你好@OndrejK 我创建了一个演示供您参考,使用 PTD6 触发 DMA 进行单次数据传输。 它基于 S32K344 + RTD 7.0.1。 我已经测试过了; 我可以向你保证,我的理解是正确的。 对于 PTD6,来源应为 7。  IP_DMAMUX_1 -> CHCFG [ 0 ] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE ( 7u ); Senlent_1-1784689141057.png Re: S32K348-GPIO EIRQ to DMA request 你好 Senlent, 非常感谢你提供的例子。 经过一些修改,我现在有了可以运行的示例。我附上了修改后的项目文件,其中存在一个重要问题: 在整个 DMA TCD 通道完全配置之前,已设置了启用 DMA 请求的 SIUL ICU。在这种情况下,TCD_SADDR 和 TCD_DADDR 为空(值为零),之后在 SUIL 中启用 DMA 请求导致 DMA 错误 - “源总线错误”,这让我明白了。 更改初始化顺序后。例如,它开始对我有用。 但我仍然不太理解DMAMUX通道和TCD通道之间的确切关系。 您写道,DMAMUX 应该配置为 CHCGF[0]。 在我们的 S32k344 定制开发板上下载并启动应用程序后,我发现 DMAMUX-CHCFG[3] 已配置,并且确切地说,在函数Dma_Mux_Ip_Init_Privileged 的代码行中,有一行代码导致了此配置: RegisterIndex = DMA_MUX_IP_GATE_OFFSET((pConfig->pChannelConfigArr[ChannelCount].Channel)); 这是 lauterbach Trace32 调试器的屏幕截图,您可以在其中看到所有初始化步骤之后的最终设置: OndrejK_0-1784795174339.png 在将 RTD 更新到 7.0.1 版本后,我在 Design Studio 中配置如下: OndrejK_1-1784795478141.png 这样理解是否正确?这里可以选择 3 个 DMA 复用源,这意味着什么? Re: S32K348-GPIO EIRQ to DMA request 你好@OndrejK 听到这个消息真好。 对于刚入门的开发人员来说,这个配置工具可能会让他们感到困惑。 对于 S32K348,没有 DMAMUX_3;只有 DMAMUX_0 和 DMAMUX_1。 •对于 S32K310、S32K311 和 S32K312:DMAMUX_0 通道 0–5 和 DMAMUX_1 通道 0–5 分别映射到 eDMA 传输控制描述符 (TCD) 0–5 和 eDMA 传输控制描述符 (TCD) 6–11。因此,不应编程 DMAMUX_0 通道 6-15 和 DMAMUX_1 通道 6-15;但是,如果进行了编程,任何访问都将导致通道 8-15 出现错误响应,或者通道 6-7 没有错误响应。 •对于其余的 S32K3xx 设备:DMAMUX_0 通道 0–15 和 DMAMUX_1 通道 0–15 分别映射到 eDMA 传输控制描述符 (TCD) 0–15 和 eDMA 传输控制描述符 (TCD) 16–31。 以上内容摘自数据手册,很容易理解: “ DMA硬件通道”对应于TCD编号。 当您选择 DMA_CHANNEL_0 到 DMA_CHANNEL_15 时,默认使用 DMAMUX_0; 当您选择 16–31 时,默认使用 DMAMUX_1。 例如,在本主题中,PTD6 对应于 DMAMUX_1 的源 7,因此“DMA 硬件通道”可以设置为 DMA_CHANNEL_16 到 DMA_CHANNEL_31 之间的任何值。 我们再举一个例子:如果您选择 EIRQ 7 来触发 DMA,则“DMA 硬件通道”可以设置为 DMA_CHANNEL_0 到 DMA_CHANNEL_15 之间的任何值。 Re: S32K348-GPIO EIRQ to DMA request 嗨 SenLent, 关于选择DMA通道,我的想法是可以从相关的DMA_MUX组中自由选择一个。 同时,我测试了其他 DMA_MUX<-> 和 TCD 的组合,在我这边只有下一个组合可以正常工作。 IP_DMAMUX_1->CHCFG[3] 和 TCD16。 接下来我尝试了其他方法: IP_DMAMUX_1->CHCFG[4] 和 TCD17。 IP_DMAMUX_1->CHCFG[0] 和 TCD16。 请问为什么只有 IP_DMAMUX_1->CHCFG[3] 和 TCD16?在职的 ? IP_DMAMUX_1->CHCFG[xx] 与 TCDyy 之间是什么关系? Re: S32K348-GPIO EIRQ to DMA request 你好@OndrejK 正确的顺序是: IP_DMAMUX_0>CHCFG[0] 和 TCD0。 IP_DMAMUX_0->CHCFG[1] 和 TCD1。 IP_DMAMUX_0->CHCFG[2] 和 TCD2。 IP_DMAMUX_0->CHCFG[3] 和 TCD3。 IP_DMAMUX_0->CHCFG[4] 和 TCD4。 IP_DMAMUX_0->CHCFG[5] 和 TCD5。 IP_DMAMUX_0->CHCFG[6] 和 TCD6。 IP_DMAMUX_0->CHCFG[7] 和 TCD7。 IP_DMAMUX_0->CHCFG[8] 和 TCD8。 IP_DMAMUX_0->CHCFG[9] 和 TCD9。 IP_DMAMUX_0->CHCFG[10] 和 TCD10。 IP_DMAMUX_0->CHCFG[11] 和 TCD11。 IP_DMAMUX_0->CHCFG[12] 和 TCD12。 IP_DMAMUX_0->CHCFG[13] 和 TCD13。 IP_DMAMUX_0->CHCFG[14] 和 TCD14。 IP_DMAMUX_0->CHCFG[15] 和 TCD15。 IP_DMAMUX_1->CHCFG[0] 和 TCD16。 IP_DMAMUX_1->CHCFG[1] 和 TCD17。 IP_DMAMUX_1->CHCFG[2] 和 TCD18。 IP_DMAMUX_1->CHCFG[3] 和 TCD19。 IP_DMAMUX_1->CHCFG[4] 和 TCD20。 IP_DMAMUX_1->CHCFG[5] 和 TCD21。 IP_DMAMUX_1->CHCFG[6] 和 TCD22。 IP_DMAMUX_1->CHCFG[7] 和 TCD23。 IP_DMAMUX_1->CHCFG[8] 和 TCD24。 IP_DMAMUX_1->CHCFG[9] 和 TCD25。 IP_DMAMUX_1->CHCFG[10] 和 TCD26。 IP_DMAMUX_1->CHCFG[11] 和 TCD27。 IP_DMAMUX_1->CHCFG[12] 和 TCD28。 IP_DMAMUX_1->CHCFG[13] 和 TCD29。 IP_DMAMUX_1->CHCFG[14] 和 TCD30。 IP_DMAMUX_1->CHCFG[15] 和 TCD31。 Re: S32K348-GPIO EIRQ to DMA request 嗨 SenLent, 我在最新的 S32 DS 项目上进行了测试,并添加了更多 DMA_MUX 配置。 这是我的设置截图: OndrejK_0-1785138171795.png 以下是将版本代码下载到我们的板后的结果: OndrejK_2-1785138306423.png 如您所见,您所描述的 DMA_MUX 和 TCD 的分配顺序并未得到遵循。 RTD软件也存在同样的bug吗? Re: S32K348-GPIO EIRQ to DMA request 这是我的项目,我只是调整了我之前附上的最新版本。 我在 DMA_MUX_0 上创建了 2 个通道,分别命名为 DMA_Channel_0 和 DMA_Channel_1。 对于这些通道,分配了 DMA_MUX_0->CHCFG[3] 和 DMA-MUX_0-CHCFG[2]。 DMA_MUX_1 上也出现了同样的“混合”顺序。 Re: S32K348-GPIO EIRQ to DMA request 你好@OndrejK 这是您提供的演示版本;我没有做任何修改。 这是我的检测结果。 Senlent_0-1785142055872.png Re: S32K348-GPIO EIRQ to DMA request 你好@OndrejK 我看不出问题出在哪里。您能否解释得更清楚一些,或者提供完整的测试项目,以便我能告诉您您的疑问出在哪里? Re: S32K348-GPIO EIRQ to DMA request 你好@OndrejK 很明显,这可能与您使用的调试器或调试器的版本有关。 Re: S32K348-GPIO EIRQ to DMA request 你好 Senlent, 同时,我与另一位同事一起测试了同一个项目,他使用的是 S32DS 3.6.3 版本。Ozone调试器及其结果与你的相同。 看来你是对的。但我完全不清楚我这边发生了什么? 😞 Re: S32K348-GPIO EIRQ to DMA request 嗨 SenLent, 我终于找到问题所在了。 问题在于 Ozone 和 Lauterbach 只是提出了不同的 DMA_MUX->CHCFG 方法,最终的技巧是这些 CHCFG 寄存器在 MCU 端按以下顺序映射(DMA_MUX_1 的基地址为 0x40284000): 0x40284000 ->CHCFG[3] 0x40284001 ->CHCFG[2] 0x40284002 ->CHCFG[1] 0x40284003 ->CHCFG[0] 0x40284004 ->CHCFG[7] 0x40284005 ->CHCFG[6] 0x40284006 ->CHCFG[5] 0x40284007 ->CHCFG[4] 0x40284008 ->CHCFG[11] …… 请看我下面的截图 OndrejK_0-1785316902701.png 从现在开始,我的结果让我有所感知,也与你的建议相符。 🙂 感谢您的支持 我想这个问题应该可以解决。 Re: S32K348-GPIO EIRQ to DMA request 你好@OndrejK 好的,请点击“接受为解决方案”关闭此主题。
記事全体を表示
S32K348-GPIO EIRQからDMA要求 親愛なるNXPサポートチームへ、 今、GPIO PTD6でEIRQ14の立ち上がりエッジ検出を設定し、このピン信号をDMAチャネルにマッピングし、PIT_1 Timer[0]から現在の値を取得しようとしています。これはフリーランニングとして設定されています。 SIUL2はPTDAで正しく設定されているようで、関連するMCUピンで信号(1Hz)を接続するとこのピンが切り替えられているのが確認できます。 でもDMAは私には合いません 私の推測では、PTD6から>DMAMUX-> DMAチャネル4の適切なチェーンを見つけるのに問題があるのだと思います。そして、これらの情報を正確にどこで見つけられるかも調べてください。 S32K3xx_DMAMUX_map.xlsx から以下の情報を取得しました。 OndrejK_0-1784190602227.png そこで最初の問題です:PTD6(EIRQ14)に専用のソース>リクエストはどれですか? RMマニュアルの表44とはどのように関連しているのでしょうか? OndrejK_1-1784190821068.png 以下は、私が現在取り組んでいるコードの断片です。 PTD6 のセットアップ void Setup_PTD6_EIRQ14_for_DMA ( void ) { /* 1. MSCRレジスタによる物理ピンPTD6の設定 */     // PTD6 は、インデックス MSCR[102] に対応します (スクリーンショットに示されているとおり)     IP_SIUL2 -> MSCR [ 102 ] = 0 ; // レジスタをクリア     IP_SIUL2->MSCR[102] |= (1 << 19); // IBE = 1(入力バッファ有効化 - ピンを入力として設定)     IP_SIUL2 -> IMCR [ 542 - ( 512 )] = 3u ;     オプション:信号が浮かんでいる場合は、プルアップ(PUE=1、PUS=1)またはプルダウン(PUE=1、PUS=0)を有効にすることができます。 /* 2. 回線EIRQ[14]でのエッジ検出の有効化 */     // すべての立ち上がりエッジのタイムスタンプを取得したい     IP_SIUL2 -> IREER0 |= ( 1 << 14 ); // IREER0[EIRE14] = 1 (立ち上がりエッジを有効にする)     IP_SIUL2 -> IFEER0 &= ~ ( 1 << 14 ); // IFEER0[EIRE14] = 0 (立ち下がりエッジを無効化) /* 3. リクエストルーティング: 割り込みからDMAへの変更 */     // このステップにより、エッジがCPU(NVIC)を起動せず、代わりにDMAラインをトリガーすることが保証されます。     IP_SIUL2->DIRSR0 |= (1 << 14); // DIRSR0[DIRS14] = 1(割り込みではなくDMA要求を選択する) /* 4.EIRQのDMA要求生成の最終有効化[14] */     IP_SIUL2->DIRER0 |= (1 << 14); // DIRER0[EIRE14] = 1(DMA要求ラインを起動) }   DMAチャネルの設定: void Setup_eDMA_Channel4_Capture_PIT1 ( void ) { /* 1.eDMAチャネル4のDMAMUX初期化 */     EIRQ14(ソース14)をeDMAチャンネル4にマッピング     IP_DMAMUX_1 -> CHCFG [ 4 ] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE ( 7u ); // EIRQ14 は DMAMUX_1 のソース 7 です     //IP_DMAMUX_0->CHCFG[4] = 0U; /* 2.チャネルPIT_1 4のTCD構成(正確なS32K3ベアメタル構文)*/     // ソース: PIT_1 タイマー 0 の現在の値     IP_TCD -> TCD4_SADDR = ( uint32_t ) & ( IP_PIT_1 -> TIMER [ 0 ]. CVAL );     IP_TCD -> TCD4_SOFF  = 0 ; // ソースはインクリメントされません     IP_TCD -> TCD4_ATTR  = 0x0202 ; // 32ビットソース、32ビットデスティネーション     // マイナーループ: 1回のトリガーで転送されるバイト数     // S32K3では、これはNBYTES_MLOFFNOレジスタに対応します(マイナーループリンクなし)     IP_TCD -> NBYTES4 . TCD4_NBYTES_MLOFFNO = 4 ; // トリガーごとに 4 バイト (32 ビット) を転送     // 宛先: RAM 内の配列     IP_TCD -> TCD4_DADDR = ( uint32_t ) dma_timestamps ;     IP_TCD -> TCD4_DOFF  = 4 ; // 各エッジの後に RAM で 4 バイトシフトする     // 循環バッファ: 配列全体を埋めた後、先頭に戻る     IP_TCD -> TCD4_DLAST_SGA = - ( BUFFER_SIZE * 4 );     // 主要ループカウンタ:ループ内の反復回数の合計     //IP_TCD->CITTER4.TCD4_CITER_ELINKNO = BUFFER_SIZE;     IP_TCD -> CITER4 . TCD4_CITER_ELINKNO = BUFFER_SIZE ;     IP_TCD -> BITER4 . TCD4_BITER_ELINKNO = BUFFER_SIZE ; /* 3.公式マクロによるハードウェアトリガーのeDMAチャネルアクティベーション */     //IP_TCD->CH4_CSR |= DMA_TCD_CH4_CSR_ERQ_MASK; /* 3.ハードウェアトリガーのeDMAチャネル起動(非同期モード有効時)*/     // ビット 0 (ERQ) = 1 -> ハードウェア トリガーを有効にする     // ビット 2 (EARQ) = 1 -> 外部ピン (SIUL2 EIRQ) からの非同期要求を有効にします     IP_TCD -> CH4_CSR |= 3u ; // ERQ=1、EARQ=1 }   おそらくここが重要な部分でしょう。 IP_DMAMUX_1 -> CHCFG [ 4 ] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE ( 7u ); // EIRQ14 は DMAMUX_1 のソース 7 です どの IP_DMAMUX とどの DMAMUX_CHCFG_SOURCE を使用すればよいのか、また、これに関する適切な情報はどこにあるのか、少し混乱しています。 よろしくお願いします オンドレイ   Re: S32K348-GPIO EIRQ to DMA request こんにちは、@ OndrejK 「つまり、MCUには32のTCDチャネルがあり、TCD 0から15はDMAMUX_0に有効で、TCD 15から31はDMAMUX_1に適用されるということですか?" はい、これらの情報はデータシートに記載されています。参考のためにコピーしておきます。 Senlent_0-1784272853624.png Re: S32K348-GPIO EIRQ to DMA request こんにちは、Senlentさん。 ご回答ありがとうございます。 TCDマッピングについてのあなたの意味がどこから出たのか教えてもらえますか? つまり、MCUは32のTCDチャネルを持ち、TCD 0から15がDMAMUX_0に有効で、TCD 15から31は DMAMUX_1? DMAMUXとeDMAに関する情報について、まだ少し混乱しています。 よろしくお願いします オンドレイ Re: S32K348-GPIO EIRQ to DMA request こんにちは、@OndrejK あなたの理解は正しいです。 PTD6->EIRQ14->DMAMUX1.SOURCE 7. IP_DMAMUX_1->CHCFG[4] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(7u); // EIRQ14 is source 7 for DMAMUX_1 しかし、TDC設定が間違っています。 私の理解では、それらは以下のようになるはずです。 IP_DMAMUX_1->CHCFG[0] ->TCD 16 IP_DMAMUX_1->CHCFG[4] -> TCD4ではなくTCD20 Re: S32K348-GPIO EIRQ to DMA request こんにちは、センレントさん。 観察結果に基づいて、コードにいくつか変更を加えました。 これが私の最新のコードです。 メイン初期化: Setup_PTD6_EIRQ14_for_DMA ();     Setup_PIT1_Timer0_FreeRunning ();     Setup_DMAMUX_Channel0_ToTCD16_Capture_PIT1 ();      // EIRQ14割り込みフラグをクリアする      IP_SIUL2 -> DISR0 = ( 1 << 14 ); そして、残りのコードは以下のとおりです。 void Setup_PTD6_EIRQ14_for_DMA ( void ) {     // 1. SIUL2 に対するフィルタ前の操作 (AK Už nie je povolený inde)     IP_SIUL2 -> IFCPR = 0U ; // Nastavenie deličky filtra na Functional Clock (bez dodatočného delenia) // 2. Voliteľne vypnite フィルター pre daný EIRQ インデックス アレボ ホ ナスターブテ ナ 最小限のポチェト cyklov // EIRQ14 より前 (v závislosti od mapovania registrov IFMCR):     IP_SIUL2 -> IFMCR [ 14 ] = 0U ; // 0U vypína digitalálny フィルター、hrana prechádza okamžite ako čistýhardvérový トリガー /* 1. MSCRレジスタによる物理ピンPTD6の設定 */     // PTD6 は、インデックス MSCR[102] に対応します (スクリーンショットに示されているとおり)     IP_SIUL2 -> MSCR [ 102 ] = 0 ; // レジスタをクリア     IP_SIUL2->MSCR[102] |= (1 << 19); // IBE = 1(入力バッファ有効化 - ピンを入力として設定)     IP_SIUL2 -> IMCR [ 542 - ( 512 )] = 3u ;     オプション:信号が浮かんでいる場合は、プルアップ(PUE=1、PUS=1)またはプルダウン(PUE=1、PUS=0)を有効にすることができます。 /* 2. 回線EIRQ[14]でのエッジ検出の有効化 */     // すべての立ち上がりエッジのタイムスタンプを取得したい     IP_SIUL2 -> IREER0 |= ( 1 << 14 ); // IREER0[EIRE14] = 1 (立ち上がりエッジを有効にする)     IP_SIUL2 -> IFEER0 &= ~ ( 1 << 14 ); // IFEER0[EIRE14] = 0 (立ち下がりエッジを無効化) /* 3. リクエストルーティング: 割り込みからDMAへの変更 */     // このステップにより、エッジがCPU(NVIC)を起動せず、代わりにDMAラインをトリガーすることが保証されます。     IP_SIUL2->DIRSR0 |= (1 << 14); // DIRSR0[DIRS14] = 1(割り込みではなくDMA要求を選択する) /* 4.EIRQのDMA要求生成の最終有効化[14] */     IP_SIUL2->DIRER0 |= (1 << 14); // DIRER0[EIRE14] = 1(DMA要求ラインを起動) }   void Setup_DMAMUX_Channel0_ToTCD16_Capture_PIT1 ( void ) { /* 1.eDMAチャネル4のDMAMUX初期化 */    // Podľa NXP tabuľky prislúcha SIUL2 DMA要求 4 zdrojový index 7u     //IP_DMAMUX_1->CHCFG[4] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(7u);     ドキュメントに従い、まずチャネル4を無効にし、次に設定し、最後に有効にしてください     IP_DMAMUX_1 -> CHCFG [ 0 ] = 0u ; /* 2.チャネルPIT_1 4のTCD構成(正確なS32K3ベアメタル構文)*/     // ソース: PIT_1 タイマー 0 の現在の値     IP_TCD -> TCD16_SADDR = ( uint32_t ) & ( IP_PIT_1 -> TIMER [ 0 ]. CVAL );     IP_TCD -> TCD16_SOFF  = 0 ; // ソースはインクリメントされません     IP_TCD -> TCD16_ATTR  = 0x0202 ; // 32ビットソース、32ビットデスティネーション     // マイナーループ: 1回のトリガーで転送されるバイト数     // S32K3では、これはNBYTES_MLOFFNOレジスタに対応します(マイナーループリンクなし)     IP_TCD -> NBYTES16 . TCD16_NBYTES_MLOFFNO = 4 ; // トリガーごとに 4 バイト (32 ビット) を転送     // 宛先: RAM 内の配列     IP_TCD -> TCD16_DADDR = ( uint32_t ) dma_timestamps ;     IP_TCD -> TCD16_DOFF  = 4 ; // 各エッジの後に RAM で 4 バイトシフトする     // 循環バッファ: 配列全体を埋めた後、先頭に戻る     IP_TCD -> TCD16_DLAST_SGA = - ( BUFFER_SIZE * 4 );     // 主要ループカウンタ:ループ内の反復回数の合計     //IP_TCD->CITTER20.TCD20_CITER_ELINKNO = BUFFER_SIZE;     IP_TCD -> CITER16 . TCD16_CITER_ELINKNO = BUFFER_SIZE ;     IP_TCD -> BITER16 . TCD16_BITER_ELINKNO = BUFFER_SIZE ;     //IP_TCD->CH16_CSR |= 3u; // ERQ=1、EARQ=1     DMAMUXチャネル0を有効にする     IP_DMAMUX_1 -> CHCFG [ 0 ] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE ( 6u ); __asm volatile ( "nop" ); __asm volatile ( "nop" );     IP_TCD -> CH16_CSR |= 3u ; }   そして、このアサートが発生すると、EIRQ(14)によるDMA転送を開始できません。デバッガーでは、MCU PTD6ピンの信号を変更するとフラグが表示されます。 次に、手動でSTARTビットでDMA転送を開始できTCD16_CSR TCDチャネルではCITTERの値を減らし、PIT1_TIMER[0]の値をdma_timestampsアレイに格納します。 ちなみに、これは「通常の」SRAMセクションで定義されるべきです。以前、これをdata_cacheセクションに設定していたため、DMA「宛先バスエラー」が発生しました。 新しい定義: __attribute__ ((整列( 32 ))) __attribute__ ((セクション( ".mcal_data" ))) uint32_t dma_timestamps [ BUFFER_SIZE ];   しかし、手動STARTをスキップして(コードの冒頭から設定してはいけません)、PTD6ピンの信号を変えると、DMAチャネルは何もせず、CITTERレジスタは初期化値のままです。 どこに問題があるのか教えてもらえますか? それでも、PTD6-EIRQ(14)の主張フラグからTCD16チャネルへの適切な接続に問題があるようです。 DMAMUXチャネルの正しいソースかもしれませんね? DMAMUX1-CH[0]については、すべてのソース(1~ 😎 DMAMUXのExcelテーブルにリストされているSUIL2インスタンスについて、成功しませんでしたが、ここでも私の手順が正しかったかどうかはわかりません。     Re: S32K348-GPIO EIRQ to DMA request こんにちは、@ OndrejK 参考までに、PTD6を使用して単一のデータ転送のためにDMAをトリガーするデモを作成しました。 これはS32K344 + RTD 7.0.1をベースにしています。 そして私はそれを試してみました。 私の理解は正しいと保証します。 PTD6の場合、ソースは7である必要があります。  IP_DMAMUX_1 -> CHCFG [ 0 ] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE ( 7u ); Senlent_1-1784689141057.png Re: S32K348-GPIO EIRQ to DMA request こんにちは、Senlentさん。 素晴らしい例をありがとうございました。 いくつか変更を加えた結果、動作するサンプルができました。調整済みプロジェクトを添付しますが、重要な問題が一つありました。 DMAリクエーションを有効にしたSIUL ICUは、DMA TCDチャネル全体が完全に設定される前にセットアップされました。その場合、TCD_SADDRとTCD_DADDRは空(値がゼロ)で、その後SULでDMAリクオンを有効にするとDMAエラー、つまり「ソースバスエラー」が発生します。これが私の理解です。 この初期化の順序変更後。例が私の環境で動作し始めました。 しかし、DMAMUXチャネルとTCDチャネルの正確な関係はまだ理解できません。 あなたは、DMAMUXはCHCGF[0]として構成する必要があると書いていました。 S32k344カスタム開発ボードでアプリをダウンロードして起動したところ、DMAMUX-CHCFG[3]が設定されており、関数のコード Dma_Mux_Ip_Init_Privileged 正確にこの構成に繋がっていることがわかりました。 RegisterIndex = DMA_MUX_IP_GATE_OFFSET((pConfig->pChannelConfigArr[ChannelCount].チャネル)); こちらはLauterbach Trace32デバッガのスクリーンショットで、すべての初期化ステップ後の最終セットアップを見ることができます: OndrejK_0-1784795174339.png Design Studioでは、RTDを7.0.1にアップデートした後の次の設定があります: OndrejK_1-1784795478141.png これは正しいですか?また、ここに3つのDMAマルチプレクサソースの選択肢があるとはどういう意味ですか? Re: S32K348-GPIO EIRQ to DMA request こんにちは、@ OndrejK それは良かったですね。 この設定ツールは、初心者開発者にとっては混乱を招く可能性があります。 S32K348の場合、DMAMUX_3は存在せず、DMAMUX_0とDMAMUX_1のみが存在します。 •S32K310、S32K311、S32K312では、DMAMUX_0チャネル0–5およびDMAMUX_1チャネル0–5はそれぞれeDMA転送制御ディスクリプタ(TCD)0–5およびeDMAトランスファー制御ディスクリプタ(TCD)6–11にマッピングされます。したがって、DMAMUX_0 チャネル6〜15およびDMAMUX_1 チャネル6〜15のプログラミングは期待されていません。しかし、プログラムされた場合、アクセスはチャネル8から15に対してエラー応答、またはチャネル6から7に対してエラー応答なしのいずれかを引き起こします。 •残りのS32K3xxデバイスについては、DMAMUX_0チャネル0–15およびDMAMUX_1チャネル0–15がそれぞれeDMA転送制御ディスクリプタ(TCD)0–15およびeDMAトランスファーコントロールディスクリプタ(TCD)16–31にマッピングされています。 上記はデータシートからの抜粋であり、理解しやすい内容です。 「DMAハードウェアチャネル」はTCD番号に対応します。 DMA_CHANNEL_0~DMA_CHANNEL_15を選択した場合、デフォルトではDMAMUX_0が使用されます。 16~31を選択した場合、デフォルトでDMAMUX_1が使用されます。 例えば、このトピックではPTD6はDMAMUX_1のSource 7に対応し、「DMAハードウェアチャネル」はDMA_CHANNEL_16からDMA_CHANNEL_31までの任意の値に設定できます。 別の例を挙げましょう。もしEIRQ 7をDMAをトリガーすると、「DMAハードウェアチャネル」はDMA_CHANNEL_0からDMA_CHANNEL_15どの値にも設定できます。 Re: S32K348-GPIO EIRQ to DMA request こんにちは、SenLentさん、 DMAチャネルを選ぶことについて、関連するグループから自由に選べるというイメージDMA_MUX その間に他のDMA_MUX<-> <>TCDの組み合わせも試し、自分の側では次の1つだけを操作しました IP_DMAMUX_1->CHCFG[3]およびTCD16。 次に他のものも試してみます。 IP_DMAMUX_1->CHCFG[4]とTCD17。 IP_DMAMUX_1->CHCFG[0]とTCD16。 そして、なぜ正確には IP_DMAMUX_1->CHCFG[3] と TCD16 だけなのか教えてください。働く ? IP_DMAMUX_1->CHCFG[xx]とTCDyyの関係はどうなっているのでしょうか? Re: S32K348-GPIO EIRQ to DMA request こんにちは、@ OndrejK 正しい順番は以下のとおりです。 IP_DMAMUX_0>CHCFG[0]とTCD0。 IP_DMAMUX_0->CHCFG[1]とTCD1。 IP_DMAMUX_0->CHCFG[2]とTCD2。 IP_DMAMUX_0->CHCFG[3]とTCD3。 IP_DMAMUX_0->CHCFG[4]とTCD4。 IP_DMAMUX_0->CHCFG[5]とTCD5。 IP_DMAMUX_0->CHCFG[6]とTCD6。 IP_DMAMUX_0->CHCFG[7]とTCD7。 IP_DMAMUX_0->CHCFG[8]とTCD8。 IP_DMAMUX_0->CHCFG[9]とTCD9。 IP_DMAMUX_0->CHCFG[10]とTCD10。 IP_DMAMUX_0->CHCFG[11]とTCD11。 IP_DMAMUX_0->CHCFG[12]とTCD12。 IP_DMAMUX_0->CHCFG[13]とTCD13。 IP_DMAMUX_0->CHCFG[14]とTCD14。 IP_DMAMUX_0->CHCFG[15]とTCD15。 IP_DMAMUX_1->CHCFG[0]とTCD16。 IP_DMAMUX_1->CHCFG[1]とTCD17。 IP_DMAMUX_1->CHCFG[2]とTCD18。 IP_DMAMUX_1->CHCFG[3]とTCD19。 IP_DMAMUX_1->CHCFG[4]とTCD20。 IP_DMAMUX_1->CHCFG[5]とTCD21。 IP_DMAMUX_1->CHCFG[6]とTCD22。 IP_DMAMUX_1->CHCFG[7]とTCD23。 IP_DMAMUX_1->CHCFG[8]とTCD24。 IP_DMAMUX_1->CHCFG[9]とTCD25。 IP_DMAMUX_1->CHCFG[10]とTCD26。 IP_DMAMUX_1->CHCFG[11]とTCD27。 IP_DMAMUX_1->CHCFG[12]とTCD28。 IP_DMAMUX_1->CHCFG[13]とTCD29。 IP_DMAMUX_1->CHCFG[14]とTCD30。 IP_DMAMUX_1->CHCFG[15]とTCD31。 Re: S32K348-GPIO EIRQ to DMA request こんにちは、SenLentさん。 最新のS32 DSプロジェクトでテストを行い、DMA_MUXの設定をさらに追加しました。 私の設定画面のスクリーンショットはこちらです。 OndrejK_0-1785138171795.png そして、ビルドコードをボードにダウンロードした後の結果がこちらです。 OndrejK_2-1785138306423.png ご覧の通り、DMA_MUXとTCDの割り当て順番は守られていません。 同じバグはRTDソフトウェアでも起きているのでしょうか? Re: S32K348-GPIO EIRQ to DMA request こちらが私のプロジェクトで、先に添付した最新のものを調整したばかりです DMA_MUX_0でDMA_Channel_0とDMA_Channel_1の2チャネルを作成しました。 これらのチャネルにはDMA_MUX_0->CHCFG[3]およびDMA-MUX_0-CHCFG[2]が割り当てられています。 DMA_MUX_1で見られるような「混合」の順序です Re: S32K348-GPIO EIRQ to DMA request こんにちは、@ OndrejK 問題が何なのか分かりません。もっと分かりやすく説明してもらえますか?またはテストプロジェクト全体を教えていただけますか?そうすれば、どこに疑問があるのか教えてください。 Re: S32K348-GPIO EIRQ to DMA request こんにちは、@ OndrejK これは、使用しているデバッガー、あるいはデバッガーのバージョンに関連している可能性が高いことは明らかです。 Re: S32K348-GPIO EIRQ to DMA request こんにちは、@ OndrejK これはあなたが提供してくれたデモです。私は何も変更を加えていません。 これが私のテスト結果です。 Senlent_0-1785142055872.png Re: S32K348-GPIO EIRQ to DMA request こんにちは、Senlentさん。 その間、私は別の同僚とこの同じプロジェクトをテストしました。同僚はS32DSバージョン3.6.3を使用しています。そしてOzoneデバッガーも使用しましたが、結果はあなたと同じです。 あなたの言う通りみたいですね。でも、私の側で何が起こっているのか全く分かりません。 😞 Re: S32K348-GPIO EIRQ to DMA request こんにちは、SenLentさん。 ついに、ここでの「問題」がどこにあるのか分かりました。 問題は、OzoneとLauterbachが単にDMA_MUX->CHCFGの表示方法が異なることです。最後のコツは、これらのCHCFGレジスタがMCU側(DMA_MUX_1のベースアドレスは0x40284000)にこの順番でマッピングされていることです。 0x40284000 ->CHCFG[3] 0x40284001  ->CHCFG[2] 0x40284002 ->CHCFG[1] 0x40284003 ->CHCFG[0] 0x40284004 ->CHCFG[7] 0x40284005 ->CHCFG[6] 0x40284006 ->CHCFG[5] 0x40284007 ->CHCFG[4] 0x40284008 ->CHCFG[11] .... 下のスクリーンショットをご覧ください OndrejK_0-1785316902701.png そしてこの瞬間から私の結果は意味を持ち、あなたのアドバイスと一致しました 🙂 サポートありがとうございます そして、この問題はCANで解決できるのでしょう Re: S32K348-GPIO EIRQ to DMA request こんにちは、@ OndrejK よろしい。このトピックを閉じるには「解決策として受け入れる」をクリックしてください。
記事全体を表示
imx93 failed to load mcimx93evk_ethosu_apps.elf if mcimx93evk_ethosu_apps.elf need OCRAM. I am try the examples code.    mcimx93evk_ethosu_apps.  in this case,the elf would need use OCRAM (some variable is too much size). after the elf is built. I load this elf file to m33. it always failed to : remoteproc remoteproc0: Registered carveout doesn't fit da request remoteproc remoteproc0: bad phdr da 0x20480000 mem 0x60000 remoteproc remoteproc0: Failed to load program segments: -22 remoteproc remoteproc0: Boot failed: -22 maybe the memory allocat failed for conflict. why? this example code is : mcimx93evk_ethosu_apps from sdk_examples. would you please check this exsample?  i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Re: imx93 failed to load mcimx93evk_ethosu_apps.elf if mcimx93evk_ethosu_apps.elf need OCRAM. sdk version from nxp site is : 2.14.xx anybody success to load mcimx93evk_ethosu_apps to m33? how can i success to run mcimx93evk_ethosu_apps in m33? thanks. Re: imx93 failed to load mcimx93evk_ethosu_apps.elf if mcimx93evk_ethosu_apps.elf need OCRAM. I did not modify the ld m_ocram (RW) : ORIGIN = 0x20480000, LENGTH = 0x00060000 __attribute__((section(".bss.tensor_arena_ocram"), aligned(32))) uint8_t inferenceProcessTensorArena[TENSOR_ARENA_SIZE]; the result when I load elf to m33: remoteproc remoteproc0: bad phdr da 0x20480000 mem 0x60000 Re: imx93 failed to load mcimx93evk_ethosu_apps.elf if mcimx93evk_ethosu_apps.elf need OCRAM. Hi, This app is only suitable for loading in U-Boot. For remoteproc, the OCRAM memory attribute is not defined in drivers/remoteproc/imx_rproc.c. Zhiming_Liu_0-1785301592854.png Best Regards, Zhiming
記事全体を表示
S32K312 安全启动和编程闪存 附件中的 CMM 文件是一个脚本,它将 FBL 和应用程序写入 S32K312 MCU,然后激活 SecureBoot、SecureDebug 和配置锁定。 我们希望对运行此 CMM 时出现的 HardFault 问题进行审查和改进。 如屏幕截图所示,之前在执行“Go”时,导入 FBL 和应用程序后发生 HardFault,JTAG 时钟始终设置为 5 MHz。 作为一项更改,我们在导入应用程序文件后将 SYStem.JtagClock 设置为 1 MHz。通过这一改变,在运行 CMM 时,“Go”步骤很少发生硬故障,因此我们得出结论,降低 JTAG 时钟速度是一种有效的方法。但是,当应用修改后的 CMM 时,在导入 FBL 和 App 后,偶尔会在“Go”时出现“被 vectbl 停止”错误。 请您检查一下 CMM,确保其整体运行稳定。同时,我们也想了解一下如何改进它,以彻底消除“被 vectbl 停止”的错误。 原始三坐标测量机:GN7_PE_MAIN_G_SECURE_260412.cmm 修改后的 CMM(JTAG 时钟已更改为 1 MHz):GN7_PE_MAIN_G_SECURE_260412_0714RE.cmm 此外,我们希望在启用安全启动后导入不同的 FBL。在启用安全启动的情况下,是否可以导入不同的 FBL?如果可以的话,我们希望您能提供一份指南。 Re: S32K312 Secureboot and Program Flash 嗨@jeongwoo 我看到的主要问题是: lukaszadrapa_0-1784181532767.png 这意味着:加载粉色文件并重置设备。After this RESET, SBAF 应该会安装 HSE 固件。但关键是——这个操作大约需要 1 秒钟。但是,在 0.1 秒后,您将再次重置 MCU,并且您将立即通过 fbl 对 0x40_0000 处的粉色文件进行重新编程。至少将等待时间增加到 1.3 秒。否则,SBAF 会尝试安装 HSE 固件,而您同时会尝试重新编程 fbl。 此致, Lukas Re: S32K312 Secureboot and Program Flash 您好,谢谢您的回复。 关于目前在添加 HSE 后延迟时间设置为 0.1 秒的部分,即使将时间设置得更短,写入控制器的程序功能也没有任何问题。我想请问是否真的有必要将延迟时间增加到 1 秒。 Re: S32K312 Secureboot and Program Flash 您是否在尚未安装 HSE 固件的设备上进行过测试?我觉得这行不通。安装过程只需一秒多一点。如果在 0.1 秒后通过重置中断安装,并且之后立即删除粉色文件,则 SBAF 无法安装固件。 Re: S32K312 Secureboot and Program Flash 你好, 首先,我确认当使用配置为现有 0.1 秒设置的 CMM 进行写入时,Trace32 中会出现硬故障,但对固件功能没有影响。FBL 和 APP 似乎执行正常。 是否有某个寄存器地址值可以用来检查 SBAF 或 HSE 是否正常运行? 此外,关于您提到的 HSE 应用时间的 CMM,执行期间并未出现“被 vectbl 停止”的字样。但是,我确认即使在 APP 导入期间执行 FLASH.ReProgram ALL 后将“等待 3 秒”更改为“等待 2 秒”,仍然会显示“被 vectbl 停止”。缩短APP导入时间是否也会对此产生影响? jeongwoo_0-1784707488443.png Re: S32K312 Secureboot and Program Flash 嗨@jeongwoo 我感觉我可能在剧本中发现了一个潜在问题。 lukaszadrapa_0-1784819781177.png 加载 fbl_m4 后,使用 Go 命令启动引导加载程序。然后脚本进入循环,定期读取启动配置字并等待值 0x9。这意味着脚本正在等待引导加载程序初始化安全启动并更新启动配置字中的 BOOT_SEQ 位。但是,执行此更新需要引导加载程序擦除并重新编程整个闪存扇区,这可能需要相当长的时间。 在此期间,调试器会反复读取同一个闪存位置。这可能会导致读写冲突。当闪存块被擦除或编程时,通常不能同时进行读取。因此,调试器可能会遇到访问错误,这可以解释观察到的行为。 更简洁的解决方案是使用位于 RAM 中的状态变量,而不是轮询存储在闪存中的值。引导加载程序完成所有安全启动配置步骤后,可以更新专用 RAM 变量。调试器随后可以定期读取该 RAM 位置。由于 RAM 访问不会干扰闪存擦除/编程操作,因此这种方法避免了任何潜在的边读边写问题。 我还注意到脚本中多次使用了相同的方法,因此我建议审查并更新所有类似的状态检查,而不仅仅是这一个特定的检查。 关于 HSE 状态: 要确定是否安装了 HSE 固件,请检查地址 0x4039C028 处的 HSE GPR 寄存器的第 0 位。如果该位为 1,则表示存在 HSE 固件。 要确定 HSE 固件是否已完成初始化并准备好接受请求,请检查 MU0 FSR 寄存器中的 HSE_STATUS_INIT_OK 标志(第 24 位)。一旦设置了该位,HSE 初始化就完成了,服务即可使用。 Re: S32K312 Secureboot and Program Flash 你好,卢卡斯, 感谢您的回复。 我的理解是,引导加载程序上传一次后,其初始值 (0x1) 会被写入另一个擦除/写入周期以应用安全启动(将 0x1 更改为 0x9),在此过程中,当轮询方法尝试读取该地址值时,似乎会发生错误。 jeongwoo_0-1784877741730.png 按照您的建议,我们尝试使用位于 RAM 中的状态变量。但是,我们以 Hex 文件的形式分发我们的软件。在这种情况下,如果我们使用 .map 中定义的地址。由于文件内存地址因程序而异,因此很难统一编写脚本。因此,我们得出结论,为了在脚本中检查安全启动、安全调试和配置锁定状态,我们需要使用 IVT 中定义的值。 因此,根据您的反馈,我们没有在 HSE 上传后施加 1.5 秒的延迟,而是采用了一种检查 MU0 FSR 寄存器的 HSE_STATUS_INIT_OK 标志(第 24 位)的方法。我们移除了现有的固定等待时间(例如,等待 1.5 秒,等待 3 秒),并修改了脚本,以便在复位后,它会轮询直到该位被设置,然后再继续进行闪存写入(FBL/APP 加载)。我们在系统重置和系统启动后的每个阶段都添加了此方法。此外,我们计划将每个状态的状态检查轮询间隔从 0.5 秒改为 1.5 秒。我们还增加了在 Go 之后第一次读取之前的等待时间。我们非常希望您能就这些时间设置是否不足提出宝贵意见。到目前为止,我们已经确认使用此脚本写入数据可以正常完成,没有任何故障,并且在写入后执行 GO 命令时设备也能正常工作。 (我们已确认,地址 0x400004 处的值从 0x1 变为 0x9 大约需要 800 毫秒。) 关于之前在 HSE 上传后 0.1 秒加载 FBL 时发生 HardFault 的问题:当我们检查您提到的 HSE 状态值时,我们确认所有值都报告为正常。程序功能似乎也能正确执行。当我们通过 HSE → FBL → APP 加载所有内容,然后执行 GO 时,会出现此错误(HardFault)。鉴于此,我们希望听取您的意见,看看是否应该像您建议的那样,增加延迟时间,以便在写入后执行 GO 指令。 顺祝商祺! Re: S32K312 Secureboot and Program Flash 是的,在 sys.up 之后、开始任何其他编程操作之前,等待 HSE_STATUS_INIT_OK 状态更新是一个好方法。这样可以确保 HSE 与应用程序核心/编程工具之间不会发生读写冲突。 如果用于检查 BOOT_SEQ 位的超时时间足够长,以至于编程操作已经完成,那么这种方法也可能有效。然而,使用 RAM 中的标志位会是一个更简洁的解决方案。 如果您需要通用的解决方案,那么放置在公共部分的标准全局变量并不理想,因为无法保证其地址在不同的应用程序中保持不变。或者,您可以定义一个固定地址的专用 RAM 段并将标志放在那里,或者保留一个固定地址的未使用 RAM 位置并通过指针直接访问它。 这两种方法都提供了一个稳定的内存位置,可以独立于应用程序的内存布局进行共享。 此致, Lukas Re: S32K312 Secureboot and Program Flash 你好,卢卡斯。 根据您之前提供的指导,图像文件(.elf)现在可以成功运行(“正在运行”),而不会被 vectbl 停止。但是,上传应用程序后,当我执行 GO 命令时,二进制文件 (.hex) 仍然抛出“被 vectbl 停止”错误。 这似乎是一种症状,即“应用程序在其执行流程中跳转到了一个无效地址,并在尝试获取该位置的指令时失败”。有什么办法解决这个问题吗? 即使发生 vectbl 错误,正常写入似乎也能在 POR(上电复位)后按预期正确完成,但我需要确认此错误是否可以安全忽略。 感谢您一直以来的支持。 顺祝商祺! jeongwoo_0-1785298132030.png
記事全体を表示
如何优化i.MX8安卓设备上的IPTV播放性能? 大家好, 我目前正在评估基于 i.MX8 平台的 Android 设备上的 IPTV 播放,并希望从社区的经验中学习。 在测试过程中,我注意到播放质量会受到多种因素的影响,包括: 硬件视频解码配置 网络稳定性(以太网 vs. Wi-Fi) 实时HLS流的缓冲区大小 ExoPlayer 或 VLC 配置 播放期间的 CPU 和内存使用情况 对于使用 i.MX 处理器的用户来说,哪些设置或优化能够为直播电视流带来最稳定的效果? 具体来说,我感兴趣的是: 推荐的 ExoPlayer 缓冲区设置 硬件解码器最佳实践 减少直播活动期间缓冲的技巧 Android TV 设备的性能调优 网络故障排除方法 我很想听听您的实际使用经验,以及任何能够提高播放稳定性的建议。 谢谢! Re: How do you optimize IPTV playback performance on i.MX8 Android devices? 您好, NXP 电路板支持包。没有提供任何官方推荐的 IPTV 参数。 NXP 的 Android 版本包含集成的多媒体框架、编解码器以及针对 i.MX 处理器的平台优化。通常建议在评估多媒体性能时使用最新版本的电路板支持包。。 此致, 志明
記事全体を表示
S32 design Studio I am trying to install S32 design studio v2.0. When I install S32 design studio v2.0 it send request.xml I take this file to license request for Activation.xml I store this on to my computer. When I get back to the install it has timeout and will not let me add the Activation.xml file. How do I do this is the time they allow? Re: S32 design Studio Hi,  in your activation request is missing Unique Machine ID. Without this ID the S32DS can't be activated. Your very first attempt on different PC machine contains such ID and the activation was ok.  The Missing machine UID often occurs when you are using Virtual Machine. In some cases the OS security policy block S32SD to obtain such ID from OS. You can try to backup content of c:\ProgramData\FLEXnet\ folder, delete it and try the installation again. 
記事全体を表示
S32 Design Studio 我正在尝试安装 S32 设计工作室 v2.0。安装 S32 设计工作室 v2.0 时,它会发送 request.xml 文件。我将此文件用于获取激活许可请求,并将其存储在我的计算机上。当我返回安装程序时,它超时了,不允许我添加 Activation.xml 文件。我该如何在规定的时间内完成这件事? Re: S32 design Studio 你好, 您的激活请求中缺少唯一机器 ID。如果没有这个ID,S32DS就无法激活。您第一次在不同的电脑上尝试激活时使用了这样的ID,并且激活成功。 当您使用虚拟机时,经常会出现缺少机器 UID 的情况。在某些情况下,操作系统安全策略会阻止 S32SD 从操作系统获取此类 ID。您可以尝试备份 c:\ProgramData\FLEXnet\ 文件夹的内容,然后将其删除并重新尝试安装。
記事全体を表示
Request for Assistance: S32 Design Studio for ARM License Renewal Error Dear NXP Support Team, Hello, I am writing to request support regarding an error encountered while trying to renew the license for S32 Design Studio for S32. Below are the details of my license and the error message received: < License Information > ssean_0-1784761042324.png < Error Message > ssean_1-1784761084965.png ssean_2-1784761092125.png Could you please advise on how to resolve this issue and successfully extend/renew the license? Thank you for your time and assistance. Best regards, Suhyun Sung Re: Request for Assistance: S32 Design Studio for ARM License Renewal Error Hi,  please try the activation again. I returned old licenses.  Re: Request for Assistance: S32 Design Studio for ARM License Renewal Error @jiri_kral  The license is now active and working fine. Thanks for your help! BRs, Sean Sung
記事全体を表示
S32K312 セキュアブートとフラッシュメモリのプログラム 添付されたCMMファイルは、FBLとアプリをS32K312 MCUに書き込み、その後SecureBoot、SecureDebug、Configuration Lockを起動するスクリプトです。 このCMMの実行時に発生するHardFaultの問題について、見直しと改善をお願いしたいと思います。 以前のスクリーンショットに示すように、JTAGクロックを5MHzに設定した状態で「Go」を実行した際に、FBLとアプリをインポートした後にハードフォルトが発生しました。 変更点として、アプリファイルをインポートした後、SYStem.JtagClockを1MHzに設定しました。この変更により、CMM実行時に「Go」ステップでハードフォールトが発生することは稀になったため、JTAGクロック速度を下げることが効果的な方法であると結論づけました。しかし、修正されたCMMを適用すると、FBLとアプリがインポートされた後、「Go」の段階で「stopped by vectbl」エラーが時折発生します。 CMM全体が安定して動作できるように見直し、また「vectblによって停止」エラーが全く出ないよう改善方法についてご質問いただきたいと思います。 オリジナルCMM:GN7_PE_MAIN_G_SECURE_260412.cmm 変更されたCMM(JTAGクロックを1MHzに変更):GN7_PE_MAIN_G_SECURE_260412_0714RE.cmm さらに、SecureBootを有効にした後で、別のFBLをインポートしたいと考えています。SecureBootが有効になっている状態で、別のFBLをインポートする方法はありますか?可能であれば、ガイドをご提供していただけるとありがたいです。 Re: S32K312 Secureboot and Program Flash こんにちは、 @jeongwoo 私が思う主な問題はこうです: lukaszadrapa_0-1784181532767.png つまり、ピンク色のファイルをロードして、デバイスをリセットするということです。このリセット後、SBAFはHSEファームウェアをインストールするはずです。しかし重要な点は、この操作は約1秒で完了するということです。しかし、0.1秒後にMCUをリセットすると、すぐにfblでピンクファイルを0x40_0000で再プログラムします。待ち時間を少なくとも1.3秒に増やしてください。そうしないと、SBAFがHSE FWをインストールしようとし、同時にfblの再プログラミングも試みることになります。 よろしくお願いいたします。 ルーカス Re: S32K312 Secureboot and Program Flash こんにちは、ご返信ありがとうございます。 HSEを追加してから遅延時間が0.1秒に設定されている部分については、時間が短く設定されてもコントローラに書き込まれるプログラム機能に問題はありません。遅延時間を1秒に延長することが本当に必要なのかどうかをお伺いしたいです。 Re: S32K312 Secureboot and Program Flash HSEファームウェアがまだインストールされていないデバイスでテストしましたか?これはうまくいかないと思います。インストールには1秒強しかかかりません。0.1秒後にリセットしてインストールをカットし、その直後にピンクファイルを消去すると、SBAFはファームウェアをインストールできません。 Re: S32K312 Secureboot and Program Flash こんにちは、 まず、既存の0.1秒設定でCMMを構成して書き込みを行った場合、Trace32にハードフォルトが発生するものの、ファームウェアの機能には影響がないことを確認しました。FBLとAPPは正常に実行されたようです。 SBAFやHSEが正常に動作しているかを確認するために使えるレジスタアドレス値はありますか? さらに、あなたが言及したHSE申請期間を考慮したCMMについてですが、「vectblで停止」は実行時に表示されませんでした。しかし、APP Import 中に FLASH.ReProgram ALL の後に「wait 3s」を「wait 2s」に変更しても、「stopped by vectbl」がまだ表示されることを確認しました。APPインポートの時間を短縮することも影響を与えるでしょうか? jeongwoo_0-1784707488443.png Re: S32K312 Secureboot and Program Flash こんにちは、 @jeongwoo スクリプトに潜在的な問題点を見つけたかもしれません。 lukaszadrapa_0-1784819781177.png fbl_m4をロードした後、Goコマンドを使用してブートローダーを起動します。スクリプトはその後ループに入り、定期的にブート構成ワードを読み取り、値0x9を待ちます。これは、スクリプトがブートローダーがセキュアブートを初期化し、ブート構成ワードのBOOT_SEQビットを更新するのを待っていることを意味します。しかし、この更新を実行するにはブートローダーがフラッシュセクター全体を消去・再プログラムする必要があり、かなりの時間がかかることがあります。 その期間中、デバッガは同じフラッシュメモリの位置を繰り返し読み取ります。これは、読み取り同時書き込みの競合を引き起こす可能性があります。フラッシュブロックが消去またはプログラムされている間は、通常同時に読み取ることはできません。その結果、デバッガはアクセスエラーに遭遇し、観察された挙動の説明がつくかもしれません。 よりスマートな解決策としては、フラッシュメモリに保存された値をポーリングする代わりに、RAMに格納されたステータス変数を使用することです。ブートローダーがすべてのセキュアブート設定ステップを完了したら、専用のRAM変数を更新できます。デバッガは定期的にこのRAM位置を読み取ることができました。RAMアクセスはフラッシュ消去やプログラム操作に干渉しないため、この方法は書き込み時の読み込み問題を回避します。 また、同じ方法がスクリプト全体で何度も使われているのに気づいたので、この特定のものだけでなく、すべての類似したステータスチェックを見直して更新することをおすすめします。 HSE(環境・安全・衛生)の状況に関して: HSEファームウェアがインストールされているかどうかを確認するには、アドレス0x4039C028にあるHSE GPRレジスタのビット0を確認してください。このビットが1の場合、HSEファームウェアが存在します。 HSEファームウェアの初期化が完了し、要求を受け付ける準備が整っているかどうかを確認するには、MU0 FSRレジスタのHSE_STATUS_INIT_OKフラグ(ビット24)を確認します。このビットが設定されると、HSEの初期化が完了し、サービスが利用可能になります。 Re: S32K312 Secureboot and Program Flash こんにちは、ルーカスさん。 ご返信よろしくお願いします。 私の理解では、ブートローダーが初期値(0x1)で一度アップロードされた後、再度消去・書き込みサイクルを行い、セキュアブート(0x1 → 0x9の変更)を適用します。この過程でポーリングメソッドがそのアドレス値を読み取ろうとした際にエラーが発生したようです。 jeongwoo_0-1784877741730.png ご指摘いただいたとおり、RAMに格納されているステータス変数を使用してみました。ただし、私たちはソフトウェアを16進形ファイルとして配布しています。この場合、.mapで定義されたアドレスを使うとファイル、RAMアドレスはプログラムごとに異なるため、書き込みスクリプトを統一することが困難です。その結果、スクリプト内でセキュアブート、セキュアデバッグ、および構成ロックの状態を確認するには、IVTで定義されている値を使用する必要があるという結論に至りました。 したがって、ご意見をもとに、HSEアップロード後に1.5秒の遅延を適用する代わりに、MU0 FSRレジスタのHSE_STATUS_INIT_OKフラグ(ビット24)をチェックする方法を適用しました。既存の固定待ち時間(例:1.5秒待機、3秒待機)を廃止し、リセット後はフラッシュ書き込み(FBL/APP読み込み)を進めるまでポーリングを行うスクリプトを修正しました。この方法はシステムリセットとSys.UPの後のすべての段階に追加しました。さらに、各ステータスの状態確認のためのポーリング間隔を0.5秒から1.5秒に変更する予定です。また、Go命令後の最初の読み取りの前に待機時間を追加しました。これらのタイミング設定が不十分かどうかについて、ご意見をいただければ幸いです。これまでのところ、このスクリプトでの書き込みは異常なく正常に完了し、書き込み後にGOを実行するとデバイスが正しく動作していることを確認しています。 (アドレス0x400004の値が0x1から0x9に変化するのにかかる時間は約800msであることを確認しました。) 以前ご指摘いただいた、HSEのアップロードから0.1秒後にFBLをロードした際にハードフォルトが発生した件について:ご指摘いただいたHSEステータス値を確認したところ、すべて正常と報告されていることを確認いたしました。プログラムの機能も正しく実行されているようです。このエラー(HardFault)は、HSE → FBL → APP を経由してすべてをロードし、GO を実行したときに発生します。この状況を踏まえ、ご提案の通り、GOを執筆後に実行するために遅延時間を延ばすのが望ましいかどうか、ご意見をいただけるとありがたいです。 よろしくお願いいたします。 Re: S32K312 Secureboot and Program Flash はい、sys.up の実行後、他のプログラミング操作を開始する前に HSE_STATUS_INIT_OK を待つのは良い方法です。これにより、HSEとアプリケーションコア/プログラミングツール間で読み書きの競合がなくなります。 BOOT_SEQビットのチェックに使われるタイムアウトがプログラミング操作がすでに完了しているのに十分な長さであれば、この方法も有効です。しかし、RAMにフラグを使用する方がより簡潔な解決策となるだろう。 万能的な解決策が必要な場合、共通セクションに標準的なグローバル変数を配置するのは理想的ではありません。なぜなら、そのアドレスが異なるアプリケーション間で一定であることが保証されていないからです。代わりに、固定アドレスに専用RAMセクションを定義し、そこにフラグを配置するか、未使用のRAMを固定アドレスに予約してポインタから直接アクセスする方法があります。 どちらのアプローチも、アプリケーションのメモリレイアウトとは独立して共有可能な安定した場所を提供します。 よろしくお願いいたします。 ルーカス Re: S32K312 Secureboot and Program Flash こんにちは、ルーカス。 以前ご提供いただいたガイダンスに従って、イメージファイル(.elf)はvectblによって停止されることなく正常に実行されるようになりました(「実行中」)。しかし、アプリをアップロードした後、GOを実行すると、バイナリファイル(.hex)で依然として「stopped by vectbl」エラーが発生します。 これは、「アプリが実行フロー内で無効なアドレスにジャンプし、その場所にある命令を取得しようとした際に失敗する」という症状のようです。この問題を解決する方法はありますか? vectblエラーが発生しても、通常の書き込みはPOR(Power-On Reset)時に元々意図した通り正しく完了しているように見えますが、このエラーが安全に無視できるものかどうか確認する必要があります。 引き続きご支援いただきありがとうございます。 よろしくお願いいたします。 jeongwoo_0-1785298132030.png
記事全体を表示
How do you optimize IPTV playback performance on i.MX8 Android devices? Hello everyone, I'm currently evaluating IPTV playback on Android devices based on the i.MX8 platform and would like to learn from the community's experience. During testing, I noticed that playback quality can vary depending on several factors, including: Hardware video decoding configuration Network stability (Ethernet vs. Wi-Fi) Buffer size for live HLS streams ExoPlayer or VLC configuration CPU and memory usage during playback For those working with i.MX processors, what settings or optimizations have produced the most stable results for live TV streaming? Specifically, I'm interested in: Recommended ExoPlayer buffer settings Hardware decoder best practices Tips for reducing buffering during live events Performance tuning for Android TV devices Network troubleshooting methods I'd appreciate hearing about your real-world experience and any recommendations that have improved playback stability. Thank you! Re: How do you optimize IPTV playback performance on i.MX8 Android devices? Hi, The NXP BSP does not provide any officially recommended IPTV parameters. NXP's Android releases include integrated multimedia frameworks, codecs, and platform optimizations for i.MX processors. Please use a recent BSP version is generally recommended when evaluating multimedia performance. Best Regards, Zhiming
記事全体を表示