Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
iMx.95 FRDM post quantum algorithms support I have an iMX.95 FRDM development board and I would like to use post quantum algorithm hardware acceleration. I've tried this command: pkcs11-tool --module /usr/lib/libsmw_pkcs11.so.5 --list-mechanism but the ML-KEM or ML_DSA ar not listed. I'#m currently building the imx image with yocto. How can I enable post quantum algorithm support?
View full article
Evaluation Board for MPC561/562/563/564 Examples Hello everyone,       How can I get the Evaluation Board for MPC561/562/563/564 Examples?  I can not find in the MXP website.    Any advice is appreciated. Thank you! MPC561/2/3/4 General Purpose Evaluation Board | NXP Semiconductors Re: Evaluation Board for MPC561/562/563/564 Examples Hi @tangyuan2013  this is outdated product which won't be available anymore. All MPC5xx devices are in Not Recommended For New Design status and they are slowly reaching end of life status. We won't support customers designing a product with these devices anymore. We recommend to select newer device. Regards, Lukas
View full article
MCXA154 センサープロジェクト ここが私の初めてのNXPプロジェクトを投稿するのに適切か分かりませんが、今のところMCUXpressoとMCXのプロセッサーラインがとても気に入っています。FRDMボードではペリフェラルの追加やピンの設定はスムーズに進んだので、カスタムボードを作ろうと思いました。興味があれば、すべてのオープンソースのハードウェアおよびソフトウェアファイルが利用可能です。@mikerankin 開発ボード MCXA
View full article
KW47: How to obtain deviceId for Gap_CheckIfBonded()? Hello, I am developing a BLE application on KW47 and would like to remove bonding information using Gap_RemoveBond(). While reviewing the APIs, I found Gap_CheckIfBonded(), but I am not sure what value should be passed as the deviceId parameter or how to obtain it. Could you please explain: What deviceId should be passed to Gap_CheckIfBonded()? How can I obtain this deviceId on KW47? Thank you. Protocol: BLE -> connectivity Protocol: Bluetooth
View full article
如何在 MX95 EVK 板上启用第二个摄像头 剧透 (高亮部分可供阅读) 您好,我们想知道如何在 MX95 EVK evk 板的 DSI/CSI 插槽中使用摄像头。我们的相机有RESET和待机引脚,但在 MX95 EVK 原理图中找不到任何 GPIO 引脚来控制它们。 您好,我们想知道如何在 MX95 EVK evk 板的 DSI/CSI 插槽中使用摄像头。我们的相机有RESET和待机引脚,但在 MX95 EVK 原理图中找不到任何 GPIO 引脚来控制它们。 Re: how to enable a second camera on mx95 evk board 嗨@yipingwang谢谢。我们使用的是 TechNexion AR0235 相机,我们希望将其与 CSI 和 CSI/DSI 插槽一起使用。 Re: how to enable a second camera on mx95 evk board 我需要和AE团队确认一下。 Re: how to enable a second camera on mx95 evk board 您好@yipingwang,谢谢您的帮助,但是摄像头仍然无法工作。您有什么建议吗? Re: how to enable a second camera on mx95 evk board J14 A10 DSICSI_RST_SYNC → ADP5585 C0 → gpiochip9 第 6 行 → RESET 通常为低电平有效 J14 A11 DSICSI_EN_PWDN → ADP5585 R4 → gpiochip9 第 4 行 → 掉电通常为高电平有效 正常操作:第 6 行 = 高电平,第 4 行 = 低电平。 Re: how to enable a second camera on mx95 evk board 嗨@yipingwang @yipingwang我应用了以下设置,但相机初始化仍然失败。 hankwang_0-1790059212233.png Re: how to enable a second camera on mx95 evk board 嗨@yipingwang 感谢您确认 J14 A10 (DSICSI_RST_SYNC) 和 A11 (DSICSI_EN_PWDN) 是通过 U81 (ADP5585) 控制的。我们已经确认,我们板上的 ADP5585(i2c 地址 0x34,报告为 adp5585-00)探测成功,并且在 Linux 中作为 gpiochip9 暴露出来,具有 11 条 GPIO 线(0-10;根据我们的设备树,第 5 线保留用于 PWM)。 您能否帮助我们将这两个信号映射到 ADP5585 的确切 GPIO 引脚(例如,根据数据手册,R0-R4/C0-C4 对应的 Linux GPIO 芯片行号(0-10)是多少?另外,每个信号的正确极性(高电平有效/低电平有效)是什么? 我们已经对 10 条可用线路的所有两两组合(90 种组合,两条线路同时拉低)进行了暴力测试,但没有成功——相机的启动状态寄存器 (0x3004) 在所有情况下都保持为 0x0000。如果能从原理图或 UM12022 中获得精确的引脚映射,我们就可以直接验证,而无需继续猜测。 Re: how to enable a second camera on mx95 evk board 在 19 毫米 × 19 毫米的 i.MX 95 EVK 上,i.MX95 EVK DSI/CSI 连接器 (J14) 上的复位和待机引脚是通过 ADP5585 GPIO 扩展器 U81 控制的,而不是直接由 i.MX95 GPIO 控制的: J14 A10 – DSICSI_RST_SYNC:摄像头RESET J14 A11 – DSICSI_EN_PWDN:摄像机待机/掉电 控制电压:1.8V 在设备树中,引用 U81 以进行 reset-gpios 和 pwdn-gpios 的配置。以 NXP 的 imx95-19x19-evk-os08a20-combo.dtb 覆盖层为例,启用共享 DSI/CSI 端口上的第二个摄像头。 Re: how to enable a second camera on mx95 evk board 请确认您使用的是19x19 还是 15x15 evk? Re: how to enable a second camera on mx95 evk board 95 和传感器必须成对配置,以 ov5640 为例。     PWDN(英文),B11 RESET (RST_B), A9 所以在 95 侧,A11 应该是 pwdn,B9 应该是 reset。查看95款19x19 BB板的原理图, A11 由 ADP5585 R4 引脚控制 B9 由 SoC GPIO3 27 控制       因此,在 dts 文件中,用户应按如下方式配置: pinctrl_mipi_dsi_csi: mipidsigrp { fsl,pins = ; }; pinctrl-0 = <&pinctrl_mipi_dsi_csi>; powerdown-gpios = <&adp5585gpio 4 GPIO_ACTIVE_HIGH>; reset-gpios = <&gpio3 27 GPIO_ACTIVE_LOW>; 如果用户需要连接到 15x15 evk 板,那么   pinctrl_mipi_dsi_csi_rst: mipidsirstgrp { fsl,pins = ; }; pinctrl_mipi_dsi_csi: mipidsigrp { fsl,pins = ; }; pinctrl-0 = <&pinctrl_mipi_dsi_csi_rst>, <&pinctrl_mipi_dsi_csi>; powerdown-gpios = <&gpio5 6 GPIO_ACTIVE_HIGH>; reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>; Re: how to enable a second camera on mx95 evk board @yipingwang我使用的是 19x19 EVK 主板,我已经解决了这个问题。谢谢。 RESET 引脚配置需要更改;不能使用 J14 A10 DSICSI_RST_SYNC。
View full article
i.MX 95:M7とA55間の動的TRDC/システムマネージャーリソース割り当ておよびGPIO共有 こんにちは、チームのみなさん。 私たちは i.MX 95プラットフォームを開発しており、まずM7コアからMIPI DSIペリフェラルを使用し、その後実行時にリソースをA55コアに引き渡したいと考えています。 私たちの理解では、周辺リソースとその所有権は 、 System Managerツール を通じて生成・設定 された mx95evk.cfg ファイル内の各論理マシン/プロセッサごとに最初に定義されています。 以下の点について明確にしておきたいと思います。 動的リソースハンドオーバー: 実行時にM7からA55へMIPI DSIペリフェラルリソースを動的に移すことは可能でしょうか?例えば、M7は最初にMIPI DSIを所有・使用し、その後リリースし、その後A55が所有権を取得し同じペリフェラルを使用します。 動的リソース配分: ランタイムハンドオーバーがサポートされている場合、リソースの所有権やアクセス権限を動的に変更するための推奨されるメカニズムやAPIは何ですか?これはSystem Manager、TRDC、または他の仕組みで処理されるのでしょうか? GPIO共有: 同じGPIOポート/リソースをM7とA55の両方が同時にアクセスすることは可能でしょうか?もし可能なら、GPIOリソースを安全に共有するためにTRDCの設定要件やソフトウェア同期メカニズムを実装する必要がありますか? i.MX 95におけるM7とA55間の動的ペリフェラルハンドオーバーやリソース共有の実装方法について、推奨される方法についてのご指針をいただけるとありがたいです。 Re: i.MX 95: Dynamic TRDC/System Manager Resource Allocation and GPIO Sharing Between M7 and A55 こんにちは、 i.MX 95では、MIPI DSIリソースは当初M7で使用され、後にA55に引き継がれます。リソースアクセスと所有権はSystem Manager/TRDCの設定で設定し、実際のランタイムハンドオーバーはソフトウェアで処理すべきです。TRDCはどの論理マシン/ドメインが周辺機器にアクセスできるかを制御しますが、M7とA55間の同期は管理しません。したがって、M7はまずすべてのDSI操作を完了し、ペリフェラルの使用を停止し、A55が制御を取る前にMU/IPCなどのコア間機構を通じてA55に通知すべきです。同様に、GPIOリソースは適切なTRDC構成を通じてM7とA55の両方にアクセス可能ですが、同時アクセスはソフトウェアによる同期が必要です。DSIのユースケースでは、同時に1つのコアだけがペリフェラルをアクティブに使い、ハンドオーバーはMU/IPCで行うのが推奨されます。 Re: i.MX 95: Dynamic TRDC/System Manager Resource Allocation and GPIO Sharing Between M7 and A55 AEチームと話し合った結果、以下のアップデート内容をご参照ください。 i.MX 95では、リソース所有権とTRDC権限は、SM構成ファイル(mx95evk.cfg)でビルド時に静的に定義されます。→はconfig_.h)を生成し、MIXが起動するとシステムマネージャー(SM)によって適用されます。*実行時に周辺機器の所有権を論理マシン(LM)から別の論理マシンへ移すSCMI/SMメッセージはありません。 しかし、SMのドキュメントでは「ディスプレイを別のLMへ引き継ぐこと」がSM_SCMI_PERM_EXCLUSIVEモデルの正確な動機として挙げられています。したがって、引き継ぎは可能ですが、所有権を「移動」するだけでは不可能です。 Q1 & Q2 — MIPI DSI M7 → A55 ハンドオーバー:やり方 LMM(論理マシン管理)SCMIプロトコルは、LMの起動・リセット・シャットダウン・サスペンド・ウェイクのみを行い、RESOURCE_ASSIGNやメッセージOWNERSHIP_TRANSFERはありません。代わりに、時間分割ハンドオフを使用してください。 mx95evk.cfgで両方のLMに最初にアクセス権を付与してください。デフォルトでは、EVK の設定により、MIPI_DSI、MIPI_PHY、DC_DISPENG、BLK_CTRL_DISPLAYMIX、ディスプレイのクロック/電源 (PD_DISPLAY、CLK_DISP*)が AP (LM2) の所有者としてのみ割り当てられます。M7 を優先的に使用するには、これらを M7 LM (LM1) にも追加する必要があります。 SM管理リソース(クロック、電源、リセット)をSM_SCMI_PERM_EXCLUSIVE(api=all)としてマークし、2つのLMからのリクエストが静かに集約・上書きされないようにします。 ハンドオーバー時にM7はDSI/DCIFを静止し、アプリケーションレベルのIPC(MUメールボックスまたはSCMI通知)を通じてA55に信号を送ります。A55(Linux/DRM DSI+DPUスタック)は同じIPを表示します。 ハンドオフシーケンスはお客様のソフトウェア責任(時間的区分)です。SMは、両方のLMが事前にアクセス許可されているため、HWがどちら側からも運転可能であることを保証しています。TRDCの所有権は実行時に書き換えられず、SMプログラムのみがTRDCを実行し、MIX電源投入時の静的設定からのみ可能です。 これを制御するTRDC設定(.cfgファイルに記載): MDAC_am=... — マスタードメイン割り当て(バス・マスタをドメインIDにマッピング) MBC_am=s.b— メモリブロックチェック — ここでペリフェラルアクセスがゲートされます MRC_am=… — メモリ領域チェック(DDRなどの大規模メモリ領域) 各LMはDIDにバインドされます。例:SMは2、AP(LM2)は3、M7(LM1)は4でした。 Q3 — M7とA55の間でGPIOを共有 はい、TRDCはM7ドメインとA55ドメインの両方に同じGPIOインスタンスへの同時アクセスを許可できます(両方のDIDでMBCブロックを有効にすること)。しかし、重要な注意点と、支持される2つのパターンがあります。 注意点:i.MX 95 GPIOにはハードウェア仲裁機能がなく、PDR/DR/GDIRレジスタは物理的に共有されるため、両コアレースから非調整の読み書き・修正・書き込みが可能です。 パターンA(分離ピン+ソフトウェア同期):慣例に従って各コアに特定のピンを割り当てます(設定では既にLMごとにピンが分割されています)。データ/方向レジスタバンクは依然として共有されているため、ハードウェアセマフォ/MUを使用して同時RMWを保護するか、コアが同じレジスタバンクに同時にアクセスしないようにしてください。 パターンB(SM仲裁、真に共有されたインスタンスに推奨): SMが所有し、文書化された役割は 「共有アクセスの仲裁 」とされる常時接続 GPIO1 を経由します。IOMUXC/IOMUX_GPRも同様にSMによって調停されます。Pinmux/daisyは、エージェントごとの権限を持つSCMIピン制御プロトコルを介して設定されます。GPIOデータ操作は直接MMIOで行われます。 Re: i.MX 95: Dynamic TRDC/System Manager Resource Allocation and GPIO Sharing Between M7 and A55 チームの皆さん、こんにちは。 私たちは i.MX 95の19x19 EVK を使っており M7とA55/Linux 間のLVDSディスプレイハンドオーバーを以下のアーキテクチャで実装しようとしています。 M7: 当初はLVDSディスプレイを所有し、制御する。 A55/Linux: その後、Linux起動後にディスプレイの制御を奪います。 現在の実装 開発の初期段階として、LVDSディスプレイをM7によって初期化および制御するように設定しました。M7はディスプレイの初期化に成功し、フレームバッファを青色で埋め尽くし、それがLVDSパネルに正しく表示されます。 以下のリソースをデフォルトのA55所有権から M7に変更しつつ、A55へのアクセスは提供しました。 DC DC0 DC1 DC_CMDSEQ DC_DISPENG DC_DISPENG_INT DC_FL0 DC_FL1 DC_INT_CTL DC_PIXENGINE DC_XPC DC_YUV0 DC_YUV1 DC_YUV2 DC_YUV3 BLK_CTRL_DISPLAYMIX LVDS MIPI_PHY LDB_PLL CLOCK_DISP1PIX ビデオPLL1 PIN_I2C2_SCL PIN_I2C2_SDA LPI2C2 観察された行動 現在の動作は以下のとおりです。 M7は起動し、ディスプレイの初期化に成功した。 青色で塗りつぶされたフレームバッファは、LVDSパネル上に正しく表示されます。 M7の動作中は、ディスプレイは表示されたままになります。 その後、A55/Linuxの起動プロセスが始まります。 Linuxカーネルが起動すると、ディスプレイが真っ白になります。 次のデバイスツリーを使用する場合:fdtファイル imx95-19x19-evk-it6263-lvds1.dtbLinuxはカーネル起動時に常に進行が止まります。 カーネルパニックやコンソール上の明確なエラーメッセージは確認されませんでした。起動プロセスが進行しなくなる。 資源所有権調査 私たちの理解によれば、リソース所有権は System Managerの設定 を通じて静的に設定されており、SCMIメッセージを通じて論理マシン間で所有権を動的に移譲することはできません。 そこで、表示資源をM7とA55の両方に割り当てられるかどうかを調査しました。 しかし、重要なDCリソースの中には、二重所有を支持していないものもあります。特に以下の通りです: DC DC_XPC DC_YUV0 DC_YUV1 DC_YUV2 DC_YUV3 DC_FL0 DC_FL1 DC_2DBLIT これにより、LinuxがDRM/DPUやIT6263/LVDSの初期化時にM7専用の表示リソースにアクセスしようとしている可能性が示唆されます。 質問 以下の点を明確にしていただけますか? 1. DC 、 DC_XPC 、 DC_YUV *、 DC_FL* 、または DC_2DBLIT などのリソース がM7独占的に所有されている場合 、Linuxがハングすることは予想されます か?   2. Linuxの起動時およびDRM/DPU、IT6263/LVDSの初期化時にA55/Linuxがアクセスするディスプレイリソースは? 特に、以下の人々が正確にどのようなリソースにアクセスしているのかを理解したいと思います: LinuxのDRM/DPU ディスプレイコントローラ(DC) IT6263ドライバ LVDS/LDBドライバ ディスプレイクロック/PLL構成 3. 以下のシーケンスを可能にするサポートされたSystem マネージャのリソース所有設定はありますか? M7はLVDSディスプレイを初期化し、駆動します。 A55/Linuxは正常に起動します。 その後、A55/Linuxがディスプレイの制御を引き継ぎます。 両方の論理マシンはハンドオーバーに必要なリソースにアクセスできます。 4. DアドレスリソースがM7とA55間で共有できない場合、M7のディスプレイとA55/Linuxの共存またはディスプレイハンドオーバーの推奨アーキテクチャは何でしょうか?   5. A55/Linuxは、起動初期段階でディスプレイを積極的に駆動することを意図していなくても、DCリソース階層全体の所有権を必要とするのでしょうか?   6. このユースケースで、以下の部分で追加の構成変更が必要か? System マネージャリソース構成 TRDCの権限 SCMI構成 Linuxデバイスツリー ディスプレイ/LVDS構成 7. Linuxのブートハングは、特にIT6263/LVDSディスプレイパスの初期化時に、A55/LinuxがM7が所有するディスプレイリソースにアクセスしようとした際に起こる可能性はありますか?     現段階の主な目的は、 早期起動時やDRM/DPU、IT6263/LVDS初期化時にLinuxがアクセスする正確な表示リソース を特定し、それらのリソースがM7の所有権と共存できるかどうかを判断することです。 参照のために System Managerの設定ファイル(.cfg)とLinuxのブートログを添付しています 。 サポートされているリソース所有権構成、表示リソースの依存関係、または実装のための推奨アーキテクチャに関するガイダンス M7/A55 LVDSディスプレイの引き継ぎ 大変ありがたく思います。   よろしくお願いします。   Re: i.MX 95: Dynamic TRDC/System Manager Resource Allocation and GPIO Sharing Between M7 and A55 この問題を解決するためのAN15131があり、このANにはソースコードも添付されています。 ただし、このANのステータスは「ウェブ出版保留中」で、nxp.com ではリリースされていません。 数日お待ちください。
View full article
i.MX8QM H.264デコードソフトウェア開発に必要なVPU情報 親愛なる、 i.MX8QM内のVPUを使ってH.264ビデオをデコードするソフトウェアを開発したいと考えています。 ただし、リファレンスマニュアルにはVPUの詳細が非常に簡潔です。 その動作に関するより詳しい情報はありますか?例えば、これら4つのM0+コアとのやり取り方法、TSデータの提供方法、デコードされたビデオの取得方法などです。 よろしくお願いいたします! よろしくお願いいたします。 Re: i.MX8QM VPU information needed for developing H.264 decoding software こんにちは、 @Manuel_Salas さん はい、元気です。ご心配ありがとうございます! 念のため、ソフトウェアはM4やM0+コア上でではなくAコア上で開発したいと考えています。 提供されたドキュメントからすると、Linuxディストリビューションの中にドライバがあるはずですよね?このソースコードを見つけたと思う。 これらのM0+コアにインストールしなければならないファームウェア自体もLinuxディストリビューションのどこかに存在しているのでしょうか? 改めてありがとうございました! よろしくお願いいたします。 ToarteFretter。 Re: i.MX8QM VPU information needed for developing H.264 decoding software こんにちは、 @ToarteFretterさん お元気でお過ごしのことと思います。 残念ながら、NXPは詳細なAmphion VPUファームウェアドキュメントを公開していません。ファームウェアはIP所有者(Amphion)から提供されており、NXPにはMコアからVPUを直接制御するためのドライバーやSDKの例はありません。 i.MX VPU Application Programming インターフェース Linux Reference Manual が入手可能です。 よろしくお願いいたします。 サラス。
View full article
'examples/freemaster_examples/fmstr_example_pdbdm' 中的应用程序命令问题 各位 已下载 sdk.sdk_2.x_lpcxpresso54114仅提供 FreeMASTER 示例。除了应用程序命令部分之外,其他方面都运行正常,而我在应用程序命令部分发现了一些奇怪的行为。 更多详情已发布在 GitHub 上,链接如下: https://github.com/nxp-mcuxpresso/mcuxsdk-examples/issues/10 祝好 Paolo Re: Application Command issue in 'examples/freemaster_examples/fmstr_example_pdbdm 您好,如果我理解正确的话,您不明白为什么示例应用程序中的命令 0x10 返回代码 16。 命令 0x10 已注册为回调函数: 因此,当FreeMASTER探测到命令执行时,函数“my_appcmd_handler”会自动被调用。这个回调函数的示例代码非常简单: 这就是为什么你会得到返回代码 16 (=0x10) 作为答案的原因。 我也确认 FreeMASTER 存在一个问题,即对于未知响应,无法显示消息,正如您报告的 app.command(ID 为 0x02)的问题一样。响应 0xcd 应该报告为“未知响应”,但实际上并未生成任何消息。 谢谢, 米哈尔
View full article
mlockall(MCL_FUTURE)を呼び出すプロセスでiMX8MP GPUを使用すると、カーネルBUG() あるお客様がiMX8MPのGPU使用(EGLによる描画)に関する問題を報告しました。以前mlockall(MCL_FUTURE)と呼ばれていたGPU初期化プロセスが、CMA領域がユーザースペースにマッピングされると、カーネルは以下のBUG()を報告します: Kernel BUG at remap_pfn_range_internal+0x23c/0x2c8 Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP CPU: 0 PID: 3197 Comm: galcore_window_ Tainted: G O 6.6.142-7.7.0-devel #1-Torizon Hardware name: Toradex Verdin iMX8M Plus WB on Verdin Development Board (DT) pc : remap_pfn_range_internal+0x23c/0x2c8 x27: 00000000a2100000 x20: 0068000000000fcb x19: 0000007f90000000 ^^^^^^^^^^^^^^^^^^^^^^ the PTE already present Call trace: remap_pfn_range_internal+0x23c/0x2c8 remap_pfn_range+0x24/0x58 dma_direct_mmap+0xf4/0x150 dma_mmap_attrs+0x18/0x3c _CMAFSLMapUser+0x9c/0x150 [galcore] gckOS_LockPages+0xe4/0x148 [galcore] gckKERNEL_MapVideoMemory+0x90/0x1dc [galcore] gckVIDMEM_NODE_LockCPU+0x1b4/0x250 [galcore] _LockVideoMemory.isra.0+0x1f4/0x28c [galcore] gckKERNEL_Dispatch+0x210/0x1730 [galcore] gckDEVICE_Dispatch+0xcc/0x220 [galcore] drv_ioctl+0x340/0x444 [galcore] __arm64_sys_ioctl+0xac/0xf0 Kernel panic - not syncing: Oops - BUG: Fatal exception mlockall(MCL_FUTURE)はリアルタイムアプリケーションで一般的に使われており、問題を報告した顧客はCODESYSを使ってHMIを駆動しています。 AIを活用した分析を実施した結果、問題が発生する理由として考えられる説明が明らかになりました。 galcoreドライバーのCMAアロケーターには.mmap()が含まれていません。フック。_CMAFSLMapUser() の実行中に、mmap() を呼び出して vma を取得し、それを使用して find_vma() を使用して CMA 領域を特定します。mmap() の呼び出し方法により、カーネルは要求を満たすために SHM 領域を遅延的に割り当てることになります。通常の場合、CMAが見つかって再マッピングされると、この割り当てはすぐに破棄されます。 しかし、MCL_FUTUREがアクティブなとカーネルはもはやSHM領域を怠惰に割り当てることができなくなり、mmap()が戻る前にエリア全体を埋め尽くします。この場合、このアドレスには有効なページがあり、後のremap_pfn_range()への呼び出しはメモリ管理のハウスキーピング情報を静かに破棄することになり、これはまさにBUG()が防いでいることです。 CODESYSを実行せずに問題を再現できるプログラムのソースコードを含むzipファイルを添付します。AIエージェントは、この問題を修正するために以下のパッチを提案しました。 diff -uNr a/hal/kernel/inc/gc_hal_options.h b/hal/kernel/inc/gc_hal_options.h --- a/hal/kernel/inc/gc_hal_options.h 2026-09-04 13:00:44.596621860 +0000 +++ b/hal/kernel/inc/gc_hal_options.h 2026-09-04 13:01:15.643862002 +0000 @@ -1471,9 +1471,17 @@ * Enable this macro can replace the /dev/zero by anon_inode: * [galcore] in /proc/ /maps. * Without the macro, run 'cat /proc/ /maps' will print "/dev/zero". + * + * It is also what gives the allocators an ->mmap handler, which is + * required so that the reservation made by vm_mmap() is created as a + * device mapping (VM_IO | VM_PFNMAP) rather than as ordinary anonymous + * memory. Without it, a process that has called mlockall(MCL_FUTURE) + * gets the range pre-faulted inside vm_mmap(), and the subsequent + * remap_pfn_range() then hits BUG_ON(!pte_none()) in remap_pte_range(). + * See tmp_mmap() in gc_hal_kernel_allocator.c. */ #ifndef gcdANON_FILE_FOR_ALLOCATOR -# define gcdANON_FILE_FOR_ALLOCATOR 0 +# define gcdANON_FILE_FOR_ALLOCATOR 1 #endif /* diff -uNr a/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c b/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c --- a/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c 2026-09-04 13:00:44.605314869 +0000 +++ b/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c 2026-09-04 13:01:15.644216883 +0000 @@ -400,7 +400,13 @@ gcmkHEADER_ARG("Allocator=%p Mdl=%p Cacheable=%d", Allocator, Mdl, Cacheable); #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) +#if gcdANON_FILE_FOR_ALLOCATOR + /* Same as the gfp, dma and reserved_mem allocators: go through the + * allocator's anon file so that its ->mmap handler runs. */ + userLogical = (gctPOINTER)vm_mmap(Allocator->anon_file, +# else userLogical = (gctPOINTER)vm_mmap(gcvNULL, +# endif 0L, Mdl->numPages * PAGE_SIZE, PROT_READ | PROT_WRITE, diff -uNr a/hal/os/linux/kernel/gc_hal_kernel_allocator.c b/hal/os/linux/kernel/gc_hal_kernel_allocator.c --- a/hal/os/linux/kernel/gc_hal_kernel_allocator.c 2026-09-04 13:00:44.603242857 +0000 +++ b/hal/os/linux/kernel/gc_hal_kernel_allocator.c 2026-09-04 13:01:15.644041018 +0000 @@ -104,6 +104,36 @@ static int tmp_mmap(struct file *fp, struct vm_area_struct *vma) { + /* + * Declare the reservation as a device mapping with raw PFNs, before + * mmap() returns it to the caller. remap_pfn_range() sets both flags + * anyway; setting them here only makes them effective from the moment + * the VMA is created, and that is what matters: + * + * - the kernel treats VM_IO | VM_PFNMAP as VM_SPECIAL, documented in + * include/linux/mm.h as "Special vmas that are non-mergable, + * non-mlock()able". mmap_region() therefore clears VM_LOCKED from + * this VMA and leaves mm->locked_vm alone, and __mm_populate() + * skips it outright ("if (vma->vm_flags & (VM_IO | VM_PFNMAP)) + * continue;" in mm/gup.c). + * + * - so a process that has called mlockall(MCL_FUTURE) no longer has + * this range pre-faulted inside vm_mmap(). Every other mapping in + * that process keeps being locked and pre-faulted as before; only + * device memory, which is neither pageable nor swappable and gains + * nothing from being pre-faulted, is left out. + * + * - and the allocator's own remap_pfn_range(), a few microseconds + * later, therefore finds an empty range instead of one the kernel + * has just populated, so it no longer trips + * BUG_ON(!pte_none(ptep_get(pte))) in remap_pte_range(). + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0) + vm_flags_set(vma, VM_IO | VM_PFNMAP); +#else + vma->vm_flags |= VM_IO | VM_PFNMAP; +#endif + return 0; } 上流ドライバーはこの問題を回避する別のメカニズムを使用しています。他の galcore アロケータも同じパターン (vm_mmap を呼び出して vma を取得する) を使用しているため、同じ BUG() の影響を受ける可能性があります。 この件について調べて、galcoreドライバーを直してもらえますか?この問題は実際のユースケースが正常に動作することを妨げており、直接的にお客様に影響を及ぼしています。 ありがとうございました。 ラファエル Re: Using iMX8MP GPU on a process that call mlockall(MCL_FUTURE) causes kernel BUG() こんにちは@rbeims  テストを実行してからGPUチームに確認させてください。 よろしくお願いします、 志明 Re: Using iMX8MP GPU on a process that call mlockall(MCL_FUTURE) causes kernel BUG() こんにちは、 @Zhiming_Liu さん、バグを再現できましたか?はいの場合、修正が貴社のBSPに実装される予定時期を教えていただけますか? よろしくお願いいたします。 Re: Using iMX8MP GPU on a process that call mlockall(MCL_FUTURE) causes kernel BUG() こんにちは、 @alvaro_tx さん。 社内チームがこのパッチをテストしました。お客様が直面した問題を直接解決したものの、他のアプリケーションのテスト中に問題を引き起こしました。現在も調査中であり、最終的な結論には至っていません。 よろしくお願いします、 志明 Re: Using iMX8MP GPU on a process that call mlockall(MCL_FUTURE) causes kernel BUG() こんにちは、 @Zhiming_Liu さん。分かりやすいレポートをありがとうございます。完全に理解していて、私たちもこれが起こり得ると思いました。すべて順調です。 引き続きこの件に取り組んでいただき、進捗状況があればお知らせください。 ありがとう、 アルバロ。
View full article
imx95 jailhouse iommu configuration Hi, Is it possible to configure the IOMMU for i.MX95 on Jailhouse? I'm comparing https://github.com/nxp-imx/imx-jailhouse/blob/lf-6.18.20_2.0.0/configs/arm64/imx8qm.c with https://github.com/nxp-imx/imx-jailhouse/blob/lf-6.18.20_2.0.0/configs/arm64/imx95.c and latter does not have any .iommu_units defined. Is this an oversight or is this not possible with i.MX95? From my understanding i.MX95 supports the newer SMMUv3, I would expect something like this in the root cell file: .iommu_units= {   {     .type = JAILHOUSE_IOMMU_SMMUV3,     .base = 0x36600000,     .size = 0x100000,   }, } Thanks. Re: imx95 jailhouse iommu configuration Discussed with the AE team. IOMMU is default enabled on i.MX95. Re: imx95 jailhouse iommu configuration IOMMU setting is default enabled in System Manager config file and kernel dts
View full article
MCXN947 DLL 自动调整功能无法正常工作 你好, 我正在使用 FlexSPI 连接 MCXN947,并搭配 OctalRAM (IS66WVO32M8DALL-200BLI)。 FlexSPI 根时钟通过 PLL1 以 150 MHz 的频率提供,由于 RAM 以 DDR 模式运行,因此我的输出时钟频率为 75 MHz。 `flexspi_device_config_t` 具有以下参数: flexspi_device_config_t psram_config = { .flexspiRootClk = 150000000U, .isSck2Enabled = false, .flashSize = OCTALRAM_ISSI_SIZE, .CSIntervalUnit = kFLEXSPI_CsIntervalUnit1SckCycle, .CSInterval = 2, .CSHoldTime = 2, .CSSetupTime = 2, .dataValidTime = 2, .columnspace = 4, .enableWordAddress = false, .AWRSeqIndex = HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA, .AWRSeqNumber = 1, .ARDSeqIndex = HYPERRAM_CMD_LUT_SEQ_IDX_READDATA, .ARDSeqNumber = 1, .AHBWriteWaitUnit = kFLEXSPI_AhbWriteWaitUnit2AhbCycle, .AHBWriteWaitInterval = 0, .enableWriteMask = true, }; 为了初始化 FlexSpi,我使用了 SDK FLEXSPI_DRIVER,版本 2.6.0。 当我使用自动调整功能(如手册第 10.3.15.6 节“采样 DLL 配置”中所述)配置延迟单元时,使用以下值: • SLVDLYTARGET=0x0F(分频器 16/32 * 根时钟 = 3.33 ns) • REFPHASEGAP=0x02 • DLLEN=0x01 • OVRDEN=0x01 在等待 ASLVLOCK 和 AREFLOCK 锁定位之后,我得到 ASLVSEL 为 0x01,AREFSEL 为 0x00。因此,RAM 的读取和写入功能无法工作,因为设置的延迟时间约为 120 ps! /* Configure DLL. */ configValue = FLEXSPI_CalculateDll(base, config); base->DLLCR[index] = configValue; /* DLL neu kalibrieren */ base->DLLCR[0] |= FLEXSPI_DLLCR_DLLRESET_MASK; base->DLLCR[0] &= ~FLEXSPI_DLLCR_DLLRESET_MASK; /* Exit stop mode. */ base->MCR0 &= ~FLEXSPI_MCR0_MDIS_MASK; /* Lock abwarten */ while ((base->STS2 & (FLEXSPI_STS2_AREFLOCK_MASK | FLEXSPI_STS2_ASLVLOCK_MASK)) != (FLEXSPI_STS2_AREFLOCK_MASK | FLEXSPI_STS2_ASLVLOCK_MASK)) { } SDK_DelayAtLeastUs(10U, CLOCK_GetCoreSysClkFreq()); 即使我使用不同的 SLVDLYTARGET 值,ASLVLOCK 和 AREFLOCK 的输出也不会改变。 但是,如果我使用寄存器 OVRDEN=0x01 和 OVRDVAL=0x1b 将延迟时间设置为固定值(对应于大约 3.36 ns 的延迟时间),则从 RAM 读取和写入数据都不会出现任何问题。 但是,由于根时钟大于 100 MHz,NXP 建议使用 DLL 的自动调整功能。 很遗憾,它似乎无法确定正确的延迟时间! 通信与控制(I3C | I2C | SPI | FlexCAN | 以太网 | FlexIO) 核心与内存 MCX N Re: MCXN947 DLL auto-adjusted function not working 嗨@IbhDaniel 谢谢你的帖子! MCXNx4 参考手册指出,串行根时钟是 FlexSPI 内核时钟(见表 79)。时钟使用情况)。就你的情况而言,这个时钟配置为 150 MHz。 我还看到您已经实现了 DLL 采样配置,自动校准路径似乎是正确的方法。设置 SLVDLYTARGET = 0x0F 和 DLLEN = 0x01 配置正确。唯一发现的问题是 OVRDEN = 0x01 而不是 0x00,这会禁用自动校准输出路径,并导致 ASLVSEL = 0x01 和 AREFSEL = 0x00,而不管 SLVDLYTARGET 值如何。 我只想确认以上分析是否适用于您的实现。请您确认一下,您的配置中是否使用了以下设置:MCR0[RXCLKSRC] = 3h(闪存提供的读取选通信号和来自 DQS 焊盘的输入)? Re: MCXN947 DLL auto-adjusted function not working 嗨,卡洛斯, 谢谢你的回复。 抱歉,这是我的笔误,我把 OVRDEN 位设置为 0 了。在 MCU 寄存器的截图中,您也可以看到 OVRDEN 的值被设置为 0。 我正在使用 OctalRam IS66WVO32M8DALL-200BLI,如果我理解正确的话,这个模块会将 DQS 信号发送到 MCU。
View full article
MCSPTE1AK144 – 霍尔FOC在转速超过约600 rpm时停止,且Simulink自动部署功能失效 你好, 我正在使用 NXP MCSPTE1AK144芯片和 Sunrise 永磁同步电机,并参考霍尔传感器永磁同步电机 FOC 示例。 软件安装: MATLAB R2025b NXP S32K1xx 2.2.0 支持包 NXP S32K1xx 4.3.0 基于模型的设计工具箱 模型构建成功并生成了 .mot 文件。文件。当我手动复制 .mot 文件时将文件传输到 EVB-S32K144 驱动器后,电机运行正常。通过主机模型,我可以启动和停止电机并更改速度参考值。 我目前面临两个问题。 电机转速超过约 600 转/分钟时停止运转。 电机在低速运转时运行正常。我测试了从每分钟 10 转左右开始的运行情况,也逐渐提高了速度。 当转速超过大约 600 rpm 时,电机停止运转,D11 开始闪烁红色。 我该如何确定导致此次停机的确切故障原因?我应该监测哪个故障变量或寄存器? Simulink 自动部署 Simulink 模型构建成功并生成 .mot 文件。文件已存在,但固件不会自动刷写到主板上。手动复制相同的 .mot 文件将文件写入 EVB-S32K144 驱动器可以正常工作。 如何正确配置才能通过 OpenSDA 将生成的代码自动部署到 S32K144? 我还找到了 NXP 针对此示例的较早建议,该建议使用 MATLAB R2021a 和 NXP 支持包 S32K1xx 2.3.0。您会推荐使用此配置而不是 R2025b 和 MBDT 4.3.0 吗? 谢谢!
View full article
LPSPI3 registers inaccessible from Linux (Bus error on devmem read) — external SPI device on P11 EXP Summary I'm trying to bring up two external MCP2515 CAN controllers (Waveshare 2‑CH CAN HAT, confirmed working on a genuine Raspberry Pi) on the FRDM‑IMX93 board's P11 EXPI header, using LPSPI3 on GPIO_IO08‑11 (the pins that match the Raspberry‑Pi‑compatible header positions per UM12181 Table 21). After fixing every device‑tree‑level issue I could find (power, pinmux, chip‑select, pinctrl‑assert‑gpios), the SPI clock (SCK) never toggles on the physical header pin, and a direct register read of the LPSPI3 block causes a Bus error. A different, known‑working peripheral (LPUART1) reads back fine from the same address space. This points to a resource/bus access restriction (RDC or similar) rather than anything fixable from the Linux device tree. Board / software Board: FRDM‑IMX93 (NXP), SoC: MIMX9352CVVXMAB BSP: NXP i.MX Release Distro, kernel 6.18.2-1.0.0-gf49f45233f7b Target peripheral: lpspi3 (spi@42550000, aliased spi2 in /aliases, real dts label confirmed via /proc/device-tree/__symbols__ to be lpspi3) External device under test: 2× MCP2515 (Waveshare 2‑CH CAN HAT) on CS0/CS1 What's already confirmed working (ruled out) Power to the header. reg_vexp_3v3 / reg_vexp_5v are regulator-fixed nodes that default to disabled (regulator_summary showed use=0). Added regulator-always-on + regulator-boot-on via overlay fragments targeting &reg_vexp_3v3 / &reg_vexp_5v (confirmed real labels via __symbols__). Verified 3.3 V / 5 V physically present on P11 afterwards. Pinmux. GPIO_IO08‑11 correctly muxed to LPSPI3_PCS0/SIN/SOUT/SCK using the official macros from imx93-pinfunc.h. input_reg/input_val are 0x0000/0x0 for these three functions, so no DAISY‑chain select is required (ruled out via macro inspection, no separate register needed). Chip‑select. cs-gpios = <&gpio2 8 GPIO_ACTIVE_LOW>, <&gpio2 7 GPIO_ACTIVE_LOW>; (bit‑banged GPIO CS, matching NXP's own upstream board‑support pattern for this node). Confirmed via cat /sys/kernel/debug/gpio and multimeter/logic‑analyzer: CS0 toggles correctly and physically reaches the header pin. pinctrl-assert-gpios. NXP's own upstream &lpspi3 reference for this board includes pinctrl-assert-gpios = <&pcal6408 0 GPIO_ACTIVE_HIGH>; (this line does not appear in most public guides, only in the board's own dts patch). Added it; confirmed via /proc/device-tree/__symbols__ that pcal6408 resolves, and via cat /sys/kernel/debug/gpio that the GPIO is asserted (out hi) once lpspi3's default pinctrl state is requested. Overlay applies cleanly. No FDT_ERR_NOTFOUND from U‑Boot's fdt apply; /sys/bus/spi/devices/ shows spi2.0 and spi2.1 registered by the SPI core. ERR051608 (LPSPI TCR[PRESCALE] errata). Checked spi-fsl-lpspi.c history — the fix (prescale_max = 1 for fsl,imx93-spi) landed in mainline Aug 2024 / stable 6.6.51 & 6.10.10 Sept 2024, well before this kernel version (6.18.2), and the compatible string (fsl,imx93-spi) is already present in the base board dts, so the driver should auto‑apply this limit. Not ruled out with certainty (no direct register confirmation of the actual PRESCALE field written), but timeline strongly suggests it's already handled. The actual symptom With CS0/CS1, MISO, MOSI, SCK probed on the physical P11 pins (multimeter, then a logic analyzer at 10–20 MSa/s triggered on CS0 falling edge) while continuously retrying a transfer (spidev_test in a loop, and separately by repeatedly forcing mcp251x re‑probe via echo spi2.0 > /sys/bus/spi/drivers/mcp251x/bind): CS0 toggles. Confirmed on both multimeter and logic analyzer. SCK never toggles. Flat, no activity, regardless of continuous transfer attempts. MOSI never toggles. Both MCP2515s fail identically: mcp251x spi2.0/spi2.1: MCP251x didn't enter in conf mode after reset / Probe failed, err=110 (ETIMEDOUT) — i.e. the driver's own SPI‑level reset+read‑CANSTAT sequence gets no response, consistent with SCK never leaving the SoC. Root cause narrowed to clock / bus access, not device tree   # clk_enable_count AND clk_prepare_count are both 0, despite the controller # actively being used in a continuous retry loop $ cat /sys/kernel/debug/clk/clk_summary | grep -i lpspi3 lpspi3_root 0 0 0 50000000 0 0 50000 N deviceless no_connection_id lpspi3 0 0 0 50000000 0 0 50000 N 42550000.spi per $ cat /sys/kernel/debug/clk/lpspi3/clk_prepare_count 0 lpspi3's functional (per) clock shows clk_enable_count=0 and clk_prepare_count=0 even while 42550000.spi (the real, bound consumer) is actively attempting transfers in a loop (spidev_test loop, and separately by repeatedly forcing mcp251x re‑probe via echo spi2.0 > /sys/bus/spi/drivers/mcp251x/bind). clk_prepare() is the step before clk_enable() — the fact that it's never even called suggests the driver's transfer path (or a pm_runtime_get() in front of it) never reaches its own clock‑management code for this device, rather than the clock being requested and then failing to gate on. I don't have kernel build tooling to add tracepoints, so I can't yet tell whether this is a pm_runtime resume that silently no‑ops, a missing dependency (e.g. a power-domains reference this board's lpspi3 node needs but doesn't have), or something else in spi-fsl-lpspi.c for this specific kernel build. The decisive register‑level test — direct devmem read:   $ devmem 0x44380000 32 # LPUART1 base — known-good peripheral 0x04040007 $ devmem 0x42550000 32 # LPSPI3 base (VERID register) Bus error (core dumped) A completely unrelated, working peripheral (LPUART1, used for the debug console) reads back fine from the same CPU/bus context; LPSPI3's base address faults on a plain 32‑bit read. I initially suspected a Resource Domain Controller (RDC) style access restriction specific to this board, but several NXP Community threads (i.MX25/i.MX6ULL "devmem return bus error", i.MX8MP I2C‑from‑DSP thread) point to the same symptom being the normal, expected result of touching an AIPS‑bus peripheral whose clock is gated off — not necessarily a security/domain restriction. That's consistent with clk_enable_count=0 above and makes me now think this is a clock‑enablement bug in the driver/PM path for this device, not (necessarily) an RDC block — though I can't fully rule out RDC without lower‑level tooling. This isn't a general i.MX93 LPSPI3 limitation For context: a separate NXP Community thread ([iMX93AUTO EVK] SPI Configuration for QCA7006AQ, community.nxp.com/t5/i-MX-Processors/iMX93AUTO-EVK-SPI-Configuration-for-QCA7006AQ-with-imx93AUTO-EVK/m-p/1839847) shows someone successfully driving an external SPI device over LPSPI3 on the same GPIO_IO08‑11 pins on the i.MX93‑11x11‑EVK (same SoC), using:   c &lpspi3 { compatible = "fsl,imx93-spi", "fsl,lpspi"; cs-gpios = <&gpio2 8 GPIO_ACTIVE_LOW>; status = "okay"; ... }; &iomuxc { pinctrl_lpspi3_qca: lpspi3grp { fsl,pins = < MX93_PAD_GPIO_IO11__LPSPI3_SCK 0x3fe MX93_PAD_GPIO_IO10__LPSPI3_SOUT 0x3fe MX93_PAD_GPIO_IO09__LPSPI3_SIN 0x3fe MX93_PAD_GPIO_IO08__LPSPI3_PCS0 0x3fe /* native PCS0, not plain GPIO */ >; }; }; I tried this exact variant (native LPSPI3_PCS0/LPSPI3_PCS1 instead of plain GPIO2_IO08/GPIO2_IO07, plus the explicit compatible override) on the FRDM board — no change, devmem 0x42550000 32 still faults, clk_enable_count/clk_prepare_count still 0. This rules out pinmux/compatible‑string choice as the cause on this board, and — combined with the EVK success — makes me suspect something FRDM‑board‑specific (either in imx93-11x11-frdm.dts's handling of lpspi3, or in this board's U‑Boot/ATF‑level RDC/power‑domain setup) rather than a general i.MX93 SoC or mainline‑driver limitation. Questions for NXP Given clk_prepare_count/clk_enable_count stay at 0 for lpspi3 even while the SPI core is actively driving transfers to a bound spi2.0/spi2.1 device, and a plain register read of 0x42550000 bus‑faults — what's missing from the FRDM‑IMX93's lpspi3 device‑tree node (or from board‑level RDC/power‑domain setup) that the working EVK config doesn't need? Is LPSPI3 on the FRDM‑IMX93 intentionally reserved for another domain (e.g. Cortex‑M33 / secure world, or the on‑board MAYA‑W2 tri‑radio module path) at the board's default RDC/ATF configuration, unlike the EVK? Is there a reference imx93-11x11-frdm-lpspi.dts (analogous to imx93-11x11-evk-lpspi.dts) for using LPSPI3 externally via P11 on this specific board? How to reproduce Base board dtb: stock imx93-11x11-frdm.dtb shipped with the i.MX Release Distro image (unmodified NXP lpspi3 + pcal6408 + reg_vexp_3v3/reg_vexp_5v nodes — all confirmed present via __symbols__). Apply the overlay described above (regulator always‑on, pinctrl + cs‑gpios + pinctrl‑assert‑gpios on &lpspi3; tried both plain‑GPIO and native‑PCS0/PCS1 pinmux variants, same result both times). Bind spidev (built‑in, CONFIG_SPI_SPIDEV=y) manually to spi2.0:   echo spidev > /sys/bus/spi/devices/spi2.0/driver_override echo spi2.0 > /sys/bus/spi/drivers/spidev/bind spidev_test -D /dev/spidev2.0 -s 1000000 -v — "succeeds" (no I/O error) but RX data is not a loopback of TX even with MOSI/MISO physically shorted; SCK never toggles on a logic analyzer regardless. cat /sys/kernel/debug/clk/clk_summary | grep lpspi3 → clk_enable_count=0. cat /sys/kernel/debug/clk/lpspi3/clk_prepare_count → 0. devmem 0x42550000 32 → Bus error. devmem 0x44380000 32 (LPUART1) → succeeds normally. Happy to provide the full overlay source, dmesg, and clk_summary/gpio dumps if useful. Re: LPSPI3 registers inaccessible from Linux (Bus error on devmem read) — external SPI device on P11 Hello @irfanktm  Please take a look to the below community post: https://community.nxp.com/t5/i-MX-Processors/FRDM-IMX93-LPSPI3-EXPI-P11-SPI-pins-produce-no-valid-SPI/td-p/2413472 Best regards, Salas.
View full article
FRDM-IMX93:Linux 无法访问 LPSPI3 寄存器(读取设备内存时出现总线错误)——外部 SPI 设备 摘要 我正在尝试在 FRDM-IMX93 板的P11 EXPI 接头上使用LPSPI3在 GPIO_IO08-11 上启动两个外部 MCP2515 CAN 控制器(Waveshare 2-CH CAN HAT,已确认在真正的 Raspberry Pi 上工作)(引脚与 UM12181 表 21 中 Raspberry Pi 兼容接头的位置相匹配)。 在修复了我能找到的所有设备树级问题(电源、引脚复用、片选、引脚控制断言-GPIO)之后,SPI 时钟 (SCK)始终无法在物理接头引脚上切换,并且直接读取 LPSPI3 块的寄存器会导致总线错误。另一个已知工作正常的外部设备(LPUART1)可以从相同的地址空间正常读取数据。这表明存在资源/总线访问限制(RDC 或类似限制),而不是 Linux 设备树中可以修复的问题。 板/软件 开发板:FRDM-IMX93(恩智浦),SoC:MIMX9352CVVXMAB BSP:NXP i.MX 发布发行版,内核版本 6.18.2-1.0.0-gf49f45233f7b 目标外设:lpspi3(spi@42550000,别名在 /aliases 中为 spi2,通过 /proc/device-tree/__symbols__ 确认实际 dts 标签为 lpspi3) 被测外部设备:CS0/CS1 上的 2 个 MCP2515(Waveshare 2 通道 CAN HAT) 已确认有效(已排除) 给排气歧管供电。reg_vexp_3v3 / reg_vexp_5v 是默认禁用的调节器固定节点(regulator_summary 显示 use=0)。通过覆盖片段添加了 regulator-always-on + regulator-boot-on,目标为 &reg_vexp_3v3 / &reg_vexp_5v(通过 __symbols__ 确认了真实标签)。事后验证 P11 上实际存在 3.3 V / 5 V 电压。 Pinmux。使用 imx93-pinfunc.h 中的官方宏,GPIO_IO08‑11 已正确复用到 LPSPI3_PCS0/SIN/SOUT/SCK。对于这三个函数,input_reg/input_val 均为 0x0000/0x0,因此不需要 DAISY 链选择(通过宏检查排除,不需要单独的寄存器)。 芯片选择。cs-gpios = , (位操作 GPIO CS,与 NXP 针对此节点的上游板级支持模式相匹配)。通过 cat /sys/kernel/debug/gpio 和万用表/逻辑分析仪确认: CS0 切换正常,并且物理上连接到了接头引脚。 pinctrl-assert-gpios。NXP自己的上游 &lpspi3 参考中包含 pinctrl-assert-gpios = <&pcal6408 0 GPIO_ACTIVE_HIGH>;(此行并未出现在大多数公开指南中,仅出现在板自己的 dts 补丁中)。已添加;通过 /proc/device-tree/__symbols__ 确认 pcal6408 已解析,并通过 cat /sys/kernel/debug/gpio 确认,一旦请求 lpspi3 的默认 pinctrl 状态,GPIO 就会被钳位(输出 hi)。 覆盖层涂抹顺畅。U-Boot 的 fdt apply 没有出现 FDT_ERR_NOTFOUND;/sys/bus/spi/devices/ 显示 SPI 内核已注册 spi2.0 和 spi2.1。 ERR051608(LPSPI TCR[PRESCALE] 勘误)。已检查 spi-fsl-lpspi.c历史记录——该修复(fsl、imx93-spi 的 prescale_max = 1)已于 2024 年 8 月合并到主线版本 / 稳定版 6.6.51。& 6.10.10 2024 年 9 月,远早于此内核版本 (6.18.2),并且兼容字符串 (fsl,imx93-spi) 已存在于主板 dts 中,因此驱动程序应该自动应用此限制。虽然不能完全排除这种可能性(没有直接的注册确认实际写入了 PRESCALE 字段),但时间线强烈表明此事已经处理完毕。 实际症状 使用万用表探测物理 P11 引脚上的 CS0/CS1、MISO、MOSI、SCK,然后使用逻辑分析仪以 10–20 MSa/s 的采样率在 CS0 下降沿触发,同时不断重试传输(在循环中使用 spidev_test,以及通过 echo spi2.0 > /sys/bus/spi/drivers/mcp251x/bind 反复强制 mcp251x 重新探测): CS0切换。经万用表和逻辑分析仪验证。 SCK 从不切换。平坦,无任何活动,无论持续尝试转移。 MOSI 从不切换。 两个 MCP2515 的故障情况完全相同:mcp251x spi2.0/spi2.1:MCP251x 在复位后未进入配置模式 / 探测失败,错误代码为 110 (ETIMEDOUT) — 即驱动程序自身的 SPI 级复位 + 读取 CANSTAT 序列未得到响应,这与 SCK 从未离开 SoC 的情况一致。 根本原因已缩小到时钟/总线访问,而非设备树。   # clk_enable_count is 0 despite the controller actively being used $ cat /sys/kernel/debug/clk/clk_summary | grep -i lpspi3 lpspi3_root 0 0 0 50000000 0 0 50000 N deviceless no_connection_id lpspi3 0 0 0 50000000 0 0 50000 N 42550000.spi per 即使 42550000.spi(真正的、绑定的消费者)正在循环中积极尝试传输,lpspi3 的功能(每个)时钟也显示 enable_count=0——它并非只是“未使用”(与 lpspi1/2/4 相比,它们是无设备的,也显示 0,因此仅凭这一点并不能得出结论)。 决定性的测试——通过 devmem 直接读取寄存器:   $ devmem 0x44380000 32 # LPUART1 base — known-good peripheral 0x04040007 $ devmem 0x42550000 32 # LPSPI3 base (VERID register) Bus error (core dumped) 一个完全无关的、工作正常的外部设备(LPUART1,用于调试控制台)可以从相同的 CPU/总线上下文中正常读取数据。LPSPI3 的基地址在普通的 32 位读取中就会出现故障,甚至在任何时钟门控或引脚复用考虑之前就会发生这种情况。这看起来像是资源域控制器 (RDC) 或类似的访问控制机制,在硬件级别阻止 Cortex-A55 (Linux) 域访问此外围设备的地址范围,而与 Linux 设备树中的任何可配置项无关。 向恩智浦提出的问题 FRDM-IMX93 上的 LPSPI3 是否故意保留给另一个功能域(例如,该板默认的 RDC 配置中包含 Cortex-M33 / secure world 内核,导致在 Linux 系统下,如果不进行额外的 SPL/ATF/TF-A 级重新配置,则无法使用该内核? 如果是这样,是否有记录在案的方法将 LPSPI3 总线访问权限重新分配给 Cortex-A55 非安全域(U-Boot SPL 中的 RDC 配置,或 OP-TEE/TF-A 更改),或者尽管 GPIO_IO08-11 已引出,但此板的 P11 接头上根本不支持外部 SPI? 这是我的板/内核版本特有的问题,还是默认 FRDM-IMX93 电路板支持包的已知特性?如果存在参考文件 imx93-11x11-frdm-lpspi.dts(类似于 EVK 的 imx93-11x11-evk-lpspi.dts),将会非常有帮助。 如何重现 底板 dtb:随 i.MX 版本 发行版镜像一起提供的标准 imx93-11x11-frdm.dtb(未修改的 NXP lpspi3 + pcal6408 + reg_vexp_3v3/reg_vexp_5v 节点 — 全部通过 __symbols__ 确认存在)。 应用上述覆盖层(regulator always‑on, pinctrl + cs‑gpios + pinctrl‑assert‑gpios on &lpspi3)。 手动将 spidev(内置,CONFIG_SPI_SPIDEV=y)绑定到 spi2.0:   echo spidev > /sys/bus/spi/devices/spi2.0/driver_override echo spi2.0 > /sys/bus/spi/drivers/spidev/bind spidev_test -D /dev/spidev2.0-s 1000000 -v — 传输“成功”(无 I/O 错误),但即使 MOSI/MISO 物理短路,RX 数据也不是 TX 的环回。 devmem 0x42550000 32 → 总线错误。 如果需要,我很乐意提供完整的 overlay 源代码、dmesg 和 clk_summary/gpio 转储。 Re: FRDM-IMX93: LPSPI3 registers inaccessible from Linux (Bus error on devmem read) — external SPI d 你好@irfanktm 希望你一切都好。 请查看以下社区帖子: https://community.nxp.com/t5/i-MX-Processors/FRDM-IMX93-LPSPI3-EXPI-P11-SPI-pins-produce-no-valid-SPI/td-p/2413472 顺祝商祺! 萨拉斯。
View full article
LPCXpresso54S018M EVBのRTCは消費電力が非常に大きい。 私が使用しているのはLPCXpresso54S018M EVBです。LPC54018に内蔵されているRTCは、主電源が切断された後も動作する必要があります。ファームウェア内でRTCを初期化し、有効化しました。VBATTライン(J10:11)には、CR2032というコイン型電池で電源を供給しました。主電源が供給されている間は、VBATTラインの消費電力は0です。問題ありません。しかし、主電源を取り外すと、VBATTラインの消費電流が約41μAまで増加します。データシートによると、消費電流は1μA未満であるはずです。なぜ?電流消費電力を1μA以下にするにはどうすればよいですか? LPC54xxx Re: Huge power consumption on RTC ofLPCXpresso54S018M EVB. データシートでこの要件について読みました(VBAT>VDDの場合、高VBATリークを防ぐために外部リセットピンはフローティング状態にする必要があります)。 でも、どうすればそれが実現できるのか分かりません。 私はEVBの回路図について話しているわけではありません。EVB - プロトタイプ作成専用。しかし、動作中の機器の回路では、MCU RESETNが外部WDTチップ(TPS3823-33DBVR)のRST出力に直接接続されます。 おすすめはありますか:接続MCUの修正方法。リセット<->WDT。RST接続の回路図はVBATの電流消費が1μAを超えないようにしていますか? WDT <-> MCUの回路図を添付します。私のデバイスにおけるRESETN相互接続: この図では、「Reset」と名付けられた配線がLPC54005JBD100のRESETNピンに接続されています。 Re: Huge power consumption on RTC ofLPCXpresso54S018M EVB. こんにちは、 @jcxzさん 約41μAは、RTCの消費電流ではなく、RESETN回路からのリーク電流である可能性が最も高い。主電源が切断されたとき、VBAT > VDD となります。VBAT > VDD の場合、高 VBAT リークを防ぐために外部リセットピンはフローティング状態にする必要があります。 LPCXpresso54S018M-EVKはRESETNをプッシュボタン/デバッグ回路に接続するため、未改造のEVKはその測定条件を満たしません。 電流を減らすには: MCUのRESETNピンをEVKリセットネットワークから分離してください。 BR ハリー Re: Huge power consumption on RTC ofLPCXpresso54S018M EVB. こんにちは、 @jcxzさん ここでいう「フローティング」とは、バッテリーのみでの動作時(VBATが存在し、VDDが除去されている状態)には、RESETNに外部DC経路が存在しないことを意味します。MCUの内部リセットプルアップは無効化する必要はありません。データシートにはすでにその条件が記載されています。 提案された監視回線では、RESETNは電源のないTPS3823出力および外部RCネットワークに接続されたままです。したがって、データシートに記載されているRESETNピンのフローティング状態という条件は満たされていません。これは観測された約41μAの電流に対するもっともらしい説明であるが、正確な漏洩経路はまだ実験的に検証されていない。 データシート条件を満たすために、ウォッチドッグリセット出力とMCU RESETNピンの間に通常開閉のアイソレーションスイッチを挿入することを推奨します。すべての外部リセット部品(プルアップ抵抗、コンデンサ、ウォッチドッグ出力など)はウォッチドッグ側に留め、MCU側には外部プルアップ、プルダウン、コンデンサ、その他の直流接続は含まれてはいけません。 選択したスイッチは、供給電圧が除去された際に低漏れ・高インピーダンス状態を明示的にサポートしている必要があります。 BR ハリー
View full article
在 CW_PA_v10.5.1 中安装 QCVS 软件包时出错 您好, 我需要为 PBL 创建一个 QorIQ 配置项目,因此需要安装 QCVS 软件包。 我下载了“QCVS Offline Installation Packages for CodeWarrior for Power Architectures Rev 4.5.zip”之前从支持门户网站下载的。最近,我在一台新笔记本电脑上安装了CodeWarrior 10.5.1 。 但是我无法在 CodeWarrior 中安装或添加 QCVS 包。安装过程中,我遇到以下错误: 请帮我解决这个问题。 此致, 维玛尔普拉萨德。 Re: Error while installing the QCVS package in CW_PA_v10.5.1 请卸载您电脑上的CodeWarrior软件。 请从以下链接下载“适用于 Power Architecture 的 CodeWarrior Rev 4.5 的 QCVS 离线安装包.zip”和“适用于 Power Architecture 的 CodeWarrior 开发工作室 v10.5.1 – Windows.exe”。 https://support.nxp.com/s/case/500Te00000gyh6mIAA/community-error-while-installing-the-qcvs-package-in-cwpav1051?language=en_US 请先安装适用于 PA 10.5.1 的 CodeWarrior。然后,在新工作区中打开 CodeWarrior IDE,并安装“适用于 Power Architectures Rev 4.5 的 CodeWarrior 的 QCVS 离线安装包.zip”。来自 CodeWarrior IDE 的帮助->安装新软件->添加->归档。 Re: Error while installing the QCVS package in CW_PA_v10.5.1 嗨@yipingwang , 谢谢你的回复。 我已在新工作区中尝试过,但安装时仍然出现此错误。 是否有适用于 CW_PA_v10.5.1 的最新版 QCVS 工具? 此致, 维玛尔普拉萨德。 Re: Error while installing the QCVS package in CW_PA_v10.5.1 请先在新工作区中打开 CodeWarrior IDE,然后从 CodeWarrior IDE 的“帮助”->“安装新软件”->“添加”->“归档”安装 QCVS 4.5。
View full article
利用智能家居设备节约能源? 有没有人尝试过通过使用智能家居设备来降低能源费用?我即将搬进一套新的出租公寓,希望能想办法减少开支。与伴侣同住。
View full article
Saving energy by using smart home devices? Has anyone tried to reduce their energy bills by using smart home devices? I’m moving into a new rental flat and am hoping to be creative in reducing my bills. Staying with a partner.
View full article
无法下载RTD - 下载选项呈灰色 我无法在 S32 Design Studio (S32DS) 中下载/安装 S32K344 板的 RTD 软件包。选择或下载RTD的选项呈灰色,不可用。 我已经重启了S32DS并检查了可用的更新/软件包,但问题仍然存在。因此,我无法继续进行项目设置和开发活动。 请您帮忙查看并提供解决方案建议? 细节: IDE:S32 设计工作室 (S32DS) 目标MCU:S32K344 问题:RTD 下载选项呈灰色 影响:无法安装/下载 RTD 代码包,软件包   Re: Unable to Download RTD - Download Option Greyed Out 您能看到这是如下所示的第二个标签页吗?
View full article
S32K312 LPUART – 波特率为 1 Mbps、时钟频率为 30 MHz 时帧错误 您好,NXP团队: 我正在使用 NXP S32K312 MCU 和 LPUART 外设。通信所需的 UART 波特率为 1 Mbps。 LPUART 6 的功能时钟频率为 30 MHz。 我最初对 UART 的配置如下: 波特率:1,000,000 bps LPUART 时钟:30 MHz SBR 或尾数:2 OSR 或除数:15 数据位:8 奇偶性:无 停止位:1 LSB优先 在这种配置下,我观察到通信过程中出现帧错误。 我理解LPUART波特率计算的原理是: 波特率 = LPUART 时钟频率除以 SBR 乘以 OSR 我还尝试了一种旨在实现精确 1 Mbps 速度的配置: SBR = 2 OSR = 15 波特率 = 30 MHz ÷ 2 × 15 = 1 Mbps 然而,我仍然观察到构图错误。 我还尝试了 921600 波特率,但在这个波特率下也观察到了帧错误。 当前观察 LPUART 时钟:30 MHz 所需通信波特率:1 Mbps UART 配置:8 N 1 在 1 Mbps 速率下观察到帧错误 在 921600 波特率下也观察到帧错误。 通信是通过TI BQ79600桥接器进行的。 使用逻辑分析仪监测TX波形 请问您能否帮忙澄清一下: S32K312 LPUART 能否在 30 MHz LPUART 时钟频率下可靠地支持 1 Mbps UART 通信? 对于 30 MHz 时钟频率,是否有推荐的 OSR 和 SBR 组合可以实现 1 Mbps 的速率? 在 1 Mbps 速率下,OSR 值、SBR 值或波特率精度是否存在任何已知的限制或约束? 是否需要对 LPUART 进行任何额外的配置才能实现可靠的 1 Mbps 通信? 当通信速率为 1 Mbps 时,LPUART 是否有推荐的时钟频率? 帧错误是否与 LPUART 采样配置或时钟容差有关? 如有需要,我可以提供 LPUART 波特率寄存器值、RTD 配置和逻辑分析仪捕获结果。 请提供推荐的配置方案以及任何其他调试步骤。 谢谢。 Re: S32K312 LPUART – Framing Error at 1 Mbps Baud Rate with 30 MHz LPUART Clock 你好@gayathri123 , 帧错误是接收端错误。因此,临时重新复用用作 LPUART6_TX 的 PTD9 本身不应该设置 LPUART 帧错误标志。帧错误表明接收器在预期为停止位的地方检测到了逻辑 0。   请问BQ79600是否在LPUART6_STAT[FE]中报告了该错误,还是只有逻辑分析仪报告了该错误? 2.75 毫秒的低电平唤醒脉冲比 UART 帧长得多。如果接收器保持使能状态时,S32K312 RX 输入端也存在低电平,则 LPUART 可能会正确地报告帧错误,因为未检测到有效的停止位。因此,该标志可能源自唤醒阶段,并在正常的 UART 通信开始时保持设置状态。 请做个测试: 在更改引脚复用之前,请禁用 LPUART 接收器和发射器。 使用 GPIO 生成唤醒脉冲。 将 GPIO 输出恢复为高电平。 重新封装 PTD9 到 LPUART6_TX。 清除之前所有接收错误标志。 重新启用 LPUART 并等待所需的 BQ79600 唤醒恢复时间。 发送有效的命令帧。 请提供 TX 和 RX 的逻辑分析仪捕获结果,以及唤醒脉冲前后 LPUART6_STAT 的值。确定 STAT[FE] 被设置的确切时刻尤为重要。 顺祝商祺! 帕维尔 Re: S32K312 LPUART – Framing Error at 1 Mbps Baud Rate with 30 MHz LPUART Clock 你好 我们使用S32K312 ,并将LPUART6配置为1 Mbps。PTD9配置为 LPUART6 的 TX 引脚。 当我们临时将 PTD9 配置为 GPIO,然后将其重新复用为 LPUART6 TX 时,我们在 UART 通信期间观察到帧错误。 顺序如下: 将 PTD9 配置为 GPIO,并将其拉低约2.75 毫秒,以产生所需的唤醒脉冲。 将 PTD9 重新封装回LPUART6_TX 。 通过 LPUART6 以 1 Mbps 的速度 传输虚拟数据 。 UART 通信过程中出现帧错误。 Re: S32K312 LPUART – Framing Error at 1 Mbps Baud Rate with 30 MHz LPUART Clock 你好@gayathri123 , 感谢您提供的详细描述。 首先要澄清的是 LPUART 波特率公式。对于 S32K3 LPUART,有效波特率计算如下:   波特率 = LPUART 功能时钟 / (SBR × (OSR + 1))   因此,如果 BAUD 寄存器包含 SBR = 2 和 OSR = 15,则得到的波特率为:   30 MHz / (2 × 16) = 937,500 波特   因此,它不是 1 Mbps。当通信伙伴以 1 Mbps 的速度运行时,这种偏差足以导致帧错误。 对于 30 MHz LPUART 功能时钟,可以通过以下方式获得精确的 1 Mbps 波特率:     SBR = 2 OSR寄存器值 = 14 有效过采样率 = 15   30 MHz / (2 × 15) = 1,000,000 波特   请注意,某些配置工具可能会显示有效过采样率,而波特率寄存器存储的值则减一。因此,请在初始化后读取完整的 LPUART6_BAUD 寄存器,并验证实际的 OSR 和 SBR 字段。 S32K312 LPUART 可支持 1 Mbps 通信。30 MHz 的功能时钟也适用,因为它能够精确地生成波特率。除了正确的时钟、波特率设置、帧格式、引脚配置和接收器配置之外,通常不需要其他特殊配置。 顺祝商祺! 帕维尔
View full article