Multi Source Translation Content

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

Multi Source Translation Content

ディスカッション

ソート順:
[802.11] Wi-Fi接続/切断プロセス 802.11 標準では、接続手順には、デバイスを Wi-Fi ネットワークの一部にし、ネットワーク内で通信するために実行する必要がある 3 つの主要な手順が含まれています。その3つのステップは、デバイスの検出(スキャン)、デバイス認証(接続前に互換性機能などを確認する)、そして最後に接続を確立する(関連付け)です。今後、この投稿では各ステップの詳細を提供します。接続手順でのメッセージのやり取りを以下に示します。   図 1.オープンシステムでの接続プロセス   図 2.接続プロセスでのメッセージ交換 図2は、接続時のクライアントとAPデバイス間のメッセージ交換手順のWi-Fiスニファログを示しています(ここでは、クライアントデバイスはXiaomi、APはMarvellデバイスです。 接続設定プロセス 1. スキャン ネットワークに参加するには、まずクライアントまたはステーションがネットワークを見つける必要があります。有線ネットワークでは、ケーブルまたはジャックを差し込むだけでネットワークが見つかります。ワイヤレスの世界では、参加プロセスを開始する前に、互換性のあるネットワークを特定する必要があります。このネットワークの識別プロセスは、 スキャンと呼ばれます。 スキャンプロセスにはいくつかのパラメータが必要です。これらのパラメータは、BSSType、BSSID、チャンネルリスト、スキャンタイプ、MinChannelTime、MaxChannelTimeです。パラメータは、メーカーのWi-Fiドライバに応じてデフォルトとして設定されますが、ユーザーが変更することができます、つまり、要件が非表示のネットワークの場合、アクティブスキャンは非表示のネットワーク(SSIDをブロードキャストしないネットワーク)には役立たないため、scantypeパラメータをパッシブスキャンとして設定できます。 スキャン方法には、パッシブスキャンとアクティブスキャンの2つがあります。 デフォルトでは、無線は、運用国で許可されているすべてのチャネルで両方のタイプのスキャンを実行します。デフォルトではどちらのタイプのスキャンも使用できますが、アクティブスキャンは、地域の政府の規制で送信が許可されているチャネルによってのみ実行されます。ライセンスなしの使用が許可されていないチャンネルは、アクティブスキャンから除外されます。 パッシブスキャン: パッシブスキャンでは、WLANステーションはチャネルリストに従って各チャネルに移動し、ビーコンフレームを待ちます。ビーコンフレームは、アクセスポイント(およびIBSSのステーション)が通信または自身をアナウンスするために使用されます。 アクセス ポイントは、Target Beacon Transmission Time(TBTT)と呼ばれる定義された間隔でビーコンの送信を試みます それにもかかわらず、アクセスポイントはセル内の他のワイヤレスデバイスと同じです。ネットワークがビジー状態の場合、送信できません。APがビーコンを送信する時間になり、ネットワークがビジー状態になると、APはメディアにアクセスできるようになるまでビーコンの送信を遅らせます。 802.11では、ネットワークがビジーかどうかはCSMA/CAプロトコルを使用して確認できます。CSMA/CA では、フレームの準備ができると、送信デバイスはチャネルがアイドル状態かビジー状態かを確認し、衝突を回避します。チャネルがビジー状態の場合、送信デバイスはランダムな時間待機し、チャネルがアイドル状態であるかどうかを再度確認します。チャネルがアイドル状態の場合は、フレームを送信します。ビーコンのフレーム構造は、以下の通りです。 図 3.ビーコンフレーム   ビーコンフレームの必須フィールドの説明。 タイムスタンプ:ビーコンフレームを受信した後、すべてのステーションはこのタイムスタンプでローカルクロックを更新します。これは同期に役立ちます。 ビーコン間隔: ターゲット ビーコン送信時間 (TBTT) 間の時間単位 (TU) の数を表します。デフォルト値は 100TU (102.4 ミリ秒) です。 機能情報:デバイス/ネットワークの機能に関する情報が含まれています SSID:ネットワークのサービスセットIDが含まれています。 サポートされているレート: このフィールドには、アクセスポイントでサポートされているデータレートの情報が含まれています。 この情報は、パッシブ スキャン中に潜在的なクライアントだけでなく、BSS に既に関連付けられているクライアントによっても使用されることに注意してください。 パッシブスキャンは、クライアントがビーコンをリッスンして待つ必要があるのに対し、APを見つけるためにアクティブにプローブするよりも、通常、より時間がかかります。パッシブ スキャンの別の制限は、クライアントがチャネルで十分な時間待機しない場合、クライアントが AP ビーコンを見逃す可能性があることです。 アクティブスキャン: 可能なすべてのチャネルをスキャンし、ビーコンをリッスンしてネットワークを検出することは、あまり効率的ではないと考えられています。この検出プロセスを強化するために、ステーションはアクティブスキャンと呼ばれるものを使用することがよくあります。 アクティブスキャンモードでは、ステーションは引き続き各チャネルを順番に通過しますが、APからの信号を受動的に聞く代わりに、ステーションはこのチャネルで利用可能なネットワークを尋ねることを目的としたプローブリクエスト管理フレームを送信します。IBSS 内の AP またはアクティブ ステーションがその周波数を示している場合は、プローブ応答フレームで応答する必要があります。   図 4. スキャン方法   プローブ要求が発信ステーションによって送信されると、プローブタイマーのカウントダウンが開始され、応答を待ちます。このプローブタイマーの値は、通常、ビーコン間隔よりもはるかに短くなります。一般的な値は 10 ミリ秒の範囲です。タイマーの終了時に、ステーションは受信した回答を処理します。応答が受信されなかった場合、ステーションは次のチャネル(異なる周波数)に移動し、同じ検出プロセスを繰り返します。 プローブ要求の目的は、通常、AP とそれがサポートするネットワーク (SSID や BSSID) を検出することです。 図 5. プローブ要求/応答フレーム このフレームには、主に SSID と移動局がサポートするレートの 2 つのフィールドが含まれています。プローブ要求を受信したステーションは、この情報を使用して、要求元のステーションがネットワークに参加できるかどうかを判断します。 プローブ応答フレームフィールドは、モバイルステーションがパラメータを一致させてネットワークに参加できるようにするビーコンフレームフィールドと非常によく似ています。   2. 認証 プローブ要求/プローブ応答交換、またはビーコンのリッスンによってネットワーク検出を実行した後、ネットワークに参加したいステーションは、アクセスポイントと認証フレームを交換する認証プロセスを通過します。認証フレームを受信すると、APは確認応答を送信し、次に認証応答を送信します。 「認証」フレームの最初の目的は、デバイス タイプを検証すること、つまり、要求元のステーションがネットワークに参加するための適切な 802.11 機能を持っていることを確認することです。 オープンシステム認証:機能に関連する情報は、認証リクエストを使用してステーションとAP間で交換されます。要求が受け入れられると、APは認証応答で「成功」を送信します。 共有キー認証:IEEE 802.11-1997標準には、「共有キー」と呼ばれるWEP共有キー交換認証メカニズムが含まれていました。この共有キー交換により、デフォルトのオープンシステム認証にさらに 2 つのフレームが追加され、4 フレームの交換が行われます。この後者の方法は共有キー認証と呼ばれ、WEP 暗号化の使用が必要であり、現在では広く使用されていません (また、推奨されません)。 認証の第 1 フェーズは上記で説明されていますが、WPA または WPA2 が使用されている場合は、認証の第 2 フェーズ (つまり、4-way handshakeing process) は、デバイスが関連付けられた後に行われます。 オープンシステム認証と共有鍵認証の詳細については、802.11 セキュリティの投稿 を参照してください。 図 6.認証フレーム 上記のように、認証フレームは次のフィールドで構成されています。 認証アルゴリズム番号: オープン システムの場合は 0、共有キーの場合は 1。 認証トランザクション シーケンス番号: 進行状況の現在の状態を示します。 ステータスコード: 成功の場合は 0、未指定の失敗の場合は 1。 Challenge Text: Shared Key Authentication frameで使用されます。 3. 協会 802.11 認証フェーズが成功の結果で完了すると、ステーションはアソシエーション フェーズに移行します。この交換の目的は、ステーションがネットワークに参加し、アソシエーションID[AID]を取得することです。 関連付けリクエスト: アソシエーション フェーズで送信される最初のフレームは、要求側ステーションから AP(または IBSS 内のステーション)に送信されます。このフレームはアソシエーション要求フレームであり、このフレームの応答はアソシエーション応答フレームです。 アソシエーション要求はユニキャスト管理フレームであり、常に確認応答されます。 図 7.関連付けリクエスト 関連付けの応答: アソシエーション要求が確認されると、AP は要求の各フィールドを調べ、それらがすべて自身の 802.11 パラメータと一致することを確認します(図 6 を参照)。パラメータが一致しない場合、APはその違いがブロッキングであるかどうかを確認し、それに基づいてAPが認証応答を送信します。 - パラメータの差がブロックされている場合は、ステータスコード 1 のレスポンスが送信されます (関連付けを拒否するため)。 - ノンブロッキング差分/パラメータに差分がない場合、ステータスコード0(成功)とAP独自のパラメータの応答がリクエストステーションに送信されます。ステーションは AP の機能と互換性がある必要があり、互換性がないと、関連付けプロセスが終了し、別の AP の検索が開始されます。 図 8.アソシエーションレスポンス 接続のティアダウン アソシエーション解除:ステーションがAPに関連付けられると、どちらの側もアソシエーション解除フレームを送信することで、いつでもアソシエーションを終了できます。 ステーションは、現在のネットワークを離れて別のAPをローミング/参加する前に、Disassociation frameを送信できます。 APは、ステーションが無効なパラメータを使用しようとした場合、AP自体が設定変更中、ハッカーの攻撃など、さまざまな場合にこのフレームを送信できます。 アソシエーション解除フレーム(DA)は、アソシエーションを解除するステーションのユニキャストMACアドレス、またはAPがネットワーク内のすべてのステーションのアソシエーションを解除する必要がある場合のブロードキャストアドレスです。ユニキャストフレームの場合、フレームは受信局によって確認され、ブロードキャストフレームは確認されません。 図 9.アソシエーション解除フレーム Disassociation フレームは非常に小さいです。これには、「理由コード」というフィールドが 1 つだけ含まれています。 関連付けが解除されたステーションは、引き続き認証されます。新しい Association リクエスト フレームを送信して、認証済みステータスを保持したまま、再関連付けを試みることができます。別のセルにローミングするステーションは、認証されたステータスを保持し、認証タイムアウトが期限切れになる前に同じセルに戻るときにプロセスを加速できるように、関連付け解除フレームを使用することも選択できます。   図 10.アソシエーション解除フレーム交換   このフレームは、パラメータが変更され、ステーションまたは AP が通信パラメータを再ネゴシエートする必要がある場合にも使用されます。   認証解除:ステーションまたは AP は、認証解除フレームを送信することもできます。このフレームは、AP の再起動が必要な場合や、ステーションが Wi-Fi 通信を停止した場合など、すべての通信が終了した場合に使用されます。 また、認証が完了する前にフレームを受信した場合にも使用されます。たとえば、認証シーケンスを実行する前にアソシエーション要求またはデータ フレームを送信しようとするステーションは、AP から認証解除フレームを受信し、認証を最初に実行する必要があることを示します。フレーム形式は、関連付け解除フレームと同じです。 図 11.認証解除フレーム交換   ローミング ローミングとは、802.11 ワイヤレス ネットワークのコンテキストでは、クライアントが確立された Wi-Fi ネットワークの関連付けを、接続を失うことなく、同じ拡張サービス セット (ESS) 内の 1 つのアクセス ポイントから別のアクセス ポイントに移動するプロセスです (例:定義された時間間隔内、通常は数秒の範囲)。パフォーマンスを向上させるには、ローミング時間を短くする必要があります。 ローミング プロセスでは、モバイル デバイスは関連付け解除フレームを以前に関連付けられたアクセス ポイント(AP)に送信し、デバイスが接続する別のアクセス ポイントと 802.11 フレームを交換することで再関連付けプロセスを開始します。クライアントデバイスは別のAPをスキャンし、認証フレームを交換した後、再アソシエーション要求を送信しますが、ここではアソシエーションの代わりに再アソシエーション要求が使用され、接続プロセスの最初の2つのステップは同じままです。 図 12.ローミング プロセスでのメッセージ交換     図 13.ローミング表現   接続と切断のプロセスで使用されるWi-Fi API 次の表は、NXP i.MX RT SDKで接続および切断プロセスに使用できるAPIの一部を示しています。   テーブル 1.SDK で使用できる API API 形容 から呼び出すことができます wifi_send_scan_cmd 使用可能なネットワークをスキャンするために使用されます。単一のSSIDベースのスキャンのみをサポートします。これを複数のSSIDのリストに拡張できます。 ステーションとAP wlan_add_network 既知のネットワークのリストに特定のネットワークプロファイルを追加します。 ステーションとAP wlan_remove_network 既知のネットワークのリストから特定のネットワークプロファイルを削除します。 ステーションとAP wlan_connect 特定のネットワーク(AP)に接続します。 駅 wlan_disconnect ステーションをネットワーク(AP)から切断します。 駅 wlan_start_network 特定のネットワークを開始します。 AP wlan_stop_network 特定のネットワークを停止します。 AP このようなAPIの詳細については、ドキュメント「MCUXpresso_SDK_WLAN_Driver_Reference_Manual.pdf」を参照してください。場所 /docs/wifi から入手できます。
記事全体を表示
spi nor デモ imx8qxpc0 mek 内のすべて (ブートローダー、デバイスツリー、Linux カーネル、rootfs) SPI内のすべて(ブートローダー、デバイスツリー、Linuxカーネル、rootfs)のデモです。これを実現するために、生の読み取り(sf read)/生の書き込み(uuuスクリプト内のsf write)を使用します。 sf probe 0; sf read ${fdt_addr} 0x500000 0x100000; sf read ${loadaddr} 0x600000 0x1E00000; sf read ${initrd_addr} 0x2400000 0x600000; setenv bootargs console=${console},${baudrate} earlycon=${earlycon},${baudrate} rdinit=/linuxrc; booti ${loadaddr} ${initrd_addr} ${fdt_addr} |-- 0001-all-in-spi-demo-lf-5.10.72-2.2.0.patch --- このデモ用のパッチ |-- demo_binary | |-- flash.b0.bin --- b0 ブートローダー | |-- flash.bin --- c0 ブートローダー | |-- Image-imx8qxpc0mek.bin --- Linux カーネル | |-- imx8qxp-mek.dtb --- デバイスツリー | |-- uramdisk_boot.rootfs.aarch64.img --- RAMディスク | |-- uuu.qspi.all.b0.uuu --- b0用 uuu スクリプト | `-- uuu.qspi.all.uuu --- c0用 uuu スクリプト `-- readme.txt --- このファイル # 使用される SPI レイアウトは次のとおりです: # - --------- -------------------------------------------- # | | flash.bin | env | dtb | Image | rootfs | # - --------------- -------------------------------------- # ^ ^ ^ ^ ^ ^ ^ # | | | | | | | # 0 4kiB 4MiB 5MiB 6MiB 36MiB 42MiB 0x1000 0x400000 0x500000 0x600000 0x2400000 テスト: HW: i.MX8QXP MEK SW: lf-5.10.72-2.2.0 + 0001-all-in-spi-demo-lf-5.10.72-2.2.0.patch テストログ: SF: mt35xu512aba をページサイズ 256 バイト、消去サイズ 128 KiB、合計 64 MiB で検出 デバイス 0 オフセット 0x500000、サイズ 0x100000 SF: 1048576 バイト @ 0x500000 読み取り: OK デバイス 0 オフセット 0x600000、サイズ 0x1e00000 SF: 31457280 バイト @ 0x600000 読み取り: OK デバイス 0 オフセット 0x2400000、サイズ 0x600000 SF: 6291456 バイト @ 0x2400000 読み取り: OK [ 4.787552] imx6q-pcie 5f010000.pcie:PCIeポートを追加できません。 [ 4.797467] 未使用のカーネルメモリを解放中:2944K [ 4.807379] initプロセスとして /linuxrc を実行 syslogdの起動:OK klogdの起動:OK sysctlの実行:OK ネットワークの開始:OK /bin/sh:ttyにアクセスできません。ジョブ制御がオフになっています / # i.MX 8ファミリ | i.MX 8QuadMax (8QM) | 8QuadPlus i.MX 8M | i.MX 8M Mini | i.MX 8M Nano i.MX6 全て Linux
記事全体を表示
IMX8 SAI TDM16 の問題 IMX8Nano カーネル 5.15 カスタム ボードを使用していますが、SAI5 の TDM16 に問題があります 問題は、TDM 16 ストリームの場合、チャンネルがランダムに 8 チャンネルずつ切り替わることです。カーネルトレースを追加し、fsl_saiドライバーから次のデバッグを確認します if (フラグ & FSL_SAI_CSR_FEF) { dev_dbg(dev, "isr: 送信アンダーランを検出しました\n"); ドライバーはこの状態で FIFO リセットを実行する必要がありますが、これは発生しないか、効果がありません。 次にアンダーランが発生したときに、16 チャンネル構成で常に 8 チャンネルアウトのステップインとして、チャンネルは再調整されます。 SAI はスレーブ モードであり、送信回線のみがアクティブになっています。 &sai5 { #sound-dai-cells = <0>; pinctrl-names = "デフォルト"; ピンctrl-0 = <&pinctrl_sai5>; fsl,dataline = <0 0x00 0xff>; DMas = <&sdma2 8 24 0>, <&sdma2 9 24 0>; fsl,txmasterflag = <1>; status = "大丈夫"; };   simpl-audio-card f の使用   出力1 {   compatible = "シンプルオーディオカード"; simple-audio-card,name = "SAI51"; シンプルオーディオカード、ステータス="大丈夫"; シンプルオーディオカード、ビットクロックマスター= <&spdif_codec1>; シンプルオーディオカード、フレームマスター= <&spdif_codec1>; シンプルオーディオカード、フォーマット= "left_j";                 CPU1:シンプルオーディオカード、CPU {                 sound-dai = <&sai5>;                 dai-tdm-slot-num = <16>; dai-tdm-slot-width = <32>;         };           spdif_codec1:  simple-audio-card,codec { サウンドダイ= <&codec_out1>;         };                };          codec_out1: 1output_txcodec { #sound-dai-cells = <0>; #address セル= <0>; #size セル= <0>;         compatible = "linux,spdif-dit"; サウンド名プレフィックス= "spdif_codec1"; status = "大丈夫";     };   私たちは、オンライン上のさまざまな投稿からこれに対するいくつかの修正を試しましたが、成功しませんでした。   他の誰かがそのような問題を見ましたか?このアンダーランは、インターアップが早期に発生したため、すべてのチャネルのDMAに十分なデータがないと想定しています。 また、再生ログにエラーはなく、TDM8モードにもエラーはありません。   どんな助けでも大歓迎です。 日時:IMX8 SAI TDM16の問題 私たちは問題を脇に押しやった。しかし、dtsの観点から他の人と共有するために、ここで学んだいくつかの重要な教訓があります。 fsl,dataline = <0 0x00 0xff>; ピン マッピングで複数のデータ行を指定した場合は、この設定に注意してください。この構成を次のものと組み合わせます。 CPU1:シンプルオーディオカード、CPU {                 sound-dai = <&sai5>;                 dai-tdm-slot-num = <16>; dai-tdm-slot-width = <32>;         };   これにより、スロット番号は SAI インターフェイスのチャネルの総数ではなく、データ ラインごとに必要なチャネル数を参照する必要があるため、32 チャネル インターフェイスが作成されます。   したがって、これは基本的に32チャネル操作であり、16しか必要としなかったため、64ビットのDMAが表示されていました。   次のように 4 X TDM4 構成に切り替えました。 4データライン pinctrl_sai5: sai5grp { FSL、ピン = < MX8MN_IOMUXC_SAI2_MCLK_SAI5_MCLK 0xd6 MX8MN_IOMUXC_SAI2_RXC_SAI5_TX_BCLK 0xd6 MX8MN_IOMUXC_SAI2_RXFS_SAI5_TX_SYNC 0xd6 MX8MN_IOMUXC_SAI2_RXD0_SAI5_TX_DATA0 0xd6 MX8MN_IOMUXC_SAI2_TXFS_SAI5_TX_DATA1 0xd6 MX8MN_IOMUXC_SAI2_TXC_SAI5_TX_DATA2 0xd6 MX8MN_IOMUXC_SAI2_TXD0_SAI5_TX_DATA3 0xd6 >; }; サイ5 &sai5 { #sound-dai-cells = <0>; pinctrl-names = "デフォルト"; ピンctrl-0 = <&pinctrl_sai5>; fsl,dataline = <0 0x00 0xff>; DMas = <&sdma2 8 24 0>, <&sdma2 9 24 0>; fsl,txmasterflag = <1>; /delete-property/ fsl,shared-interrupt; status = "大丈夫"; };   カードとコーデック   出力1 {   compatible = "シンプルオーディオカード"; simple-audio-card,name = "SAI51"; シンプルオーディオカード、ステータス="大丈夫"; シンプルオーディオカード、ビットクロックマスター= <&spdif_codec1>; シンプルオーディオカード、フレームマスター= <&spdif_codec1>; シンプルオーディオカード、フォーマット= "left_j";                 CPU1:シンプルオーディオカード、CPU {                 sound-dai = <&sai5>;                 dai-tdm-slot-num = <4>; dai-tdm-slot-width = <32>;         };           spdif_codec1:  simple-audio-card,codec { サウンドダイ= <&codec_out1>;         };              };          codec_out1: 1output_txcodec { #sound-dai-cells = <0>; #address セル= <0>; #size セル= <0>;         compatible = "linux,spdif-dit"; サウンド名プレフィックス= "spdif_codec1"; status = "大丈夫";     }; スロー番号が 4 であることに注意してください。各データラインには、現在4つのデータチャネルがあります。ALSA を使用して、これらをマッピングする必要があります。dmixを使用して8つのステレオを作成しますが、マッピングは次のとおりです。 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 0    4   8    12  1     5    9    13   2   6    10    14   3     7     11     15 チャネル数は、fls、マルチレーン、および共有割り込みを無効にしなかったため、このようなものです これが他の誰かを助けることを願っています。 日時:IMX8 SAI TDM16の問題 Hello, 更新していただきありがとうございます。 確認のため、SAI Transmit Configuration 3 Register (TCR3) の送信チャネル イネーブル ビットがデザインでイネーブルになっていることを確認してください。 よろしくお願いいたします。 日時:IMX8 SAI TDM16の問題 そのため、16ビットオーディオでテストしましたが、これまでのところエラーはありません。まだ数時間しか経っていないため、テストはソークで実行し続けます。これを本番環境で使用することはできませんが、興味深いテストです。 DMAコントローラーは32ビットなので、16chの32ビットオーディオデータの場合、サンプルあたり64ビットのオーディオについて話しており、2つのDMAスロットを使用し、アンダーランの場合、FIFOは1で同期しなくなり、データの半分を表すため、8チャンネルスイッチになります。 ここで、アンダーランが発生したときの32ビットモードでのfifoリセットについて理解する必要がありますが、これは32ビットのデータのみをクリアし、フルサンプルに関連する64ビットはクリアしないため、これが影響しない理由だと思います。また、これらのアンダーランが発生する理由と、DMA割り込みがシステムに追いつかない理由についても説明します。 日時:IMX8 SAI TDM16の問題 DMIXのような他のAlsaプラグインでも発生するため、DMIX自体を除外しました 日時:IMX8 SAI TDM16の問題 この現在のテスト環境では、alsa 経由でパイプされるオーディオが固定されており、受信側コーデック (clck src) も固定されているため、ビット レートを下げることはできません。別の方法で試してみます。 アップデートとして、マスター モードでクロックを設定しましたが、スレーブ モードではクロックの安定性に関連している可能性があると考えていましたが、これは影響しませんでした。 私たちはalsaで16chと8 X 2chを混在させるdmixプラグインを実行しており、現在調査中です。 日時:IMX8 SAI TDM16の問題 Hello, ビットレートを下げた場合、エラーは発生しますか? よろしくお願いいたします。 日時:IMX8 SAI TDM16の問題 alsa再生ログにエラーはなく、TDM8モードにもエラーはありません。
記事全体を表示
MX6 Dual Lite SABRE AI CPU 卡 PMIC 选择用于定制设计 Hello, 根据 i.MX6 Dual Lite Sabre AI 原理图 (sch-27767_a_x3.pdf),PMIC 部分与原理图中标记的电压水平存在冲突。原理图建议使用MMPF0100F0ZES PMIC 部件。 PMIC 数据表(修订版)9.0,12/2015)建议如果使用MCIMX6DLAICPU1参考设计,则使用该部件的“NP”版本。 应该使用哪个编程版本? “ F0”版本适合这种设计吗? i.MX6 Dual Lite 处理器的上电顺序应该如何? 提前致谢。 回复:MX6 Dual Lite SABRE AI CPU 卡 PMIC 选择,用于定制设计 Hello, 我们建议使用MMPF0100F0AEP来设计 MX6DL 此致
記事全体を表示
S12X PLL(フィルタ)カリキュレータ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 以下は、次の計算に使用できる 2 つのユーティリティです。   - HCS12 デバイスの PLL フィルター コンポーネント値 (例: MC9S12DP256   - S12XE、S12XF、S12XS、S12P、S12HYなどのS12(X)デバイスのPLLレジスタ値   どちらのユーティリティにも、PDF形式の適切なユーザーマニュアルが付属しています。 全般
記事全体を表示
操作指南:使用 S32 调试探头对 S32G2xx 进行命令行 GDB 调试 S32 Design Studio for S32 Platform IDE 内置的 S32 调试器支持通过 GDB 命令行访问 S32 调试探针的闪存编程和调试功能。本文档仅提供针对 NXP 设备启动调试会话的必要命令,不涉及常规 GDB 命令行操作(这些操作可在 GNU 社区及其他非 NXP 关联的公开网站查阅详细说明)。 准备工作 设置软件工具 安装 S32 Design Studio for S32 Platform 安装用于调试设备的开发包。在本案例中,需安装 S32G2xx 开发包。此软件包非常重要,因为 S32 调试器支持元器件包含初始化内核所需的设备特定的 Python 脚本。 设置硬件 确认 S32G274A 评估板的设置。 配置 JTAG。S32G274A 评估板支持 10 针和 20 针 JTAG 连接。默认的板载配置为 20 针,若使用 10 针 JTAG 接口,请将跳线 J59 的位置从 2-3(默认)改为 1-2。S32 调试器和 S32 调试探针均支持这两种接口。 连接电源线 设置 S32 调试探针 通过 JTAG 电缆将 S32 调试探针连接到评估板。有关安装说明,请参考《S32 调试探针用户手册》。使用上一步中已确认的 JTAG 连接。 通过 USB 或以太网(通过局域网或直接连接,并配置为静态 IP 地址)将 S32 调试探针连接到主机 PC,同时通过 USB 端口连接电源。 启动 S32 Design Studio for S32 Platform 创建新项目或打开现有项目,并确认其能成功构建。如果创建新项目,请确保在 “新建项目向导” 中选择了 S32 调试器。 流程 由于需要为每个要调试的核心启动单独的调试线程,并且启动调试线程的方法取决于它是主核心还是辅助核心以及是否会加载可执行映像,或者可执行文件是否已在运行并且只需附加调试器。以下 3 个部分将介绍这些场景: 主核心加载映像并运行:应用程序映像将由调试器直接加载到内存中,然后初始化并启动。主核心将启动应用程序使用的任何辅助核心。 辅助核心:主核心已启动辅助核心,它现在正在运行,调试器将通过连接方法进行连接。 主核心映像已在内存中并正在运行:主核心已通过其他方式初始化并启动,例如通过目标上的 Linux 操作系统,因此调试器将通过附加方法进行连接,而无需初始化或将映像加载到内存中。 请继续执行适用于您要启动调试线程的核心的部分。 主核心加载图像并运行 准备要调试的核心的初始化脚本。 打开内核初始化 Python 脚本: {S32DS Install Path}\S32DS\tools\S32Debugger\Debugger\scripts\s32g2xx\s32g2xx_generic_bareboard_all_cores.py 取消注释以下行: #_JTAG_SPEED = 16000 #_PROBE_IP = "10.112.101.91" #_GDB_SERVER_PORT = 45000 #_CORE_NAME = 'M7_0'#_RESET_TYPE = “默认” #_RESET_DELAY = 1 #_REMOTE_TIMEOUT = 60 #_IS_LOGGING_ENABLED = True 此文件由 S32 Design Studio IDE 中的 S32 调试器使用,其中的设置从 GUI 提供,因此这些行被注释掉,以便允许 GUI 设置进行控制。提供注释行是为了使脚本可以更轻松地通过命令行方法运行。 更新 IP 地址行 (_PROBE_IP) 以匹配已连接到您的电脑的 S32 调试探针的 IP 地址。请参阅 S32 调试探针的用户指南,以获取有关如何获取 IP 地址的详细信息。  如有必要,更新核心名称 (_CORE_NAME)。有关受受支持内核的完整列表,请参阅 s32g2xx_context.py。 使用新名称保存文件以保留原始文件。例如,s32g2xx_gen_bb_all_c_my_probe.py。这确保了 S32 调试器仍然能够正常运行。 启动 GTA 服务器。在命令提示符或 Windows 文件资源管理器中运行命令: {S32DS Install Path}\S32DS\tools\S32Debugger\Debugger\Server\gta\gta.exe  应出现如下窗口:   确保 Python 的环境变量已设置。在命令提示符中,运行以下命令: 设置 PYTHONPATH={S32DS 安装路径}\S32DS\build_tools\msys32\mingw32\lib\python2.7;{S32DS 安装路径}\S32DS\build_tools\msys32\mingw32\lib\python2.7\site-packages 启动 GDB。在命令窗口中,运行以下命令: Windows 操作系统: {S32DS Install Path}\S32DS\tools\gdb-arm\arm32-eabi\bin\arm-none-eabi-gdb-py.exe(适用于 arm32) 或者 {S32DS Install Path}\S32DS\tools\gdb-arm\arm64-eabi\bin\aarch64-none-elf-gdb-py.exe(适用于 arm64) Linux 操作系统: arm-none-eabi-gdb-py 现在命令窗口中应该会显示 (gdb) 提示符: 在(gdb)提示符下,输入以下命令(按此顺序): source {S32DS Install Path}\\S32DS\\tools\\S32Debugger\\Debugger\\scripts\\s32g2xx\\s32g2xx_gen_bb_all_c_my_probe.py这将指定用于初始化的脚本。 py board_init() 这将初始化电路板。它仅应针对初始核心进行调用。在多核调试工作流程中,针对其他核心的调试器启动将省略此步骤。 py core_init() 这将初始化步骤 1 中初始化脚本中指定的内核。 现在可以使用标准 GDB 命令。例如,您可能希望加载一个 ELF 文件: 文件 {S32DS Workspace Path}\\New_S32G_Project\\New_S32G_Project_M7_0\\Debug_RAM\\New_S32G_Project_M7_0.elf 加载 次级核心 完成主核调试启动后,可以通过在辅助核上启动 GDB 调试来执行多核调试。 需要在主内核 GDB 会话中执行一些额外的步骤,输入以下命令: 设置 *0x34100000 = 0x34200000  设置 *0x34100004 = 0x34100025 设置 *0x34100024 = 0xFFFEF7FF 设置 *0x34200000 = 0x34300000 设置 *0x34200004 = 0x34200025 设置 *0x34200024 = 0xFFFEF7FF b main c 这些行准备在次级内核上启动调试的环境。这将允许在每个内核有独立的 ELF 文件的情况下进行多内核调试。这些内容可以在 S32 Design Studio IDE 中主内核的调试配置的启动选项卡的运行命令字段中找到,适用于从新应用程序项目向导创建的任何多内核项目。注意:如果所有内核只有一个 ELF 文件,则应跳过这些“set *0x... = 0x...”命令。 一般来说,将断点设置在主程序处是正确的,如图所示,但这可能需要根据项目内次级内核的启动时间进行更改。 准备要调试的辅助核心的初始化脚本。 打开内核初始化 Python 脚本: {S32DS Install Path}\S32DS\tools\S32Debugger\Debugger\scripts\s32g2xx\s32g2xx_attach.py 此脚本与用于主内核的脚本不同。它旨在在已经初始化并运行的内核上启动调试会话。 编辑要调试的辅助核心的脚本。由于此脚本是为主核心设置的,因此需要对辅助核心的设置进行一些调整 取消注释以下几行: #_JTAG_SPEED = 14000 #_GDB_SERVER_PORT = "127.0.0.1:45000" #_RESET_TYPE = "default" #_PROBE_IP = "s32dbg:10.222.24.64" #_CORE_NAME = 'M7' #_RESET_DELAY = 1 #_CMD_TIMEOUT = 7200 #_REMOTE_TIMEOUT = 60 #_IS_LOGGING_ENABLED = True #_SOC_NAME = "S32G274A" 对以下行进行更改: _JTAG_SPEED = 14000 -> None _GDB_SERVER_PORT = "127.0.0.1:45000" -> 45000 _RESET_TYPE = "default" _PROBE_IP = "s32dbg:10.222.24.64" -> None _CORE_NAME = 'M7' -> 'M7_1'(此处应设置为与要调试的核心名称匹配,详见s32g2xx_context.py文件中的完整列表) _RESET_DELAY = 1 _CMD_TIMEOUT = 7200 _REMOTE_TIMEOUT = 60 _IS_LOGGING_ENABLED = True _SOC_NAME = "S32G274A" 使用新名称保存文件以保留原始文件。例如,s32g2xx_attach_my_probe_core1.py。这样可以确保 S32 调试器仍能正常工作。 现有的 GTA 服务器已在使用,因此请勿启动新的服务器。 打开一个新的命令窗口并按照与主核心类似的步骤进行操作。 如果尚未全局设置,请设置 Python 环境变量set PYTHONPATH={S32DS Install Path}\S32DS\build_tools\msys32\mingw32\lib\python2.7;{S32DS Install Path}\S32DS\build_tools\msys32\mingw32\lib\python2.7\site-packages 启动 GDB Windows 操作系统: {S32DS Install Path}\S32DS\tools\gdb-arm\arm32-eabi\bin\arm-none-eabi-gdb-py.exe(适用于 arm32) 或 {S32DS Install Path}\S32DS\tools\gdb-arm\arm64-eabi\bin\aarch64-none-elf-gdb-py.exe(适用于 arm64) Linux 操作系统: arm-none-eabi-gdb-py 现在,命令窗口中应显示 (gdb) 提示符: 在(gdb)提示符下,输入以下命令(按此顺序): 源 {S32DS Install Path}\\S32DS\\tools\\S32Debugger\\Debugger\\scripts\\s32g2xx\\s32g2xx_attach_my_probe_core1.py 这将指定用于初始化的脚本。 我们不会执行py board_init() ,因为这已经为主核心完成。 py core_init() 这将初始化在步骤 2 中指定的初始化脚本中的内核。 现在可以使用标准 GDB 命令。例如,您可能希望加载一个 ELF 文件: 文件 {S32DS Workspace Path}\\S32G_MultiCore\\S32G_MultiCore_M7_1\\Debug_RAM\\S32G_MultiCore_M7_1.elf 加载 对其他核重复步骤 3-6 主核心映像已在内存中并正在运行 核心正在运行,不需要初始化。 准备要调试的核心的初始化脚本。 打开内核初始化 Python 脚本: {S32DS Install Path}\S32DS\tools\S32Debugger\Debugger\scripts\s32g2xx\s32g2xx_attach.py 此脚本与用于主内核的脚本不同。它旨在在已经初始化并运行的内核上启动调试会话。 编辑要调试的辅助核心的脚本。由于此脚本是为主核心设置的,因此需要对辅助核心的设置进行一些调整 取消注释以下行: #_JTAG_SPEED = 14000 #_GDB_SERVER_PORT = "127.0.0.1:45000" #_RESET_TYPE = "default" #_PROBE_IP = "s32dbg:10.222.24.64" #_CORE_NAME = 'M7' #_RESET_DELAY = 1 #_CMD_TIMEOUT = 7200 #_REMOTE_TIMEOUT = 60 #_IS_LOGGING_ENABLED = True #_SOC_NAME = "S32G274A" 对行进行以下更改: _JTAG_SPEED = 14000 _GDB_SERVER_PORT = "127.0.0.1:45000"-> 45000 _RESET_TYPE = "default" _PROBE_IP = "s32dbg:10.222.24.64"->(输入探针的 IP 地址) _CORE_NAME = 'M7'-> 'M7_0'(应将其设置为与要调试的内核的名称相匹配,完整列表请参见 s32g2xx_context.py) _RESET_DELAY = 1 _CMD_TIMEOUT = 7200 _REMOTE_TIMEOUT = 60 _IS_LOGGING_ENABLED = True _SOC_NAME = "S32G274A" 使用新名称保存文件以保留原始文件。例如,s32g2xx_attach_my_probe_core0.py。这确保了 S32 调试器仍然能够正常运行。 启动 GTA 服务器。在命令提示符或 Windows 文件资源管理器中运行命令: {S32DS Install Path}\S32DS\tools\S32Debugger\Debugger\Server\gta\gta.exe 应当看到一个窗口,如下所示: 确保已设置 Python 环境变量在命令提示符下运行命令:set PYTHONPATH={S32DS Install Path}\S32DS\build_tools\msys32\mingw32\lib\python2.7;{S32DS Install Path}\S32DS\build_tools\msys32\mingw32\lib\python2.7\site-packages 启动 GDB在命令窗口中运行命令:Windows 操作系统:{S32DS 安装路径}\S32DS\tools\gdb-arm\arm32-eabi\bin\arm-none-eabi-gdb-py.exe(适用于 arm32)或{S32DS 安装路径}\S32DS\tools\gdb-arm\arm64-eabi\bin\aarch64-none-elf-gdb-py.exe(适用于 arm64)Linux 操作系统:arm-none-eabi-gdb-py现在命令窗口中应显示 (gdb) 提示符: 在(gdb)提示符下,输入以下命令(按此顺序): 源 {S32DS Install Path}\\S32DS\\tools\\S32Debugger\\Debugger\\scripts\\s32g2xx\\s32g2xx_attach_my_probe_core0.py 这指定了用于调试器初始化的脚本。 不要执行py board_init() ,因为这将初始化电路板,并重置当前正在执行的应用程序,而这对于本例来说是不希望的。 py core_init()此命令将调试器连接初始化至步骤 1 初始化脚本中指定的内核。 现在可以使用标准 GDB 命令。例如,您可能希望加载一个 ELF 文件: 文件 {S32DS Workspace Path}\\S32G_Multicore\\S32G_Multicore_M7_0\ \Debug_RAM\\S32G_Multicore_M7_0.elf 加载 完成主核调试启动后,可以通过在辅助核上启动 GDB 调试来执行多核调试。有关每个需要调试的附加核心,请参阅“辅助核心”部分。 回复:如何使用 S32 调试探针对 S32G2xx 进行命令行 GDB 调试 大家好,团队, 我正在尝试为 S32G2 启用命令行半主机功能(使用 S32 调试探针),按照上述 主核加载镜像并运行 流程操作时, 执行 py board_init() 可正常输出,但 py core_init() 失败且导致 GTA 服务器崩溃。 请查收附件中的图片,这些图片是在执行 py board_init() 时生成的。 由于执行 core_init() 后 GTA 服务器窗口也会崩溃,无法调试或定位失败原因。请协助排查此问题。 命令行工具 gdb s32 debugger S32G274A
記事全体を表示
MT25Qフラッシュのi.MX8DXL FlexSPI構成パラメータ i.MX8DXL DDR3L EVKボード、NOR型フラッシュで使用するのはMT25QU512ABB8ESF-0SITです。 このドキュメントでは、MT25Qフラッシュから起動するためのFlexSPI設定パラメータの基準を、QUADパッドとDDRモードとで示します。 HW: i.MX8DXL DDR3L EVKボード SW:Linux 5.4.70 BSP RM 5.9.3.2以降、FlexSPIシリアルのフラッシュブート操作、FlexSPIブートフローは次のようになります。 FlexSPI設定パラメータは、2つのグループに分類できます。FlexSPI コントローラに関するパラメータと、NOR型フラッシュの操作関連パラメータです。 パラメータテーブルの完全チェックについては、i.MX8DXL RM「表5-20.FlexSPI設定ブロック」を参照してください。 MT25Qのデータシートを確認の上で、その機能を見てみましょう。ターゲットはDDRモード(80MHz)とQUADパッドであることに注意してください。   次に、FlexSPI設定パラメータを変更しましょう。 1>readSampleClkSrc を 2 に設定します。これは SCK パッドからループバックします。このフィールドはデフォルトで 0 に設定されており、この設定で起動するとこのユースケースではエラーが発生するため、2 に変更します。 2>deviceModeCfgEnableを1に設定し、deviceModeSeq.seqNumを1に設定し、deviceModeSeq.seqIdを4に設定し、deviceModeArgを0x5f に設定します。 i.MX8DXLからは、MT25QがDDRモードとQUADモードに入るよう、いくつかのコマンドをフラッシュに送信します。そのため、deviceModeCfgEnable = 1です。 seqNum=1、seqId=4の場合、LUTテーブルのインデックス4にこのシーケンスが格納され、LUTエントリが1つ必要であるということです。LUTエントリを変更する方法については後述します。 deviceModeArg=0x5fの場合は、MT25Qデータシートを確認します。その拡張揮発性レジスタを書き込むことで、フラッシュの動作モードを設定できます。 3>controllerMiscOptionを0x40にすると、このパラメータはFlexSPI コントローラ自体にのみ適用され、「外部デバイスはDDRコマンドを使用して動作する」という意味になります。 4>deviceType=1(シリアルNOR)、sflashPadType=4(QUADパッド)、serialClkFreq=4(80MHZ CLK)、これらのパラメータもFlexSPIコントローラ専用です。 5>sflashA1Sizeに実際のサイズをバイト単位で設定します。 6>LUTエントリの変更では、次に示す8DXL RM表5-21を確認します。 つまり、LUTエントリ0は読み取りコマンドのシーケンス、エントリ1は読み取りステータスシーケンス、エントリ3は書き込み有効シーケンス、エントリ15はダミーコマンドシーケンスです。 他のインデックスLUTエントリ(2、4、6、7、8、10、12、13、14など)も、フラッシュデバイスに必要なコマンドのシーケンスを格納するのに使用できます。当社ではMT25Q拡張揮発性レジスタへの書き込みシーケンスをLUTエントリに格納します。 8DXL RM「図15-6.LUTとシーケンスの構造」を確認します。 各LUTエントリ(シーケンス)では16バイトを使用し、1つのシーケンスは最大8つの命令で構成され、各命令では16ビットを使用します。 各命令は、オペコード—num_pads—オペランドの形式で表されます。 サポート対象の命令については、RM 15.2.4.8「プログラマブル・シーケンス・エンジン」を参照してください。 Mt25Q揮発性レジスタを書き込むので、実際にはまず書き込み有効シーケンスが他のシーケンスよりも前に実行されます。その前に、書き込み有効シーケンスが発行される必要があります。 MT25Qデータ・シートで次のことを確認します。 このシーケンスで必要なのは1つの命令、0x0406のみです。現時点ではまだSDRと1パッドモード、つまりオペコード(CMD_SDR)、1パッド(0)、オペランド(6)を使用しています。 LUTエントリ1、読み取りシーケンス、MT25QのREAD STATUS REGISTER(05h)です。データ・シートで次のことを確認します。 次の2つの命令を使用します。 0x0405:オペコード(CMD_SDR)、パッド(1パッド)、オペランド(0x5、READ STATUS REGISTER) 0x2404:オペコード(READ_SDR)、パッド(1パッド)、オペランド(0x4、バイト番号) LUTエントリ4は、MT25QをDDRモードにし、クワッドパッドにするためのものです。 MT25Qデータ・シートより: 次の2つの命令を使用します。 0x0461:オペコード(CMD_SDR)、1パッド(0)、オペランド(0x61 WRITE ENHANCED VOLATILE CONFIGURATION REGISTER) 0x2001:オペコード(WRITE_SDR 08)、1パッド(0)、オペランド(1バイトデータサイズ) 0x5fはデータとして送信されます。 次に、LUTエントリの読み取りを確認します。この時点で、MT25QはQUADパッドとDDRモードに入っています。 LUTエントリ0、読み取りシーケンス、MT25Qからの高速読み取りデータです。データシートより: 次の4つの命令を使用します。 86ED、オペコード(CMD_DDR)、パッド(4パッド)、オペランド(0xEDh、高速読み取り) 8a18、オペコード(RADDR_DDR)、パッド(4パッド)、オペランド(0x18、3バイトアドレス) B210、オペコード(DUMMY_ADDR)、パッド(4パッド)、オペランド(0x10、ダミーサイクル) A604、オペコード(READ_DDR)、パッド(4パッド)、オペランド(0x4、データバイト) 参考情報: 1.i.MX8DXL リファレンス・マニュアル 2. MT25Qデータ・シート   i.MX 8ファミリ | i.MX 8QuadMax (8QM) | 8QuadPlus Re: MT25Qフラッシュのi.MX8DXL FlexSPI設定パラメータ @fushi_peng様、FLEXSPI LUTエントリの構築に関して、このような説明を探し求めておりました。非常に役立つブログ、どうもありがとうございました。
記事全体を表示
恩智浦 PMIC 解决方案适用于多厂商处理器 这是恩智浦为非恩智浦处理器提供的 PMIC 解决方案。 链接:https://www.nxp.com/products/power-management/pmics-and-sbcs/pmics-and-sbcs-for-multi-vendor-processors:PMICS-SBCS-MULTI-VENDOR-PROCESSORS No AN 主题 PMIC 处理器 应用 链接 1 AN12883 多路低压PMIC系统 低压 PMIC NA NA https://www.nxp.com/webapp/Download?colCode=AN12883&appType=moderatedWithoutFAE 2 AN12807 采用FS84/FS85和PF502x系列的完整系统电源解决方案 FS85,PF502x NA NA https://www.nxp.com/webapp/Download?colCode=AN12807&appType=moderatedWithoutFAE 3 AN4991 使用 Freescale PMIC 对 Xilinx AP SoC 进行电源管理 PF0100 Xilinx Zynq-7000  工业、消费电子 https://www.nxp.com/docs/en/application-note/AN4991.pdf 4 AN13002 NXP 面向 Mobileye EyeQ4 中端处理器的 PMIC 解决方案 PF5024+PF5020 Mobileye EyeQ4 ADAS https://www.nxp.com.cn/docs/en/application-note/AN13002.pdf 5 AN13020 恩智浦 PMIC 解决方案,适用于 RH850 系列 MCU FS65,FS23,FS26,FS85 Renesas RH850 电气化、集群、车身、 通用型 https://www.nxp.com.cn/docs/en/application-note/AN13020.pdf 6 AN13018 恩智浦面向 R-Car M3 处理器的 PMIC 解决方案 PF81*2 Renesas RcarM3 IVI https://www.nxp.com.cn/docs/en/application-note/AN13018.pdf 7 AN13019 适用于瑞萨 R-Car E3 处理器的 NXP PMIC 解决方案 PF71 Renesas RcarE3 仪表板 https://www.nxp.com.cn/docs/en/application-note/AN13019.pdf 8 AN13003 恩智浦适用于 Renesas R-Car H3 处理器的 PMIC 解决方案 PF82+PF5020+PF5024+PF52 Renesas RcarH3 IVI,ADAS https://www.nxp.com.cn/docs/en/application-note/AN13003.pdf 9 AN13058 恩智浦适用于 Renesas R-Car V3M 处理器的 PMIC 解决方案 PF5024+PF5020 Renesas RcarV3M ADAS https://www.nxp.com.cn/docs/en/application-note/AN13058.pdf 10 AN13197 恩智浦适用于 Toshiba TMPV7608 处理器的 PMIC 解决方案 PF71 Toshiba TMPV7608 ADAS https://www.nxp.com.cn/docs/en/application-note/AN13197.pdf 11 AN13239 适用于 ESPRESSIF ESP32 的 NXP PMIC 解决方案 PF1550 ESPRESSIF ESP32 NON-AUTO https://www.nxp.com.cn/docs/en/application-note/AN13239.pdf 12 AN13245 恩智浦 PMIC 解决方案适用于 TI C2000 FS45,FS85 TI C2000 电气化 https://www.nxp.com.cn/docs/en/application-note/AN13245.pdf 13 AN13246 恩智浦 PMIC 解决方案 ST-Chorus ST58 FS65,FS85 ST Chorus ST58 电气化 https://www.nxp.com.cn/docs/en/application-note/AN13246.pdf 14 AN13247 适用于 MTK 处理器 2712 的 NXP PMIC 解决方案 FS56+PF81+PF5024 MTK 2712 IVI https://www.nxp.com/docs/en/application-note/AN13247.pdf 15 AN13272 恩智浦适用于 Ambarella CV22/CV25 SoC 的 PMIC 解决方案 FS56+PF81 FS85+PF82 Ambaralla CV22/CV25  ADAS https://www.nxp.com.cn/docs/en/application-note/AN13272.pdf  16 AN13320 恩智浦适用于 XILINX UltraScale+ MPSoC ZU2/ZU3 处理器的 PMIC 解决方案 FS56+PF81 FS85+PF71+PF5020+PF5024 Xilinx Zynq UltraScale+ MPSoC ZU2/ZU3 ADAS https://www.nxp.com.cn/docs/en/application-note/AN13320.pdf 17 AN13318 恩智浦适用于 Ambarella Horizon J2 的 PMIC 解决方案 FS56+PF81 FS85+PF82 Horizon J2 ADAS https://www.nxp.com.cn/docs/en/application-note/AN13318.pdf 18 AN13222 NXP SBC 解决方案,适用于英飞凌 AURIX TC2xx/TC3xx 系列 MCU FS26 FS45/FS65 FS85 Infineon AURIX TC2xx/TC3xx 电气化、ADAS https://www.nxp.com.cn/docs/en/application-note/AN13322.pdf 19 AN13431 恩智浦适用于 TI TMS570 MCU 的 PMIC 解决方案 FS26,FS45,FS65,FS85 TI TMS570 MCU 电气化、动力系统 https://www.nxp.com.cn/docs/en/application-note/AN13431.pdf 20 AN13432 恩智浦适用于 XILINX UltraScale+ MPSoC ZU4\ZU5\ZU6\ZU7\ZU9 处理器的 PMIC 解决方案 FS56,FS86,PF81,PF71,PF5020,PF52 XILINX UltraScale+ MPSoC ZU4\ZU5\ZU6\ZU7\ZU9  ADAS https://www.nxp.com.cn/docs/en/application-note/AN13432.pdf 21 AN13433 恩智浦适用于 XILINX UltraScale+ MPSoC ZU11_ZU15 处理器的 PMIC 解决方案 PF7100,PF5023,PF5200,FS86 XILINX UltraScale+ MPSoC ZU11_ZU15 ADAS https://www.nxp.com.cn/docs/en/application-note/AN13433.pdf 22 AN13554 恩智浦适用于 SAMA5Dx 系列处理器的 PMIC 解决方案 PF1550,PF1510 Microchip SAMA5DX NON-AUTO https://www.nxp.com.cn/docs/en/application-note/AN13554.pdf 23 AN13615 适用于AG55xQ系列模块的NXP PMIC解决方案 FS56 AG55xQ V2X https://www.nxp.com.cn/docs/en/application-note/AN13615.pdf 24 AN13638 适用于 TI TDA2x_TDA2Ex 处理器的 NXP PMIC 解决方案 FS56+PF81 TI TDA2 ADAS https://www.nxp.com/docs/en/application-note/AN13638.pdf 25 AN13651 TI AWR2243 雷达收发器的 PMIC 解决方案 FS56+PF71/PF5020 TI AWR2243 雷达 https://www.nxp.com.cn/docs/en/application-note/AN13651.pdf 26 AN13318 Horizon Journey 3 的电源管理解决方案 FS56/FS85 + PF81 + PF5024/PF52 Horizon Journey 2 ADAS https://www.nxp.com.cn/docs/en/application-note/AN13318.pdf 27 AN13863 恩智浦适用于 Black Sesame A1000L/A1000 处理器的 PMIC 解决方案 FS86 / FS56 + PF81 Black Sesame A1000 ADAS https://www.nxp.com/docs/en/application-note/AN13863.pdf 28 AN13748 恩智浦电源解决方案适用于 Cypress Traveo II 系列 MCU 的应用说明 FS23,FS26 Cypress Traveo™ II 车身 https://www.nxp.com/webapp/Download?colCode=AN13748&appType=moderatedWithoutFAE 电源解决方案
記事全体を表示
看门狗定时器使用 imx6ull Hello, 我们计划在现有系统中使用看门狗定时器来应对任何类型的操作系统故障或硬件故障, 我们正在使用IMX6ULL板,那么您能否建议我们使用哪种看门狗来获得最佳输出和可行性? i.MX6UL 回复:看门狗定时器使用imx6ull Hello @amiraj_patel  我希望你一切都好。 您可以参考imx6ul设备树,唯一使用的wdog是wdog1,您可以使用wdog2和wdog3,只是必须在设备树上声明它。 我希望这对你有帮助。 顺祝商祺! Salas.
記事全体を表示
HOWTO: S32G2xx用S32デバッグプローブを使用したコマンドラインGDBデバッグ S32 Design Studio for S32 Platform IDEに含まれるS32デバッガにより、GDBコマンドラインを通じてS32デバッグプローブのフラッシュプログラミング機能およびデバッグ機能にアクセスできます。このドキュメントは、NXPデバイスでデバッグセッションを開始するために必要なコマンドのみを提供します。ここでは一般的なGDBコマンドライン操作については取り上げません。これらについては、NXPとは関連のないGNUコミュニティやその他の公開Webサイトで詳しく説明されています。 準備 ソフトウェア ツールをセットアップする S32プラットフォーム用 S32 Design Studioをインストールする デバッグするデバイスで使用できる開発パッケージをインストールします。この場合は、S32G2xx Development Packageです。S32デバッガのサポートには、コアの初期化に必要なデバイス固有のPythonスクリプトが含まれているため、このパッケージは重要です。 ハードウェアをセットアップします。 S32G274A評価ボードのセットアップを確認してください。 JTAGを設定します。S32G274A評価ボードは、10ピンおよび20ピンの両方のJTAG接続をサポートします。デフォルトのボード構成は20ピンに設定されています。10ピンJTAGインターフェースを使用している場合は、ジャンパJ59の位置を2-3(デフォルト)から1-2に変更してください。どちらもS32デバッガとS32デバッグ・プローブによりサポートされています。 電源ケーブルを接続してください S32デバッグ・プローブをセットアップします。 S32デバッグ・プローブをJTAGケーブル経由で評価ボードに接続します。インストール手順については、S32デバッグ・プローブのユーザ・ガイドを参照してください。前の手順で確認したJTAG接続を使用します。 S32デバッグ・プローブをUSBまたはイーサネット(LAN経由または直接接続、固定IPアドレス構成)でホストPCに接続し、電源をUSBポートに接続します。 S32 Design Studio for S32 Platform を起動する 新しいプロジェクトを作成するか、既存のプロジェクトを開いて、正常にビルドされることを確認します。新しいプロジェクトを作成する場合は、新しいプロジェクトのウィザードでS32デバッガが選択されていることを確認してください。 手順 デバッグするコアごとに個別のデバッグ スレッドを開始する必要があるため、デバッグ スレッドの起動方法は、プライマリ コアかセカンダリ コアか、実行可能イメージが読み込まれるか、実行可能ファイルがすでに実行されており、デバッガーをアタッチするだけでよいかによって異なります。これらのシナリオについては、次の 3 つのセクションで説明します。 プライマリコアのロードイメージと実行:アプリケーションイメージは、デバッガーによってメモリに直接ロードされ、初期化されて起動されます。プライマリコアは、アプリケーションで使用されるすべてのセカンダリコアを起動します。 セカンダリ コア: プライマリ コアがセカンダリ コアを起動し、現在実行されており、デバッガーはアタッチ メソッドを介して接続します。 プライマリ コア イメージが既にメモリ内にあり、実行中: プライマリ コアは既に初期化され、ターゲット上の Linux OS などの他の手段で起動されているため、デバッガーはイメージを初期化したりメモリに読み込んだりせずにアタッチ方法を使用して接続します。 デバッグスレッドを開始するコアに該当するセクションに進んでください。 プライマリコア、イメージをロードして実行 デバッグするコアの初期化スクリプトを準備します。 コア初期化Pythonスクリプト {S32DS Install Path}\S32DS\tools\S32Debugger\Debugger\scripts\s32g2xx\s32g2xx_generic_bareboard_all_cores.pyを開きます。 以下の行のコメントを解除します。 #_JTAG_SPEED = 16000 #_PROBE_IP = "10.112.101.91" #_GDB_SERVER_PORT = 45000 #_CORE_NAME = 'M7_0' #_RESET_TYPE = "default" #_RESET_DELAY = 1 #_REMOTE_TIMEOUT = 60 #_IS_LOGGING_ENABLED = True このファイルは、S32 Design Studio IDE内のS32 デバッガで使用されます。設定はGUIから提供されるため、GUI設定が制御できるように、これらの行はコメントアウトされています。スクリプトをコマンド・ライン・メソッドでより簡単に実行できるよう、コメント行が提供されています。 PCに接続されているS32 Debug ProbeのIP アドレスと一致するように、IPアドレス行 (_PROBE_IP)を更新します。IPアドレスを取得する方法の詳細については、S32 Debug Probeのユーザーガイドをご覧ください。 必要に応じて、コア名 (_CORE_NAME) を更新してください。サポートされているコアの完全なリストについては、s32g2xx_context.pyをご覧ください。 元のファイルを保持するために、新しい名前でファイルを保存します。たとえば、s32g2xx_gen_bb_all_c_my_probe.pyなどです。これにより、S32デバッガが引き続き正常に機能します。 GTAサーバを起動し、コマンド・プロンプトまたはWindowsファイルエクスプローラーで {S32DS Install Path}\S32DS\tools\S32Debugger\Debugger\Server\gta\gta.exe コマンドを実行します。 このようなウィンドウが表示されます。   Python の環境変数が設定されていることを確認してください。 コマンドプロンプトから、次のコマンドを実行してください。 set PYTHONPATH={S32DS Install Path}\S32DS\build_tools\msys32\mingw32\lib\python2.7;{S32DS Install Path}\S32DS\build_tools\msys32\mingw32\lib\python2.7\site-packages GDBを開始し、コマンド・ウィンドウで次のコマンドを実行します。 Windows OS: {S32DS Install Path}\S32DS\tools\gdb-arm\arm32-eabi\bin\arm-none-eabi-gdb-py.exe(arm32の場合) または {S32DS Install Path}\S32DS\tools\gdb-arm\arm64-eabi\bin\aarch64-none-elf-gdb-py.exe(arm64の場合) Linux OS: arm-none-eabi-gdb-py gdbプロンプトが次のようにコマンド・ウィンドウに表示されます。 (gdb) プロンプトから、次のコマンドを (この順序で) 入力します。 source {S32DS Install Path}\\S32DS\\tools\\S32Debugger\\Debugger\\scripts\\s32g2xx\\s32g2xx_gen_bb_all_c_my_probe.py これは初期化のスクリプトを指定します。 py board_init () これはボードを初期化します。最初のコアに対してのみ呼び出すべきです。マルチコアのデバッグワークフローでは、追加のコアのデバッガーを起動してもこのステップは省略されます。 py core_init()このコマンドは、手順1の初期化スクリプトで指定されたコアを初期化します。 これで、標準のGDBコマンドを使用できます。たとえば、ELFファイルをロードしたい場合があります。 file {S32DS Workspace Path}\\New_S32G_Project\\New_S32G_Project_M7_0\\Debug_RAM\\New_S32G_Project_M7_0.elf load セカンダリコア プライマリ コアのデバッグの起動が完了したら、セカンダリ コアで GDB デバッグを起動してマルチコア デバッグを実行できます。 プライマリコアGDBセッション内からいくつかの追加手順を実行する必要があるため、以下のコマンドを入力します。 set *0x34100000 = 0x34200000  set *0x34100004 = 0x34100025 set *0x34100024 = 0xFFFEF7FF set *0x34200000 = 0x34300000 set *0x34200004 = 0x34200025 set *0x34200024 = 0xFFFEF7FF b main c これらの行は、セカンダリコアでデバッグを開始するための環境を準備します。これにより、コアごとに個別のELFファイルがある場合でも、マルチコア・デバッグが可能になります。これらは、S32 Design Studio IDEの新規アプリケーションプロジェクトウィザードから作成されたマルチコアプロジェクトのプライマリコアのデバッグ構成の「スタートアップ」タブにある「実行コマンド」フィールドにあります。注意:すべてのコアにELFファイルが1つしかない場合、これらの「set *0x... = 0x...」コマンドはスキップする必要があります。 一般的には、示されているように、mainにブレークポイントを設定するのが正しいですが、プロジェクト内でセカンダリコアがいつ起動されるかに応じて変更する必要があるかもしれません。 デバッグするセカンダリーコアの初期化スクリプトを準備してください。 コア初期化のPythonスクリプトを開きます。 {S32DS Install Path}\S32DS\tools\S32Debugger\Debugger\scripts\s32g2xx\s32g2xx_attach.py これは、プライマリコアに使用されるスクリプトとは異なるスクリプトであり、すでに初期化されて実行中のコア上でデバッグセッションを開始するように設計されています。 デバッグするセカンダリ コアのスクリプトを編集します。このスクリプトはプライマリ コア用に設定されているため、セカンダリ コアのセットアップにはいくつかの調整が必要です 以下の行のコメントを解除します。 #_JTAG_SPEED = 14000 #_GDB_SERVER_PORT = "127.0.0.1:45000" #_RESET_TYPE = "default" #_PROBE_IP = "s32dbg:10.222.24.64" #_CORE_NAME = 'M7' #_RESET_DELAY = 1 #_CMD_TIMEOUT = 7200 #_REMOTE_TIMEOUT = 60 #_IS_LOGGING_ENABLED = True #_SOC_NAME = "S32G274A" 以下の行を変更してください: _JTAG_SPEED = 14000 -> None _GDB_SERVER_PORT = "127.0.0.1:45000" -> 45000 _RESET_TYPE = "default" _PROBE_IP = "s32dbg:10.222.24.64" -> None _CORE_NAME = 'M7' -> 'M7_1'(デバッグ対象のコアの名前と一致するように設定する必要があります。詳細なリストは s32g2xx_context.py を参照してください) _RESET_DELAY = 1 _CMD_TIMEOUT = 7200 _REMOTE_TIMEOUT = 60 _IS_LOGGING_ENABLED = True _SOC_NAME = "S32G274A" ファイルを新しい名前で保存して、元のファイルを保持します。たとえば、s32g2xx_attach_my_probe_core1.pyなどです。これにより、S32デバッガは引き続き正常に動作します。 既存のGTAサーバーを使用しますので、新しいサーバーを起動しないでください。 新しいコマンドウィンドウを開いて、プライマリコアと同じ手順に従ってください。 グローバルに設定されていない場合は、Python環境変数を設定します。set PYTHONPATH={S32DS Install Path}\S32DS\build_tools\msys32\mingw32\lib\python2.7;{S32DS Install Path}\S32DS\build_tools\msys32\mingw32\lib\python2.7\site-packages GDBを起動する Windows OS: {S32DS Install Path}\S32DS\tools\gdb-arm\arm32-eabi\bin\arm-none-eabi-gdb-py.exe(arm32の場合) または {S32DS Install Path}\S32DS\tools\gdb-arm\arm64-eabi\bin\aarch64-none-elf-gdb-py.exe(arm64の場合) Linux OS: arm-none-eabi-gdb-py gdbプロンプトがコマンド・ウィンドウに表示されます。 (gdb) プロンプトから、次のコマンドを (この順序で) 入力します。 source {S32DS Install Path}\\S32DS\\tools\\S32Debugger\\Debugger\\scripts\\s32g2xx\\s32g2xx_attach_my_probe_core1.py これは初期化のスクリプトを指定します。 py board_init () はプライマリコアですでに実行されているので、実行しません。 py core_init()これにより、ステップ2の初期化スクリプトで指定されたコアが初期化されます。 これで、標準のGDBコマンドを使用できます。たとえば、ELFファイルをロードしたい場合があります。 file {S32DS Workspace Path}\\S32G_MultiCore\\S32G_MultiCore_M7_1\\Debug_RAM\\S32G_MultiCore_M7_1.elf load コアを追加するごとに3~6を繰り返します。 プライマリコアイメージはすでにメモリにあり、実行中です コアは動作しているので、初期化する必要はありません。 デバッグするコアの初期化スクリプトを準備してください。 コア初期化のPythonスクリプトを開きます。 {S32DS Install Path}\S32DS\tools\S32Debugger\Debugger\scripts\s32g2xx\s32g2xx_attach.py これは、プライマリコアに使用されるスクリプトとは異なるスクリプトであり、すでに初期化されて実行中のコア上でデバッグセッションを開始するように設計されています。 デバッグするセカンダリ コアのスクリプトを編集します。このスクリプトはプライマリ コア用に設定されているため、セカンダリ コアのセットアップにはいくつかの調整が必要です 以下の行のコメントを解除します: #_JTAG_SPEED = 14000 #_GDB_SERVER_PORT = "127.0.0.1:45000" #_RESET_TYPE = "default" #_PROBE_IP = "s32dbg:10.222.24.64" #_CORE_NAME = 'M7' #_RESET_DELAY = 1 #_CMD_TIMEOUT = 7200 #_REMOTE_TIMEOUT = 60 #_IS_LOGGING_ENABLED = True #_SOC_NAME = "S32G274A" 以下の行を変更してください: _JTAG_SPEED = 14000 _GDB_SERVER_PORT = "127.0.0.1:45000" -> 45000 _RESET_TYPE = "default" _PROBE_IP = "s32dbg:10.222.24.64" -> (プローブの IP アドレスを入力してください) _CORE_NAME = 'M7' -> 'M7_0'(デバッグ対象のコアの名前と一致するように設定してください。詳細なリストは s32g2xx_context.py を参照してください) _RESET_DELAY = 1 _CMD_TIMEOUT = 7200 _REMOTE_TIMEOUT = 60 _IS_LOGGING_ENABLED = True _SOC_NAME = "S32G274A" 元のファイルを保持するために、新しい名前でファイルを保存します。たとえば、s32g2xx_attach_my_probe_core0.pyなどです。これにより、S32デバッガが引き続き正常に機能します。 GTAサーバを起動し、コマンドプロンプトまたはWindowsファイルエクスプローラーから {S32DS Install Path}\S32DS\tools\S32Debugger\Debugger\Server\gta\gta.exe コマンドを実行します。 次のようなウィンドウが表示されます。 Pythonの環境変数が設定されていることを確認してください。コマンドプロンプトから次のコマンドを実行します。 set PYTHONPATH={S32DS Install Path}\S32DS\build_tools\msys32\mingw32\lib\python2.7;{S32DS Install Path}\S32DS\build_tools\msys32\mingw32\lib\python2.7\site-packages GDBを起動します。コマンドウインドウで、以下のコマンドを実行します。 Windows OS: {S32DS Install Path}\S32DS\tools\gdb-arm\arm32-eabi\bin\arm-none-eabi-gdb-py.exe(arm32の場合) または {S32DS Install Path}\S32DS\tools\gdb-arm\arm64-eabi\bin\aarch64-none-elf-gdb-py.exe(arm64の場合) Linux OS: arm-none-eabi-gdb-py gdbプロンプトがコマンド・ウィンドウに表示されます。 (gdb) プロンプトから、次のコマンドを (この順序で) 入力します。 source {S32DS Install Path}\\S32DS\\tools\\S32Debugger\\Debugger\\scripts\\s32g2xx\\s32g2xx_attach_my_probe_core0.py これはデバッガ初期化用のスクリプトを指定します。 py board_init () を実行しないでください。ボードが初期化され、現在実行中のアプリケーションがリセットされます。この場合は望ましくありません。 py core_init()これにより、ステップ1の初期化スクリプトで指定されたコアへのデバッガ接続が初期化されます。 これで、標準のGDBコマンドを使用できます。たとえば、ELFファイルをロードしたい場合があります。 file {S32DS Workspace Path}\\S32G_Multicore\\S32G_Multicore_M7_0\ \Debug_RAM\\S32G_Multicore_M7_0.elf load プライマリコアのデバッグの起動が完了したら、セカンダリオコアでGDBデバッグを起動することでマルチコアデバッグを実行できます。デバッグする追加の各コアについては、「セカンダリコア」のセクションを参照してください。 Re: HOWTO: S32G2xx 用 S32 デバッグプローブを使用したコマンドライン GDB デバッグ チームの皆様、 S32デバッグプローブを使用してS32g2のコマンドラインセミホスティングを有効にしようとしています。上記のプライマリコアロードイメージと実行の手順に従って、 py board_init() は以下の出力を表示しますが、py core_init() は失敗し、gtaサーバーがクラッシュします。 py board_init() が実行された際の出力は、添付の画像をご確認ください。 gtaサーバーウィンドウもcore_init()実行後にクラッシュするため、デバッグや失敗の理由を把握できません。この問題を特定するためのサポートが欲しいです。  コマンドラインツール gdb s32 debugger s32g274a
記事全体を表示
ウォッチドッグタイマの使い方 imx6ull Hello, 既存のシステムにウォッチドッグタイマーをあらゆるタイプのOS障害またはハードウェア障害に使用することを計画しています。 また、 IMX6ULL ボードを使用していますので、最適な出力と実現可能性の観点からどのウォッチドッグを使用できるかを提案していただけますか? i.MX6UL Re:ウォッチドッグタイマの使用imx6ull Hello @amiraj_patel  お元気にお過ごしでしょうか。 imx6ul デバイスツリーを参照すると、wdog は wdog1 のみを使用し、wdog2 と wdog3 はデバイスツリーで宣言する必要があります。 これがお役に立てば幸いです。 よろしくお願いいたします。 Salas.
記事全体を表示
The ENET1 module does not function unless the Peripheral control register (MC_ME_PCTL6) is enabled Project file: lwip_mpc5748g Development board model: 2018 NXP BV MPC5748G-GW Follow the steps in MPC5748G-GW-RDB_ExampleCodes-UserGuide to develop ENET1 However, even PING is not working at present. I have tried to add ARP table on PC according to some relevant answers in the forum, but PING is still not working. At this time, I found that there were marking errors when reading the document, but after checking the register description, I did not quite understand what kind of setting is meant by enable here. MPC5748G-GW-RDB  Re: The ENET1 module does not function unless the Peripheral control register (MC_ME_PCTL6) is enab Hi, it is done in MC_ME which allows peripheral clock gating control based on the ME_RUN_PC0…7, ME_LP_PC0…7, and ME_PCTLn registers. So the errata say you need to enable clock for MLB0 module too, so contig one of ME_RUN_PC0…7 and ME_PCTL6 and do Mode Transition. Refer to chapter Mode Entry Module (MC_ME) of the device RM for more info. If using SDK in your project it should be enough to enable MLB0 clock within clock component and regenerate PE code. CLOCK_SYS_Init and CLOCK_SYS_UpdateConfiguration called in code should set MC_ME registers accordingly. In debugger you can check MC_ME_PS0 to know MLB0 clock is active. BR, Petr
記事全体を表示
GPIO中断 IMX8MM SDK Cortex M4 在IMX8MM SDK中,很遗憾我们找不到任何关于将GPIO用作带中断输入的示例。 使用 GPIO 作为带中断的输入时,需要了解 ARM Cortex M4 中 GPIO 中断的工作机制。 在 IMX8MMRM(IMX8MM 参考手册)的表 7-2(CM4 中断摘要)中可以看到,GPIO 中断分为两部分: 组合中断指示(GPIOn 信号 0 至 15)  组合中断指示(GPIOn 信号 16 至 31)   这意味着 GPIOn 的引脚 0 至 15 由 "组合中断指示(GPIOn 信号 0 至 15)" 处理,而引脚 16 至 31 由 "组合中断指示(GPIOn 信号 16 至 31)" 处理。 在 SDK 中,这些定义可以在以下路径找到: /devices/MIMX8MM6/MIMX8MM6_cm4.h(注意这是 IMX8MM SDK 的定义) 在此示例中,我将使用 GPIO5_IO12 (ECSPI2_MISO) 作为带中断的输入,并将 GPIO5_IO11 (ECSPI_MOSI) 作为 IMX8MM-EVK 的输出。我将输出连接到输入,并观察中断在上升沿和下降沿的行为。 在此示例中,我将 ECSPI2_MOSI (GPIO5_IO11) 连接到 ECSPI_MISO (GPIO5_IO12): 请查看以下定义: #define IN_GPIO  GPIO5  定义输入引脚的 GPIO 基地址 #define IN_GPIO_PIN 12u  定义输入引脚编号 #define IN_IRQ  GPIO5_Combined_0_15_IRQn 定义中断号(本例中为 72) #define GPIO_IRQ_HANDLER  GPIO5_Combined_0_15_IRQHandler 这是指向中断处理函数的指针  #define IN_NAME  "IN GPIO5_IO12"  仅为引脚提供名称或描述  请参阅以下定义: #define OUT_GPIO GPIO5  定义输出引脚的 GPIO 基地址  #define OUT_GPIO_PIN 11u  定义输出引脚编号 #define OUT_NAME “OUT GPIO5_IO11” 仅为引脚提供名称或描述    以下是中断处理程序(前文已定义)的实现部分:😞 GPIO GPIO_ClearPinsInterruptFlags(IN_GPIO, 1u << IN_GPIO_PIN) 对应操作 GPIOx_ISR 寄存器:   本示例的中断处理程序会在每次中断时打印 "IRQ detected ............"。 需要创建两种 GPIO 配置:输出引脚配置和带下降沿中断的输入引脚: 然后配置 GPIO 和中断: EnableIRQ 用于启用 72 号中断。   GPIO_PortEnableInterrupts 对应 配置 GPIOx_IMR 寄存器: 示例代码会将输出引脚 GPIO5_IO11 反复切换高低电平。首先配置为下降沿触发中断,随后改为上升沿触发。 (完整源码文件将附后) 可直接使用 ARMGCC 工具链编译,但推荐通过 VSCode 集成 MCUXpresso 环境开发。 生成 .bin 文件(本示例为 igpio_led_output.bin)后,可通过 UUU 工具烧录至开发板: 在您的 Linux 机器上: sudo uuu -b fat_write igpio_led_output.bin mmc 2:1 gpio.bin 在U-Boot板上: u-boot=> fastboot 0 在 U-boot 中加载至 CORTEX M4 核心的指令: u-boot=> fatload mmc 2:1 ${loadaddr} gpio.bin 7076 bytes read in 14 ms (493.2 KiB/s) u-boot=> cp.b 0x80000000 0x7e0000 0x10000 u-boot=> bootaux 0x7e0000 ## No elf image ar address 0x007e0000 ## Starting auxiliary core stack = 0x20020000, pc = 0x1FFE02CD... u-boot=> 注:为提高操作便捷性,可使用自定义启动脚本加载二进制文件。 成功加载至 M4 核心后,串口终端将显示如下日志(需保持 GPIO5_IO11 和 GPIO5_IO12 物理连接): 当运行时断开 GPIO5_IO11 和 GPIO5_IO12 的连接时,日志显示 : 🔴断开连接(红色) 🔵重新连接(蓝色) 我希望这能帮到您。     此致!    Salas.  i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Linux Windows
記事全体を表示
[802.11] Wi-Fi 连接/断开连接过程 在802.11标准中,连接过程包括三个主要步骤,必须执行这些步骤才能使设备成为Wi-Fi网络的一部分并在网络中进行通信。这三个步骤是设备发现(扫描)、设备认证(连接前检查兼容性等)以及最终建立连接(关联)。展望未来,这篇文章将提供每个步骤的详细信息。连接过程中的消息交换如下图所示。   图 1 。开放系统中的连接过程   图 2.连接过程中的消息交换 图2显示了连接时客户端和AP设备之间的消息交换过程的Wi-Fi嗅探器日志,这里客户端设备是小米,AP是Marvell设备。 连接建立过程 1.扫描 要加入任何网络,首先客户端或站点需要找到该网络。在有线网络中,只要插入电缆或插孔就可以找到网络。在无线世界中,这需要在加入过程开始之前识别兼容网络。网络的这个识别过程称为扫描。 扫描过程中需要几个参数。这些参数是BSSType、BSSID、信道列表、扫描类型、MinChannelTime和MaxChannelTime。这些参数根据制造商的 Wi-Fi 驱动程序设置为默认值,但用户可以修改,即,如果要求隐藏网络,那么我们可以将扫描类型参数设置为被动扫描,因为主动扫描对隐藏网络(不广播其 SSID 的网络)没有用。 扫描方法有两种:被动扫描和主动扫描。 默认情况下,无线电对运营所在国家/地区允许的所有频道执行两种类型的扫描。虽然两种类型的扫描默认可用,但主动扫描仅由区域政府法规允许传输的频道执行。未经授权使用的频道将被排除在主动扫描之外。 被动扫描:在被动扫描中,WLAN 站根据信道列表移动到每个信道并等待信标帧。接入点(以及 IBSS 中的站点)使用信标帧进行通信或宣布自己。 接入点尝试以定义的间隔发送信标,该间隔称为目标信标传输时间 (TBTT) 然而,接入点就像小区中的任何无线设备一样。如果网络繁忙,他们就无法发送。当 AP 需要发送信标时,如果网络繁忙,AP 将延迟其信标传输,直到其能够访问媒体。 在 802.11 中,可以使用 CSMA/CA 协议检查网络是否繁忙。在 CSMA/CA 中,当帧准备就绪时,传输设备会检查信道是空闲还是繁忙,以避免冲突。如果信道繁忙,传输设备将等待随机时间并再次检查信道是否空闲。如果信道空闲,它将发送帧。Beacon帧结构如下图所示。 图 3.信标帧   信标帧的必填字段的描述。 时间戳:所有站点在收到信标帧后,都使用该时间戳更新其本地时钟。这有助于同步。 信标间隔:表示目标信标传输时间(TBTT)之间的时间单位(TU)数。默认值为 100TU(102.4 毫秒)。 能力信息:包含有关设备/网络能力的信息 SSID :它包含网络的服务集ID。 支持的速率:此字段包含接入点支持的数据速率的信息。 请注意,此信息不仅由潜在客户在被动扫描期间使用,而且由已经与 BSS 关联的客户端使用。 被动扫描通常需要更多时间,因为客户端必须监听并等待信标,而不是主动探测以找到 AP。被动扫描的另一个限制是,如果客户端在信道上等待的时间不够长,则客户端可能会错过 AP 信标。 主动扫描:通过扫描所有可能的信道并监听信标来发现网络被认为效率不高。为了增强这一发现过程,电台经常使用所谓的主动扫描。 在主动扫描模式下,站点仍然依次通过每个信道,但不是被动地监听来自 AP 的信号,而是发送探测请求管理帧,旨在询问该信道上有哪些网络可用。如果 IBSS 中的任何 AP 或活动站正在呈现该频率,则它们应该使用探测响应帧进行应答。   图 4.扫描方法   一旦发射站发出探测请求,它就会启动探测计时器倒计时并等待答复。该探测计时器值通常比信标间隔短很多。常见值在 10 毫秒范围内。在计时器结束时,站点将处理其收到的答案。如果没有收到答复,站点将移动到下一个频道(不同的频率)并重复相同的发现过程。 探测请求的目的通常是发现 AP 及其支持的网络(SSID 和/或 BSSID)。 图 5.探测请求/响应帧 该帧主要包含两个字段,SSID和移动站支持的速率。接收探测请求的站点使用该信息来确定请求站点是否可以加入网络。 探测响应帧字段与信标帧字段非常相似,使移动站能够匹配参数并加入网络。   2. 身份验证 通过探测请求/探测响应交换或监听信标进行网络发现后,想要加入网络的站点将经历身份验证过程,与接入点交换身份验证帧。在接收到认证帧后,AP 发送确认,然后发送认证响应。 “身份验证”帧的初始目的是验证设备类型,换句话说,验证请求站是否具有适当的 802.11 功能来加入网络。 开放系统认证:使用认证请求在站和 AP 之间交换与功能相关的信息。如果请求被接受,AP 将在身份验证响应中发送“成功”。 共享密钥认证:IEEE 802.11-1997 标准包含一个 WEP 共享密钥交换认证机制,称为“共享密钥”。此共享密钥交换在默认开放系统身份验证中添加了两个帧,从而实现了四帧交换。后一种方法称为共享密钥身份验证,需要使用 WEP 加密,目前尚未得到广泛使用(也不推荐使用)。 上面描述了身份验证的第一阶段,但是当使用 WPA 或 WPA2 时,身份验证的第二阶段(即设备关联后,会发生四次握手过程。 有关开放系统身份验证和共享密钥身份验证的详细信息,请参阅 802.11 安全帖子 。 图 6 。认证框架 如上所示,认证帧由以下字段组成。 认证算法编号:0 表示开放系统,1 表示共享密钥。 身份验证交易序列号:指示当前进度状态。 状态代码:0 表示成功,1 表示未指定的失败。 挑战文本t:用于共享密钥认证框架。 3. 协会 如果 802.11 身份验证阶段完成并返回成功结果,则站点将进入关联阶段。此次交换的目的是让站点加入网络并获取关联ID [AID]。 关联请求:关联阶段发送的第一帧是由请求站发送给 AP(或 IBSS 中的站)的。该帧为关联请求帧,该帧的响应为关联响应帧。 关联请求是单播管理帧并且总是被确认。 图 7.关联请求 关联响应:一旦关联请求得到确认,AP 就会检查请求的每个字段并验证它们都与其自己的 802.11 参数匹配(参见图 6)。如果参数不匹配,AP 会检查差异是否为阻塞,并据此发送身份验证响应。 - 如果参数差异是阻塞的,则将发送状态代码为 1 的响应(拒绝关联)。 - 如果参数无阻塞差异/无差异,则将向请求站发送状态代码 0(成功)和 AP 自己的参数的响应。站点必须与 AP 的功能兼容,否则它将放弃关联过程并开始寻找另一个 AP。 图 8.关联响应 连接拆除 解除关联:一旦站与 AP 关联,任何一方都可以随时通过发送解除关联帧来终止关联。 站点可以在离开当前网络漫游/加入另一个 AP 之前发送解除关联帧。 AP 可以在多种情况下发送此帧,例如,如果站点尝试使用无效参数、AP 本身的配置发生变化、黑客攻击等。 解除关联帧 (DA) 可以是要解除关联的站点的单播 MAC 地址,如果 AP 需要解除其网络中的所有站点的关联,则可以是广播地址。对于单播帧,接收站会确认该帧,而广播帧则不会确认。 图 9.解除关联帧 分离框架相当小。它仅包含一个字段“原因代码”。 已解除关联的站点仍需经过身份验证。它可以通过发送新的关联请求帧来尝试重新关联,并保持其认证状态。漫游到另一个小区的站点也可以选择使用解除关联帧,以便能够保持其认证状态,并在其认证超时到期之前漫游回同一小区时加速该过程。   图 10 。解除关联帧交换   当参数发生变化且站或 AP 需要重新协商通信参数时也会使用此帧。   取消认证:站点或 AP 也可以发送取消认证帧。当所有通信终止时使用此帧,例如,因为 AP 必须重新启动或因为站点停止其 Wi-Fi 通信。 当在身份验证完成之前接收到帧时也会使用它。例如,如果站点在执行身份验证序列之前尝试发送关联请求或数据帧,则站点将从 AP 收到取消身份验证帧,指示必须首先执行身份验证。该帧格式与解除关联帧相同。 图 11 。解除认证帧交换   漫游 在 802.11 无线网络中,漫游是指客户端将已建立的 Wi-Fi 网络关联从一个接入点移动到同一扩展服务集 (ESS) 内的另一个接入点,而不会丢失连接的过程(例如在定义的时间间隔内(通常在几秒钟的范围内)。为了获得更好的性能,漫游时间应该更短。 在漫游过程中,移动设备会向之前关联的接入点(AP)发送解除关联帧,并通过与设备想要连接的另一个接入点交换 802.11 帧来启动重新关联过程。客户端设备扫描另一个 AP,然后交换身份验证帧,之后它将发送重新关联请求,这里使用重新关联请求代替关联,并且连接过程的前两个步骤保持不变。 图 12 。漫游过程中的消息交换   图 13 。漫游代表   连接和断开过程中使用的 Wi-Fi API 下表显示了 NXP i.MX RT SDK 中用于连接和断开连接过程的一些可用 API。   表 1 。SDK 中可用的 API API 描述 可以从 wifi_send_scan_cmd 用于扫描可用网络。它仅支持基于单个 SSID 的扫描。我们可以将其扩展为多个 SSID 的列表。 站点和 AP wlan_add_network 将特定网络配置文件添加到已知网络列表。 站点和 AP wlan_remove_network 从已知网络列表中删除特定的网络配置文件。 站点和 AP wlan_连接 连接到特定网络(AP)。 车站 wlan_disconnect 断开站点与网络(AP)的连接。 车站 wlan_start_network 启动特定网络。 AP wlan_stop_network 停止特定网络。 AP 有关此类 API 的更多详细信息,请参阅文档“ MCUXpresso_SDK_WLAN_Driver_Reference_Manual.pdf ”可在 /docs/wifi 位置找到。
記事全体を表示
SPI NOR 演示镜像完整配置(适用于 i.MX8QXPC0 MEK 开发板),包含:引导加载程序、设备树、Linux 内核、根文件系统 此演示将引导加载程序、设备树、Linux 内核和根文件系统全部放在 SPI 中。 它通过原始读取(sf read)和原始写入(在 uuu 脚本中使用的 sf write)来实现。 sf probe 0; sf read ${fdt_addr} 0x500000 0x100000; sf read ${loadaddr} 0x600000 0x1E00000; sf read ${initrd_addr} 0x2400000 0x600000; setenv bootargs console=${console},${baudrate} earlycon=${earlycon},${baudrate} rdinit=/linuxrc; booti ${loadaddr} ${initrd_addr} ${fdt_addr} |-- 0001-all-in-spi-demo-lf-5.10.72-2.2.0.patch --- 此演示的补丁文件|-- demo_binary| |-- flash.b0.bin --- b0 引导加载程序| |-- flash.bin --- c0 引导加载程序| |-- Image-imx8qxpc0mek.bin --- Linux 内核| |-- imx8qxp-mek.dtb --- 设备树| |-- uramdisk_boot.rootfs.aarch64.img --- RAM 磁盘| |-- uuu.qspi.all.b0.uuu --- b0 的 uuu 脚本| `-- uuu.qspi.all.uuu --- c0 的 uuu 脚本`-- readme.txt --- 此文件 # 使用的 SPI 布局如下:# - --------- --------------------------------------------# | | flash.bin | 环境变量 | dtb | 内核映像 | 根文件系统 | # - --------------- -------------------------------------- # ^ ^ ^ ^ ^ ^ ^ # | | | | | | | # 0 4kiB 4MiB 5MiB 6MiB 36MiB 42MiB 0x1000 0x400000 0x500000 0x600000 0x2400000 测试: 硬件:i.MX8QXP MEK 软件:lf-5.10.72-2.2.0 + 0001-all-in-spi-demo-lf-5.10.72-2.2.0.patch 测试日志: SF:检测到 mt35xu512aba,页面大小为 256 字节,擦除大小为 128 KiB,总计 64 MiB 设备 0 偏移 0x500000,大小 0x100000 SF:1048576 字节 @ 0x500000 读取:正常 设备 0 偏移 0x600000,大小 0x1e00000 SF:31457280 字节 @ 0x600000 读取:正常 设备 0 偏移 0x2400000,大小 0x600000 SF:6291456 字节 @ 0x2400000 读取:正常 [4.787552]imx6q-pcie 5f010000.pcie:无法添加 pcie 端口。[ 4.797467] 释放未使用的内核内存:2944K[ 4.807379] 将 /linuxrc 作为 init 进程运行启动 syslogd:OK启动 klogd:OK运行 sysctl:确定启动网络:OK/bin/sh:无法访问 tty;作业控制已关闭/# i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus i.MX 8M | i.MX 8M Mini | i.MX 8M Nano i.MX6 全部 Linux
記事全体を表示
imx93-EVK-PWM_LED このドキュメントは、iMX93 PWMとPWMLEDのイネーブル化についてです HW: Mix93 11x11 EVK SW: lf-6.6.3-1.0.0です PWM: TPM3 CH0, CH2 TPM4 CH2 注:i.MX PWMと PWMLEDはすでに lf-6.6.3-1.0.0で有効になっています Linux
記事全体を表示
ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) はじめに この記事の目的は、モデルベース設計のユーザーが独自のカスタムCライブラリを活用したり、NXPのツールボックスでまだサポートされていないCドライバやコンポーネントを呼び出したりできるようにすることです。これにはMatlab Coderを使用し、モデルがC関数を呼び出すMATLAB関数ブロックのみを含める必要があります。詳細については、Mathworks Help Centerの「Integrate C Code Using the MATLAB Function Block- MATLAB & Simulink」をご覧ください。 BMSシステム 私の意見では、何かを学ぶ最も優れた方法は「実践しながら学ぶ」ことです。このチュートリアルでは、S32KのモデルベースデザインにBMSシステムのサポートを追加します。弊社のツールボックス対応ボードについてはすでにご存知かと思いますので、このBMSシステムについて少しお話ししましょう。 NXPは、車載用および産業用アプリケーション向けに設計された優れたセル・コントローラICを提供しています。詳細については、「MC33772B | 6チャネルのリチウムイオン・バッテリー・セル・コントローラIC | NXP」をご覧ください。このチュートリアルでは、FRDM33772BSPIEVB | MC33772 SPI EVB | NXPボードを使用します。これは、最大6個のバッテリー・セルを扱い、SPI経由で多くのNXPコントローラに接続します。また、いくつかのジャンパを調整することでS32Kファミリとも互換性がありますが、すべての説明は製品ページでご確認いただけます。 したがって、このプロジェクトの目標は、MBDT Simulink モデルからセル電圧を読み取れるようにすることです。 主な手順 カスタム・コードを含めるには、ユーザーは次の手順に従う必要があります。 1. [Settings(設定)]>[Code Generation(コード生成)]>[Custom code(カスタム・コード)]>[Include directories(インクルード・ディレクトリ)]で、Simulinkがディレクトリを含めるディレクトリ・パスを追加します。 2. SimulinkモデルにMatlab関数ブロックを挿入します。これは初期化に使用されます。ここでの目標は、生成されたコード・ファイルにCヘッダを含めることです。これには、coder.const関数を使用して、コーダ定数を宣言する必要があります。coder.updateBuildInfoを使用して、それをビルド情報で更新する必要があります。ここでは、次のテンプレートに従ってヘッダとソースを含める必要があります。 %% Adding  header information to the generated code coder.cinclude('driver.h'); %% Adding source files to MakeFile coder.updateBuildInfo( 'addSourceFiles', 'driver.c' ); この操作は一度だけ実行する必要があります。 3. ユーザーがSimulinkからカスタム関数を呼び出す必要がある場合、Matlab関数ブロックを追加し、必要に応じて入力と出力を宣言する必要があります。Matlab関数コード内で、入力として提供されたパラメータを使用してcoder.ceval関数を呼び出す必要があります。 たとえば、ユーザーがBMS_Init というC関数をパラメータなしで呼び出す必要がある場合、次のコード行でそれを実行できます。 %% Initializing the BMS driver coder.ceval('BMS_Init'); ユーザーが入力パラメータを提供する必要がある場合、直接またはcoder.refを引数として使用して提供するか、その値への参照を渡す必要がある場合はcoder.rrefを使用して提供する必要があります。 function BMS_Init(パラメータ)    if( coder.target( 'Rtw' ) )          coder.ceval('BCC_Init', parameter);          coder.ceval('BCC_Init', coder.ref(parameter));     end end これにより、以下のコードが生成されます。 BCC_Init(true); BCC_Init(&パラメータ); しかし、コードがより複雑な場合、最も簡単な方法は、ラッパ関数を宣言し、coder.cevalを使用してラッパを呼び出すことです。 BMSサポート このシナリオは、MBDTでまだサポートされていないコードの一部を使用するという、ほとんどのユーザーの要件に適合します。このICについて、NXPではすでにKIT3377x_DRVドライバと、セル電圧を測定してFreeMasterを使って表示するS32DSの例を提供しています。 S32K144ボード用にS32Kプロジェクトを作成し、MC33772ボードの設定とピンの要件に従って、FreeMasterブロックとLPSPIインスタンスを追加しました。Initialize変数は、BMSの初期化シーケンスを呼び出すためにのみ使用されます。 前の章で説明したように、必要なドライバといくつかのラッパを含むフォルダ「bcc」を宣言しました。また、これらを構成パラメータに挿入しました。 initialize関数には、Matlab呼び出し関数が含まれています。これには、2番目のポイントで説明したすべての手順が含まれています。ここで、7行目からの部分に注目できます。すべてのcincludeコードは、coder.targetが「Rtw」の場合にのみ呼び出されます。ユーザーがelse条件を追加した場合、そのコードはシミュレーション時にのみ呼び出されます。現在、MBD_MCC_Initはドライバからのすべての初期化手順を実行するように設計されたラッパです。この方が簡単でした。 MC33772 は初期化されているため、ユーザーが値を必要とするときはいつでも、モデルに値を提供する Matlab 関数ブロックを追加する必要があります。 このブロックの背後にあるコードが次の画像に添付されています。getCellMeasurementsからの出力値は出力として提供され、get_cellVoltagesの内部でcoder.wref関数を使用してC言語のupdateMeasurementsを呼び出します。 BMSを実行中 コード生成中にいくつかのバグを解決し 、コードを正常にビルドしたら、生成されたコードをボード上で実行できます。次のスクリーンショットは、MC33772によって変換された電圧と可変電流の測定値を示しています。 結論 この記事では、カスタム・コードとMatlab Coderを使用して、Simulinkモデルに必要なCライブラリ/ドライバ/コードを取得する方法を紹介しました。NXPハードウェアを使用した実際のアプリケーションであるバッテリー・マネジメント・システムについて、簡単な手順リストとより詳細なチュートリアルを提供しました。このアプローチは、S32KまたはMPCツールボックスのどちらを使用する場合でも成功します。 後日編集 (1): ご要望に応じて、モデルベース設計とカスタム・コードを使用して、S32K144ボードでMC3377xB (FRDM3377xBSPIEVB) からの測定を実現するためのモデルとFreeMasterプロジェクトを添付しました。 実行するには、次の手順に従う必要があります。 1. アーカイブをダウンロードして解凍すると、s32k_mc3377x.mdlの横にbccフォルダがあります。 2. SDK(組み込みソフトウェア:MC33771/MC33772 SWドライバ | NXP) MC33771B/MC33772B用BCC SWドライバ・パッケージ(Liteバージョン)をダウンロードします。SDKフォルダのbccから、すべてのファイルをモデルのbccフォルダにコピーします。BCC SDKには、ダウンロード前に必ず読まなければならない合意事項があるため、SDKドライバをアーカイブに追加できません。 3. s32k_mc3377xモデルを開き、BMS_Init関数に移動し、4行目の文字列をモデルのbccロケーション・フォルダの完全なパスに置き換えます。 4. この後、コードが生成され、正常に実行されるはずです。 後で編集(2): MC3377xBとMPC5744Pをモデルベース設計ツールボックスを介して接続する方法の手順とともに解決策をご希望の場合は、こちらの質問をご覧ください。 MPC5744P & MC33771Bの設定 後日編集 (3): 多くのご要望にお応えして、S32K144とFRDMDUALMC33664をMC33771Cと通信させるためのサンプル・コードを追加しました。添付されたアーカイブをご覧ください。bms_s32k_frdm2_771c_tpl_cc。MC33771CのbccドライバはMC33771Bのbccドライバと異なるため、不足しているファイルをこちらからダウンロードしてください。 ハッピーハッキング! マリウス 返信:ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) Hello,Marius. @mariuslucianand  MC33771 MBDツールボックスはS32K1ツールの下にあります。また、MPC5744とMC33772B間の通信については、2020年の最初の写真でアドバイスを見つけました。 今、MBDTを使用して、2番目の図のようにMPC577BとMC33771Cを接続するSimulinkモデルを構築したいと考えています。現在、対応するツールチェーンが存在するかどうか知りたいです。 ツールがない場合、MPC577BとMC33771Cを接続するモデルを構築するためのデモまたは説明ファイルをご提供いただけるでしょうか?よろしくお願いいたします。 ご返信をお待ちしております。 ありがとうございました! Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) h こんにちは、マリウスさん おっしゃる通り、接続されていないセルは無視する必要があります。たとえば、MC33771Bを使用して8個のセルを読み取り、他のスロットは0として読み取る場合、低電圧障害のようなロジックを構築する際に影響があります。BMDツールボックスを介して、必要なセル電圧(私の場合は8個のセルを直列)のみを読み込んで保存できるような解決策はありますか。 可能であれば、どの設定を、どのブロックで行う必要がありますか。 私はFRMDMC33771BSPIボードとS32K144Q100 mcを使用しています よろしくお願い申し上げます。 Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) Hello @rathi_tg  読み取りレジスタ・ブロックの場合、温度や電圧などのこの種のレジスタを読み取る場合は、事前に変換を開始する必要があります。内部温度と電圧を生で読み取ろうとしましたが、変換を開始してからでないと動作せず、変換が完了するまで待ちました。 whileブロック内に、次のようにIs Convertingブロックを挿入しました。 S32DSのインポートに関しては、再現できませんでした。.XMLプロジェクト・ファイルをインポートし、ブロックは正常にビルドされました。どのバージョンのS32DSを使用していますか? お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi,  Ozanです。BMSモデルの例を使用して、freemaster経由でセルの電圧、電流、温度を読み取ることができました。しかし、これらの測定値を使って論理演算を構築したり、これらのデータを恒久的に保存しようとしたりすると、うまくいきませんでした。 最小セル電圧が2.1 Vを下回ると青色のLEDを点灯させ、パック電圧が31 Vを超えると赤色のLEDを点滅させるといったリレーショナル操作を構築しようとしています。この目的のために、関係演算子ブロックと if 条件ブロックの両方を使用しました。しかし、条件が満たされているかどうかに関係なく、LEDは点灯していました。より明確に言うと、電圧レベルが2.1Vを下回っているか上回っている場合は青色LEDが点灯し、パック電圧が31Vを上回っているか下回っている場合は赤色LEDが点滅します。その間、電圧源を通じて電圧レベルを変更し、最小電圧とパック電圧の両方の電圧レベルの変化を観察できます。何が問題で、どうすればこの問題を解決できますか? 永続メモリにデータを書き込もうとすると、別の問題が発生します。Flash configブロックとFlash EEEwriteブロックを使用しましたが、データを保存できず、メモリに関するエラーが発生しました。さまざまなデータ(たとえば、SOC、内部温度、セルの最小電圧と最大電圧)を不揮発性メモリに保存したいと考えています。どのようにこれを実行できますか? よろしくお願いいたします。 論理演算に使用したモデル: 不揮発性メモリのモデル: Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) Hello Marius, マスターとスレーブ通信の省電力モードを統合しようとしていました。 S32k144のコードは、PowerManagment_ISR(NXPの例で提供されているGpioコール・バックによる電力モード)から取られています。 コードをフラッシュすると、指示どおりに正常に動作しますが、スレーブ通信を統合すると、すぐにマスターがスイッチ経由でウェイクアップしなくなり、リセットが必要になります。 第二に、マスター・スレーブ通信の.xmlファイルをDesign Studioにインポートすると、次の内容がメモ帳に出力されます。 The Error is as follows.1> C:\NXP\S32DS_ARM_v2.2\S32DS\build_tools\gcc_v6.3\gcc-6.3-arm32-eabi\arm-none-eabi\newlib\lib\thumb\v7e-m\fpv4-sp\hard\libm.a (The system cannot find the path specified) Design Studio バージョン 2.2 よろしくお願いします。 Gopal Rathi。 Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello rparveez@mtu.edu, NTCサーミスタのNTCパラメータは、BCC構成ブロックで設定されます。入力にNTCセンサーを接続している場合は、ボード上のNTCのはんだを除去してください。そうしないと、2つのNTCが並列に接続されることになります。 初期化時に、NTCSからの値に基づいて、アルゴリズムはルックアップ・テーブルを計算します。fillNtcTableという関数の生成コードをご覧ください。監視中、コードはNTC電圧を取得し、ルックアップ・テーブルに基づいて*Cの値を返します。 [Pack settings(パック設定)]タブのMC3377xB_Configで使用される値は、MC3377xB_Get Valuesブロックで使用されるNTCサーミスタのパラメータを表します。シャント抵抗も同様です。ブロックは、この値を使用して、シャント抵抗値を電流値に変換します。 MC3377xBによって読み取られた生の電圧を変換するためにこの方法を使用せず、独自の方法を使用して、生の値をアルゴリズムが必要とする測定値に変換したい場合には、MC3377xB_Get_Raw_Valuesを使用してください。これは生データを30レジスタのみを返します。 お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Marius,  セル温度の読み取りについて解説をお願いします。NTC(B25/50、値3380k)を使用しています。室温では、これらの出力は誤った結果となります。FreeMASTERでスケーリングとオフセットを追加する必要がありますか?それともSimulinkで変更する方法はありますか? ありがとうございます Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> nishalemos@gmail.com様‌、 SimulinkでMC33771CをS32Kに接続するには、上記の記事で説明されているすべての手順を、別のドライバを使用して実行する必要があります。MC33771Cは、この組み込みSW:MC33771C SWドライバ | NXP(Liteバージョン)のページからダウンロードできるソフトウェア・ドライバを使用します。 ドライバをダウンロードした後、ドライバと同じアーカイブからBCC_S32K144_FreeMasterアプリケーションをモデルとして使用できます。そこには、アプリケーションについて説明するBCC_S32K144_FreeMaster.pdfも含まれています。 レシピは同じです。ツールボックスを使用して、通信に使用するSPIインスタンス(1/SPI、2/TPL)を設定する必要があります。MC33771Cのドライバ初期化を初期レジスタ値で呼び出す関数を使用する必要があります(必要なコードはすべてS32DSプロジェクトにあります)。上で説明したUpdateMeasurements関数とまったく同様に、必要なすべてのドライバ関数を呼び出すには、Matlab 関数を使用する必要があります。 お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> rathi.tg@araiindia.com‌様、 以下の添付画像にあるように、MC3377xB_Get_ValuesブロックはCellsVoltageを14個のuint32要素の配列として出力し、値はuVで表されます。シングルに変換するには、ゲインを1とし、その結果をFloatとしてFreeMaterに送信します。FreeMasterは、簡単な方程式を適用してデータをボルト単位で表示します。 したがって、Get_Values ブロックから uin32t 形式の uV データを直接取得することができます。 データを single から uin32 に変換する必要がある場合、いくつかの方法があります。ゲインを 1 に設定し、ゲインブロックで出力値のデータ型を選択するか、Simulink のデータ型変換を使用することができます。 お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello Marius, 上記のツールボックスは、S32K144とMC33771B/2B間の通信を確立します。しかし、現在、私はMC33771Cをスレーブとして使用しています。両方のボード(S32K144とMC33771C)間の通信を確立するためのガイドやコード例を提供していただけるでしょうか。 敬具 Nisha. Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello Marius, Marius様、ありがとうございます。私は両方の方法を試しましたが、マスターとスレーブの間の通信を確立することができました。 今、1つの問題に直面しています。CANで同じ値を観測できるように、single(データ型)を符号なし整数に変換する方法を教えていただけますか。 敬具 Gopal Rathi。 Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、@Rubeenaさん 昨日この投稿の通知を受け取りましたが、これらの問題はすでに解決していると思います。 6つのセル値の場合、Get_RAW_Valuesは実際には30個のレジスタを含む配列を返します。値については、ブロックのヘルプで説明されています。Get_Valuesブロックの場合、すでに一般的な測定単位に変換された値が返されます。このブロックは14個のセル電圧の配列を返しますが、セル番号は部品とアプリケーションによって異なるので、使用していない他の8つの値は無視してください。 ステータス値5はCRCエラーを表しており、おそらくボードとターゲット間の通信に問題があるか、通信が確立されていないことを意味します。 バランシング中にネットが処理しなければならない高電流のために、ピンが一緒に接続されていると考えられます。 測定値が一致しない場合は、接続を再確認してください。次のピンを使って3つのリチウム・イオン電池を接続してみました(4つ目は切れているので無視してください)。 Cell1 Neg – ピン34 Cell1 Pos – ピン30(30のみ接続しましたが、30と29の両方を接続することもできます) Cell2 Neg – ピン30 Cell2 Pos – ピン28 Cell3 Neg – ピン28 Cell3 Pos – ピン26 Cell3 Pos – ピン 2 また、ピン33とピン32を接続して、次の画像の青い部分とまったく同じ接続にしました。最後に、次のような結果が得られました。 お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Marius, 新しいBMSツールボックスを試し、MC3377xB構成でMC33772デバイスを選択しました。しかし、Get Valuesブロックは14個の要素を出力します。6にすることは可能ですか? まだFreeMasterでセル電圧を読み取ることができません。以下はウォッチ・ウィンドウです。Get valuesブロックのStatus変数は5を出力します。これはCRCが間違っていることを意味しますか?どうすればこれを修正できますか? 以前のs32kのSimulinkのサンプル・モデルを使用してみましたが、パック電圧のみを読み取ることができました。Cellvoltage[0]は5Vを示していますが、セル0の実際の電圧は3.2Vでした。 MC33772 の以下のバッテリ接続を確認してください。ピン 1-2、19-20、21-22、… が一緒に接続されています。 ありがとうございます Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello rparveez@mtu.edu‌, 1. FreeMasterプロジェクトを保存し、[Project(プロジェクト)]->[Options(オプション)]->[MAP Files(MAPファイル)]->[Default symbol file(デフォルトのシンボル・ファイル)]から、生成された.elfファイル上のFreeMasterの場所を更新します。 2. はい、BMS用に追加された新しいリリースのすべてのブロックは、動作状態に関する情報を提供するステータス出力を提供します。エラー・コードはブロックのヘルプに詳しく記載されているので、何が問題なのかを簡単に把握できます。 是非試してください。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello rparveez@mtu.edu‌, こちらのページでお知らせをご覧いただけます。https://community.nxp.com/docs/DOC-347202 また、必要なすべての手順に従って、Matlab アドオンから直接最新バージョンをインストールすることもできます。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Marius, 1. はい、UM11143に従ってジャンパーを変更しました。 2. 変数名を変更したのですが、モデルをビルドするたびに次のようなメッセージが表示されます。 CellVoltageがまだ0Vのままです。 通信エラーがあるかどうか確認する方法はありますか? ありがとうございます Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Gopal Rathi‌様、 バッテリー・セル・コントローラ・ボードとの接続は確立されましたか? 本日より、MathworksおよびS32KでMC3377xBのサポートを追加したS32K4.2.0用のMBDTをリリースいたしました。モデルbms_s32k_mc33772b_spi.mdl から使用を開始することができます。MC3377xB Configブロック内のデバイスを変更するだけで、モデルはMC33771Bで動作します。 モデルには、SPIペリフェラルを構成するLPSPI Configブロックがあります。MC3377xB Configブロックは、MC33771Bバッテリー・セル・コントローラを初期化し、ここでわかるように、エラー・ステータス・コードを提供します。FreeMasterに変数を追加して、結果を確認するとよいでしょう。エラー・コードはブロックのヘルプで説明されているため、何が問題なのかを簡単に把握できます。 MC3377xB Get Valuesブロックは、変換を開始し、変換の準備ができるまで待機し、結果をミリアンペア、マイクロボルト、摂氏など、人間が判読できる値で直接提供します。すべてがシングルにキャストされるため、uVからVに変換する必要がある場合は、ゲイン係数を変更するだけで済みます。 これを試してみて、あなたの側でどのように機能するか確認してください。 お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、マリウスさん ピン設定を行った後、スレーブはもうスリープ状態になりませんでした。しかし、残念ながら、Free Masterで値を確認すると、すべての出力がゼロになっています。 CANモジュールをデータストア「Cell_Voltages」と「Pack_Voltages」に接続してみましたが、値が適切ではありません。 DATA TYPE CONVERTERを使用しました。単一データ型の値をuint8データ型に変換するために必要な特定の変換はありますか? よろしくお願いいたします。 Gopal Rathi Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> m15871781742@163.com‌様、 MPC5744Pで同じ機能を実現するには、もう少し作業する必要があります。基本的に、添付のカスタム・コード・モデルの移行に加えて、bcc_peripheries.cおよびbcc_wait.cファイルも移行する必要があります。これらのファイルは、今のところS32K用に作成されています。基本的に、送信メソッドと受信メソッドを更新して、当社のツールボックスにも付属するMPC SDKからこれらを呼び出す必要があります。 お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello rparveez@mtu.edu‌, あなたの投稿から、基本的に2つの問題があることに気付きました。 1. VCOM LEDに関連するものです。通常、mc33772に1分以上電源が入ると、LEDが点灯します。コントローラと通信していない場合、ボードはスリープ状態になり、VCOM LEDは消灯します。ボードのピンをS32Kコントローラにルーティングするために、ボードのジャンパを変更しましたか?すべての手順はUM11143に記載されています。このドキュメントをお読みいただき、正しいジャンパをはんだ付け/はんだ除去してください。 2. FreeMasterの問題については、CellVoltage配列の名前が変更されたため、リンクが壊れている可能性があります。これを修正するには、[Continue(続行)]を押して、目的に変数の [Variable Watch] をダブルクリックし、変数名を再入力してください。 本日より、MBDT S32K 4.2.0がリリースされました。MC3377xBとSPI/TPLボードのサポートが追加されましたので、ぜひ当社のBMSブロックをご利用ください。 お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi, 実際のリチウム・イオン・バッテリー・セルをFRDM33772BSPIEVBに接続しています。 コードをコントローラ (S32K144) に正常にアップロードできました。しかし、FreeMASTERで電圧を読み取ることができません。 コードをアップロードした後、FreeMasterに次のメッセージが表示されます また、BCCのVCOM LEDが点灯しないことに気づきました。 どなたか助けていただけますか? ありがとうございます Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello Marius , 上記のコードを使用して正常にビルドしましたが、MC3371Bはスリープ状態になりません。 CANバスの出力を確認するためにCANモジュールを接続しましたが、値は安定しておらず、正確でもありません。 CANで出力を確認するための特定の要件はありますか。 よろしくお願いいたします。 Gopal Rathi Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello philippeperruchoud‌, よろしくお願いいたします。 よろしくお願いします。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Philippe様、 ご協力に感謝いたします。とても助かりました。ありがとうございました。 よろしくお願いいたします。 Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello oeren5@ford.com.tr, 正しいです。 - CT_n ラインは n セルの正極端子に接続する必要があります。 - CB_XXラインもセルのプラス端子に接続する必要があります。通常、お客様はバッテリー・セルまで電力(セル・バランシング用)とセンス(セル 端子用)を使用しないため、セル・バランシングを行いながらセルを正確に測定できます。そのため、CT_nとCB_XXからセル端子に1本のラインを接続するだけです。 - ICへの供給は2本の追加ラインを介して行われます。これは、ケーブル抵抗を介したIC供給電流によって不正確さが生じるのを避けるために必要です。そのため、VBAT (X1-1/X1-2)とセル14のプラス端子を別のラインで接続する必要があります。同様に、最初のセルのマイナス端子とGND(X1-34)の間には、別のGND接続が必要です。 以下は、バッテリーパックへの接続方法を示す手書きの配線図です。 お役に立てば幸いです。 よろしくお願いいたします。 フィリップ . . . Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Marius, ご回答いただき、誠にありがとうございました。第2.4.1章 FRDM33771BSPIEVBの設定で言及された必要なハードウェア構成を行ってみます。 もう1つ議論したいポイントは、FRDM33771BSPIEVBへのセル接続です。なぜなら、BATT-14EMULATORではなく、実際の18650リチウム・イオン・セル(14個のセル)を使用するつもりだからです。ユーザー・ガイドを確認すると、セルの接続にはセル・コネクタX1を使用するように書かれていました。しかし、その接続を完全に理解することはできませんでした。 CT_14、CT_13、……CT_1は、セル1からセル14を経由してセルのプラス端子に接続されるコネクタであると想定しました。しかし、VBAT(X1-1とX1-2)、CT_REF、GND(X1-34は最初のセルの負極になるべきでしょうか?)、CB_14、CB_14:13_C、CB_13/CB_12.... CB_1をどこに接続するかわかりませんでした。接続について詳しく説明または案内していただけませんか?   よろしくお願いいたします。このコミュニティから多くの有益な情報を得ています。 Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello rathi.tg@araiindia.com, oeren5@ford.com.tr‌, お約束したとおり、32K144EVB + FRDM33771BSPIEVB + BATT-14EMULATORで動作するモデルを添付しました。基本的に、oeren5@ford.com.trが前回の投稿で言及した変更で十分ですが、現在コードをお持ちの場合(記事の末尾に添付されています)、差分を実行できます。 唯一必要なことは、BMS初期化/MATLAB関数に移動し、4行目をアーカイブ内のbccフォルダのフルパスで置き換えることです。 こちらが、14個のセルのバッテリー値をすべて含むFreeMasterプロジェクトの様子です。 通信を正常に行うために、以下の点をご確認ください。 1. FRDM33771BSPIEVBには、ボード上のハードウェア・ジャンパ設定がいくつか含まれており、通信を正常に動作させるには、これらの設定を変更する必要があります。UM11143マニュアルの「2.4.1 FRDM33771BSPIEVBの設定」の章に記載されているとおり、ボード上ではんだごてを使用して変更を加え(6つのジャンパ)、mC33771のピンを直接S32K144のピン・ヘッダに接続してください。 2. rathi.tg@araiindia.comの返信にある、ボードがアイドル状態になるという通信の問題は、HWかSWのどちらかの通信の障害によるものだと思います。ボードは通信を受け取らず、60秒後にスタンバイ・モードに入ります。 3. 私と同じ設定を使用している場合は、エミュレータの電源が入っていることを確認してください。 お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello oeren5@ford.com.tr‌, rathi.tg@araiindia.com‌, お二人がおっしゃった変更は機能するには十分と思われますが、適切な回答を提供するためには、S32K + MC33771Bのセットアップを調査する必要があります。できるだけ早く、MC33771Bのモデルを生成し、ソースを添付いたします。 お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello, 私も同じことをしましたが、出力はゼロになり、スレーブ MC33771B はスリープ状態になります。 敬具 Gopal Rathi Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi, 私はOzanです。s32k144evbとFRDM33771BSPIEVBを使用して、BMSデザインを構築しようとしています。最初のステップとして、mc33771の測定値を読み取りたいと思います。mc33772の代わりにmc33771を使用するには、s32_mc33772モデルの例でいくつかの設定変更を行う必要があることを理解しています。mbdt_utils.cで、(組み込みSW:MC33771/MC33772 SWドライバ | NXP)からダウンロードしたファイルで以下の変更を加えました。主な目的は、14セルとSPI通信でmc33771を使用することです。 デバイスとセル番号を適切に設定するために、以下の変更で十分かどうか知りたいと思っています。あるいは、bccドライバ・コード(具体的にはbcc.c、bcc_spi.cなど)に追加の変更を加える必要がありますか。よろしくお願いいたします。 → 以下の部分のコメントを解除します。  // To be used for the MC33771 uint32_t cell7VoltageUV; uint32_t cell8VoltageUV; uint32_t cell9VoltageUV; uint32_t cell10VoltageUV; uint32_t cell11VoltageUV; uint32_t cell12VoltageUV; uint32_t cell13VoltageUV; uint32_t cell14VoltageUV; cell7VoltageUV = BCC_GET_VOLT(measurements[BCC_MSR_CELL_VOLT7]); cell8VoltageUV = BCC_GET_VOLT(measurements[BCC_MSR_CELL_VOLT8]); cell9VoltageUV = BCC_GET_VOLT(measurements[BCC_MSR_CELL_VOLT9]); cell10VoltageUV = BCC_GET_VOLT(measurements[BCC_MSR_CELL_VOLT10]); cell11VoltageUV = BCC_GET_VOLT(measurements[BCC_MSR_CELL_VOLT11]); cell12VoltageUV = BCC_GET_VOLT(measurements[BCC_MSR_CELL_VOLT12]); cell13VoltageUV = BCC_GET_VOLT(measurements[BCC_MSR_CELL_VOLT13]); cell14VoltageUV = BCC_GET_VOLT(measurements[BCC_MSR_CELL_VOLT14]); -> 次のセル電圧を追加します。 cell_Voltages[6] = (float) cell7VoltageUV; cell_Voltages[7] = (float) cell8VoltageUV; cell_Voltages[8] = (float) cell9VoltageUV; cell_Voltages[9] = (float) cell10VoltageUV; cell_Voltages[10] = (float) cell11VoltageUV; cell_Voltages[11] = (float) cell12VoltageUV; cell_Voltages[12] = (float) cell13VoltageUV; -> 最後に、init関数を変更しました。     bcc_status_t MBD_BCC_Init(void) { //Configure the bcc_drv_config_t structure for the MC33772 drvConfig.drvInstance = 0U; drvConfig.commMode = BCC_MODE_SPI; drvConfig.devicesCnt = 1U; drvConfig.device[0] = BCC_DEVICE_MC33771; drvConfig.cellCnt[0] = 14U; Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> HelloMiarius-lucian Andrei  ツールボックスに問題があったため、コードを正常にビルドできました。しかし、MC33771Bを使用して通信を確立し、出力パラメータをCAN経由で送信していますが、パラメータの値を取得できません。 s32k144に接続されたFRDMMC3371BSPI(Freedom SPI ボード)は2~3分後にスリープ状態になり、通信の確立がうまくいかなかった可能性があります。 以下の2つのピンは接続していません。これは、FRDMMC3371BSPIに接続されていることが明記されていなかったので、オプションなのだと思います。 MDBTファイルに必要な変更を加えました。S32k144とMC3371B、MC3371C間の通信を確立するために必要な設定方法を教えていただけますか。 敬具 Gopal Rathi Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> rathi.tg@araiindia.com‌様、 すべてのソースとヘッダが問題なければ、インクルード・ディレクトリにBCCがあるかどうかを確認できます。 S32K1xxシリーズ用のモデルベース設計ツールボックスのバージョンは、R2017b-R2019aの場合、現在4.1.0です。ただし、R2019bやR2020aなどの最新バージョンと完全に互換性があります。最高のエクスペリエンスを得るために、すべてのユーザーに最新のソフトウェア・リリースを使用することをお勧めします。R2016については、今後のリリースで対応を検討します。 Include ディレクトリを追加してみて、これが問題の解決に役立つかどうかを確認してください! お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> HelloMiarius-lucian Andrei     私はcoder.updateBuildInfo( 'addSourceFiles', 'mbdt_utils.c' );を追加しました これはToolboxバージョン「S32K1xx v.2.0.0」です。指定されたパス「bccpath」は書き込み可能です。そうでなければ、すべてのファイルに対してエラーが発生します(私が知る限り)。 私が作ったモデルなので、見落としがあるかもしれません。2019bは入手不可能なので、下位バージョンのMatlabモデルを教えてください。2016bでも良いです。 1. 最初に MC33771B でコードを試しているので、プロジェクトの mdbt ファイルと bcc_Conf に必要な変更を加えました。他に見逃した変更はありますか?お知らせください。     よろしくお願いいたします。 Gopal Rathi        Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> rathi.tg@araiindia.com‌様、 この記事を活用して実際の解決策を検討していただき、ありがとうございます。 最初の点については、スクリーンショットを分析すると、すべてのオブジェクト・ファイルをelfファイルにリンクしようとするときに、プログラムがクラッシュしていることがわかります。これは、ソース・ファイルの1つがまだコンパイルされていない場合に発生します。不足しているリファレンスはmbdt_utils.cの下で定義されています。つまり、このファイルは決してコンパイルされません。BMS_initのMatlab関数で、bccPathが適切に定義されていること、すべてのヘッダがcoder.cinclude関数を使用して挿入されていること、そして最も重要な点として、すべてのソース・ファイルがcoder.updateBuildInfo関数として渡されていることを確認してください。おそらくcoder.updateBuildInfo( 'addSourceFiles', 'mbdt_utils.c' );が欠落している可能性が高いです。このコード行を削除すると、次のような出力が得られました また、スクリーンショットから、古いバージョンのツールボックスと古いコンパイラを使用していることがわかります。使用している S32K Toolbox のバージョンを教えていただけますか? 2番目の点については、これらの要件を調査するための時間を少しいただければ、返信いたします。 お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Marius-lucian Andrei様 説明に従ってモデルを作成しましたが、プロジェクトのビルド中にエラーが発生しました(ハードウェア (S32K144) にフラッシュしようとすると発生します)。   1.   いくつかの質問があります。最初にMC33771Bでコードを試しているので、プロジェクトのmdbtファイルとbcc_Confに必要な変更を加えました。他に見逃した変更はありますか?お知らせください。 2。セルバランスコマンドを送信してセルバランスステータスを取得し、スリープとウェイクアップのコマンドを送信する方法を教えていただけますか。 ここにエラーのスナップショットを添付いたします。 ありがとうございます。よろしくお願いいたします。 Gopal RathiK Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello rathi.tg@araiindia.com‌, teejaa‌, ご要望に応じて、モデルベース設計とカスタム・コードを使用してS32K144ボードでMC33772B(FRDM33772BSPIEVB)からの測定を行うためのモデル(アーカイブはチュートリアルの最初のテキストの上の方にあります)とFreeMasterプロジェクトを添付しました。 実行するには、次の手順に従う必要があります。 1. アーカイブをダウンロードして解凍すると、s32k_mc33772.mdlの横にbccフォルダがあります。 2. SDK(組み込みソフトウェア:MC33771/MC33772 SWドライバ | NXP)MC33771B/MC33772B 用の BCC SWドライバ・パッケージ(Liteバージョン)をダウンロードします。SDKフォルダのbccからすべてのファイルをモデルのbccフォルダにコピーします。BCC SDKには、ダウンロード前に必ず読まなければならない合意事項があるため、SDKドライバをアーカイブに追加できません。 3. s32k_mc33772 モデルを開き、BMS_Init 関数に移動し、行 4 の文字列をモデルの bcc ロケーションフォルダーのフルパスに置き換えてください。 4. この後、コードが生成され、正常に実行されるはずです。 ハッピー・ハッキング、 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello,Marius. MPC5744PとMC33772Bの間で機能的な通信を実現したいのですが、どのようにすればよいでしょうか。何かアドバイスはありますか? ありがとうございます。 SHAO Jianbo Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> mariuslucianandrei‌ 私も彼と同じように、MBDTを完全に使用できるようにC.Codeを移行するための調査をしています。 *.mファイルまたはMATLABのサンプル・プロジェクトがあれば大変ありがたいです。 ありがとう&よろしく、 Narudol T. Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi mariuslucianandrei‌ 上記のステップについて少し混乱しています。MC33771BとMC33771Cの両方のデモコードをご提供いただけますでしょうか。 よろしくお願いいたします。 Gopal Rathi  Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> rathi.tg@araiindia.com‌様、 回答が遅れて申し訳ございません。 実際、それらのファイルはドライバに存在しません。私が作成したもので、MBD_BCC_Init関数のような初期化に使用されるラッパが含まれています。ここで、設定の構造と実際にデータを測定する関数を記入することができます。SDK FreeMasterの例でそれらを見つけることができます。 bcc_status_t updateMeasurements(float *cell_Voltages, float *pack_Voltage, float *pack_Current, float *internal_Temperature) また、その内部では、SDKが提供する初期関数はそのままにし、測定したデータのみを次のように変数に転送しました。 // MBDT Provide all required data in uV cell_Voltages[0] = (float) cell1VoltageUV; cell_Voltages[1] = (float) cell2VoltageUV; cell_Voltages[2] = (float) cell3VoltageUV; cell_Voltages[3] = (float) cell4VoltageUV; cell_Voltages[4] = (float) cell5VoltageUV; cell_Voltages[5] = (float) cell6VoltageUV; *pack_Voltage = (float) stackVoltageUV; *pack_Current = (float) isenseCurrentMA; ここでは、cell_Voltagesが配列であり、ベクトルとして提供されていることに注意してください。 それでは、BCC_MCU_ConfigureLPSPI() 全体をコメントアウトする必要がありますか? いいえ。関数は残す必要があります。#if defined(SPI)の直後の179行目から193行目までのみコメントアウトしました。 また、call_getCellVoltages関数を記述する際には、変数に必要な型とダミー値を用いてCell_Voltagesを初期化してください。また、これをポインタとして提供すれば、単一の配列ですべてのセルを取得することができます。 if( coder.target( 'Rtw' ) ) coder.ceval( 'bccError = updateMeasurements', coder.wref(Cell_Voltages), coder.wref(Pack_Voltage), coder.wref(Pack_Current), coder.wref(Internal_Temperature)); else % We're not generating code Cell_Voltages = single(3.7*ones(1,6)); Pack_Voltage = single(6.0*3.7); Pack_Current = single(1.5); Internal_Temperature = single(22.0); end お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> mariuslucianandrei様 メイン・コードで上述の手順をすべて実行しましたが、エラーが発生しました。 エラーの添付ファイルは以下になります。 第二に、組み込みSW:MC33771/MC33772 SWドライバ | NXPでは、コードにあるような特定のファイル、つまりmbdt_utils.cや.hを提供していません。 そこで、BCC_MCU_ConfigureLPSPI()全体をコメントアウトする必要がありますか? よろしくお願いいたします。 Gopal Rathi。 Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> rathi.tg@araiindia.com‌様、 S32K用モデルベースデザインツールボックスとこのBMS例にご興味をお持ちいただきありがとうございます! それぞれのポイントに対して回答してみたいと思います。 MATLAB Simulinkを使用して、NXPS32K144とMC3371の間でSPI通信を確立する直接的な方法はありますか。 このカスタム・コード例は、S32K向けS32SDKドライバの上位レイヤであるS32K向けMBDTに基づいており、MBDTと同じパッケージで提供されます。S32K144とMC33772Bの間で機能的な通信を実現するには、同じS32K向けS32SDKドライバ・レイヤーを使用する組み込みSW:MC33771/MC33772 SWドライバ | NXPを使用する必要があります。 これは使いやすいドライバです。なぜなら、呼び出す必要がある関数は、BCC_Init(ドライバを初期化する)とupdateMeasurements(新しい測定パラメータを取得するために定期的に実行する)の2つだけだからです。もちろん、パラメーターの設定に使われるC構造体もいくつかあります。 現時点では、MBDTでこれを行う最も簡単で洗練された方法は、上記で説明したこのカスタム・コード・メソッドを使用することです。このボードをサポートするために、NXPはSWドライバ用ユーザー・マニュアルを提供しています。このマニュアルは組み込みSW:MC33771/MC33772 SWドライバ | NXPで参照でき、SWの実装やパラメータの変更方法についても詳しく説明しています。これをお読みになることを強くお勧めいたします。 上記のチュートリアルでは、MBDTブロックを使用して、ドライバが使用するパラメータにSPI0を初期化し、BCC_MCU_ConfigureLPSPI()によって実行されたbcc_peripheries.cコンポーネントからドライバの初期化をコメントアウトしました。これを選んだ理由は、MBDT SPIブロックがSPI用のピンも初期化するからです。公式の例では、ピンは個別に初期化されます。その他の通信コマンドについては、MCドライバが実行します。 また、上記のコードでは、ボーレートは1Mbpsに設定されていますが、データシートによると、ボーレートは2Mbpsとなっています。同じ点を説明していただけますか。 SPIをSWドライバのFreeMasterの例で使用されているのと同じ周波数で動作するように設定しました。以下に示すように、bcc_peripheries.hで、ボーレートは次のレートに設定されています。 #define BCC_SPI_LPSPI_BAUD 1000000  #define BCC_TPL_TX_LPSPI_BAUD 2000000 しかし、MC33772 ドライバは、TPL の場合、速度は 2Mbps でなければならないと指定しています。これは、最小値が 1.9 で最大値が 2.1 であるためです。一方、SPI の場合、最大周波数は 4.2MHz を超えてはならず、より低い周波数も許容されます。 お役に立てば幸いです。 マリウス Re: ツールボックスで独自のCコードを使用する方法(バッテリー・マネジメント・システムの例) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Marius  MATLAB Simulinkを使用してNXPS32K144とMC3371間の SPI 通信を直接確立する方法はありますか。 また、上記のコードでは、ボーレートは1Mbpsに設定されていますが、データシートによると、ボーレートは2Mbpsとなっています。同じ点を説明していただけますか。 敬具 Gopal Rathi。
記事全体を表示
i.MX 8M+:使用 yocto 生成的工具链构建内核工具时出错 当我尝试使用通过 Yocto 为 i.MX 8M+ 评估套件创建的工具链编译内核工具时遇到了构建错误。我能够构建设备树、内核和模块;只是工具出现故障。具体来说就是spidev_test。该工具链是根据 i.MX Yocto 文档通过“bitbake -c populate_sdk”生成的,并且一直运行良好。 以下是我所看到的: $ source /opt/fsl-imx-xwayland/6.6-scarthgap/environment-setup-armv8a-poky-linux $ make tools/spi DESCEND spi CC /home/ian/build/imx-yocto-bsp/linux-imx/tools/spi/spidev_test.o In file included from spidev_test.c:11: /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/lib/aarch64-poky-linux/gcc/aarch64-poky-linux/13.3.0/include/stdint.h:9:16: fatal error: stdint.h: No such file or directory 9 | # include_next | ^~~~~~~~~~ compilation terminated. 我可以通过将“ -I/opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/include”添加到 CFLAGS 来绕过这个问题,但后来我遇到了这个问题: DESCEND spi CC /home/ian/build/imx-yocto-bsp/linux-imx/tools/spi/spidev_test.o In file included from /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/include/features.h:527, from /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/include/bits/libc-header-start.h:33, from /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/include/stdint.h:26, from spidev_test.c:11: /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/include/gnu/stubs.h:7:11: fatal error: gnu/stubs-32.h: No such file or directory 7 | # include | ^~~~~~~~~~~~~~~~ compilation terminated. 我看到工具链(不正确?)链接到 stubs-32 并破解链接到 stubs-64 (arm64 目标)。当我再次尝试时,我得到了这个: $ make tools/spi DESCEND spi CC /home/ian/build/imx-yocto-bsp/linux-imx/tools/spi/spidev_test.o In file included from spidev_test.c:11: /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/include/stdint.h:98: warning: "__INT64_C" redefined 98 | # define __INT64_C(c) c ## LL | : note: this is the location of the previous definition /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/include/stdint.h:99: warning: "__UINT64_C" redefined 99 | # define __UINT64_C(c) c ## ULL | : note: this is the location of the previous definition LD /home/ian/build/imx-yocto-bsp/linux-imx/tools/spi/spidev_test-in.o LINK /home/ian/build/imx-yocto-bsp/linux-imx/tools/spi/spidev_test /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/13.3.0/ld: cannot find Scrt1.o: No such file or directory /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/13.3.0/ld: cannot find crti.o: No such file or directory /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/13.3.0/ld: cannot find crtbeginS.o: No such file or directory /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/13.3.0/ld: cannot find -lgcc: No such file or directory /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/13.3.0/ld: cannot find -lgcc_s: No such file or directory /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/13.3.0/ld: cannot find -lc: No such file or directory /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/13.3.0/ld: cannot find -lgcc: No such file or directory /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/13.3.0/ld: cannot find -lgcc_s: No such file or directory /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/13.3.0/ld: cannot find crtendS.o: No such file or directory /opt/fsl-imx-xwayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/13.3.0/ld: cannot find crtn.o: No such file or directory collect2: error: ld returned 1 exit status make[3]: *** [Makefile:42: /home/ian/build/imx-yocto-bsp/linux-imx/tools/spi/spidev_test] Error 1 make[2]: *** [Makefile:73: spi] Error 2 make[1]: *** [/home/ian/build/imx-yocto-bsp/linux-imx/Makefile:1362: tools/spi] Error 2 make: *** [Makefile:234: __sub-make] Error 2 看起来工具链中有些东西没有正确设置。或者,我的系统环境中缺少了什么?有什么线索可以说明这里发生了什么吗? i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Linux Yocto Project 回复:i.MX 8M+:使用 yocto 生成的工具链构建内核工具时出错 啊,检查一下!我的自定义图像是“imx-image-multimedia”的变体;我还没有构建“full-image”。谢谢! 回复:i.MX 8M+:使用 yocto 生成的工具链构建内核工具时出错 Hello, 看起来您必须构建完整图像才能编译它,因为出于某种原因我收到了 stubs-32 位和完整图像 stubs64。 此致
記事全体を表示
_libc_init_array()はどこで定義されていますか? Hello,  私はS32K344マイクロコントローラに取り組んでおり、C ++コードを実行する必要があります。C ++がSDKプロジェクトで公式にサポートされていないことがわかった後、nxpコミュニティページで説明されている回避策のいくつかを実装しようとしました。 要するに、SDKを使用してCプロジェクトを作成し、C ++の性質を追加し、main.cの名前をmain.cppに変更し、標準リンカファイルをプロジェクト設定のプロジェクトで作成されたリンカファイルに変更します(画像を参照)。 この手順の後、私はmain.cppでプロジェクトを構築することができます。ただし、main の外部で宣言されたオブジェクトは実行または初期化されません。 この問題に対して私が見つけた解決策の1つは、main()の先頭に__libc_init_array()を含めることです。ここでの問題は、この機能が見つからないことです。この依存関係を解決するためにライブラリを追加するにはどうすればよいですか?C ++でmainの外部オブジェクトを初期化する他の解決策はありますか?コンソール出力: ビルドファイル: ../RTD/src/Clock_Ip_ExtOsc.c 起動:標準S32DS Cコンパイラ arm-none-eabi-gcc "@RTD/src/Adc_Sar_Ip.args" -MMD -MP -MF "RTD/src/Clock_Ip_ExtOsc.d"-MT「RTD/src/Clock_Ip_ExtOsc.o」-o "RTD/src/Clock_Ip_ExtOsc.o""../RTD/src/Clock_Ip_ExtOsc.c" ../src/main.cpp:関数 'int main()'では、次のようになります。 ../src/main.cpp:59:2: エラー: '__libc_init_array' はこのスコープで宣言されていませんでした 59 |__libc_init_array(); |^~~~~~~~~~~~~~~~~ make: *** [src/subdir.mk:20:src/main.o]エラー 1 make: *** 未完成の仕事を待っています...。 Re:_libc_init_array()はどこで定義されていますか? Hi,  _libc_init_array STD C ライブラリの一部です (例: libc_nano.a)。C++ を使用している場合は、リンク、STD、C ライブラリ、および呼び出し_libc_init_arrayは必要ありません。
記事全体を表示
S32G_Compiled_PFE_into_Kernel このドキュメントでは、PFEドライバをカーネルにコンパイルしてネットワークの起動時間を短縮する方法を説明しています。中国語版: 目录 1    需要的软件,工具与文档... 2 2    目前PFE驱动的情况... 2 3    将PFE Slave驱动编译进内核... 3 3.1  将PFE驱动代码加入内核... 3 3.2  开发Makefile文件... 6 3.3  编译与测试... 8 4    将PFE Master驱动编译进内核... 10 4.1  编译Master工程... 10 4.2  测试... 11 4.3  解决FW的加载问题... 11 目次 1 関連資料。2 2 現在のPFEドライバ2 3 PFEスレーブをカーネル3にコンパイルしました 3.1 PFEドライバのソースをカーネルのソースに配置します。3 3.2 Makefileを開発してください。6 3.3 コンパイルとテスト。8 4 PFEマスター・ドライバをカーネル10にコンパイルしました 4.1 マスター・ドライバ10のコンパイル 4.2 テスト。11 4.3 FW読み込み失敗の問題を解決してください。11 Re: S32G_Compiled_PFE_into_Kernel こんにちは、ジョンリさん         我感觉像是RX-CLOCK的问题,因为我再查看pfe0的收发包计数时,能看到tx在增加,而rx时钟为0.         我去查看了芯片手册,看到pfe0的rx-clk用的是clk47 由于pfe使用的是MC_CGM_2,于是我找到相应的寄存器0x44018480 在pfe初始化时增加了读取写入寄存器的值并轮询的操作 这么修改之后板卡内核启动就崩溃了 请问一下这么修改有问题吗? 如果有的话该怎么修改? 没有问题话是什么原因导致崩溃的呢? よろしくお願いいたします Yang Re: S32G_Compiled_PFE_into_Kernel sja1110でクロックをs32gにロックしないことは可能ですか? 次のようにです。 M7上のS32G_PFE_Masterデモ。このドキュメントでは、M7上でPFEマスター・プロジェクトを構築する方法と統合する方法について説明します。中国語版 https://community.nxp.com/t5/NXP-Designs-Knowledge-Base/S32G-PFE-Master-Demo-building-on-M7/ta-p/1603420 Re: S32G_Compiled_PFE_into_Kernel こんにちは。上記のドキュメントに従ってpfeをカーネルに正常にコンパイルしましたが、ボードの起動後、ネットワーク機能が失敗していることがわかりました。pfe0、pfe1、pfe2は外部にpingできませんでした。次に、dmesgログを比較したところ、xpcsの初期化がpfeの初期化よりも遅いことがわかったので、pfeのロード時間を変更して遅延させました。ボードの起動後、pfe1とpfe2は正常に通信できましたが、pfe0はまだ通信できませんでした。dmesgログを比較したところ、すべて正常でした。koでロードしたログと違いはありませんでした。私のpfe1とpfe2はどちらもsgmiiを使用してpfe0に接続しており、sgmiiはまだSJA1110に直接接続されています。pfeドライバーとfwはどちらもバージョン1.0.0です。pfe0の障害を引き起こす可能性のある理由があるかどうか尋ねてもよろしいでしょうか?ありがとうございます! Re: S32G_Compiled_PFE_into_Kernel こんにちは ご指導に従い、PFEサーバーとファームウェアをカーネルに正常にコンパイルしました。PFEドライバのロード速度は確かに向上しましたが、10秒後にPFe1およびPFe2にょってMACアドレスを設定されるという問題が発見されました。理由は何ですか?また、2.433127秒でドライバのランタイムエラーを報告しますか?PFEはスリープ・ウェイクアップをサポートしていますか? ありがとうございます。ご返信をお待ちしております [ 0.000000] OF: 予約済みメモリ:初期化済みノード pfebufs@83200000、互換ID shared-dma-pool [ 1.699473] pfeng 46000000.pfe:PFEngイーサネット・ドライバを読み込み中... [ 1.705679] pfeng 46000000.pfe:バージョン: 1.2.0 RC2 [ 1.710557] pfeng 46000000.pfe: ドライバ・コミット・ハッシュ:M4_DRIVER_COMMIT_HASH [ 1.717464] pfeng 46000000.pfe:マルチインスタンス・サポート:無効(スタンドアロン) [1.724725]pfeng 46000000.pfe:コンパイルに使われたバージョン: 11.3.0 [1.729713] pfeng 46000000.pfe:Cbus addr 0x46000000 サイズ 0x1000000 [ 1.736100] pfeng 46000000.pfe: nxp,fw-class-name: s32g_pfe_class.fw [ 1.742569] pfeng 46000000.pfe: nxp,fw-util-name: s32g_pfe_util.fw [ 1.748935] pfeng 46000000.pfe: irq 'hif0' : 37 [ 1.753566] pfeng 46000000.pfe: irq 'hif1' : 38 [ 1.758195] pfeng 46000000.pfe: irq 'hif2' : 39 [ 1.762810] pfeng 46000000.pfe: HIF チャネル・マスク:0x0007 [ 1.768327] pfeng 46000000.pfe: netif name: pfe0 [ 1.773034] pfeng 46000000.pfe: DT MACアドレス:00:01:be:be:ef:11 [ 1.778977] pfeng 46000000.pfe: netif(pfe0) モード:std [ 1.784124] pfeng 46000000.pfe: netif(pfe0) EMAC: 0 [ 1.789096] pfeng 46000000.pfe: netif(pfe0) HIFs: count 1 map 01 [ 1.795222] pfeng 46000000.pfe: EMAC0インターフェース・モード:4 [ 1.800689] pfeng 46000000.pfe: netif name: pfe1 [ 1.805400] pfeng 46000000.pfe: DT MACアドレス:00:01:be:be:ef:22 [ 1.811342] pfeng 46000000.pfe: netif(pfe1) モード:std [ 1.816487] pfeng 46000000.pfe: netif(pfe1) EMAC: 1 [ 1.821455] pfeng 46000000.pfe: netif(pfe1) HIFs: count 1 map 02 [ 1.827613] pfeng 46000000.pfe: EMAC1インターフェース・モード:4 [ 1.833040] pfeng 46000000.pfe: netif name: pfe2 [ 1.837747] pfeng 46000000.pfe: DT MACアドレス:00:01:be:be:ef:33 [ 1.843689] pfeng 46000000.pfe: netif(pfe2) モード:std [ 1.848834] pfeng 46000000.pfe: netif(pfe2) EMAC: 2 [ 1.853801] pfeng 46000000.pfe: netif(pfe2) HIFs: count 1 map 04 [ 1.859922] pfeng 46000000.pfe: EMAC2インターフェース・モード:4 [ 1.865374] pfeng 46000000.pfe: PFEポートの整合性が有効化されました。マスク0x1e [ 1.872195] pfeng 46000000.pfe: クロック:sys=300MHz pe=600MHz [ 1.877988] pfeng 46000000.pfe: 選択されたインターフェース:0x4 EMAC1: 0x4 EMAC2: 0x4 [ 1.886542] pfeng 46000000.pfe: PFEコントローラのリセットが完了しました [ 1.892130] pfeng 46000000.pfe: EMAC0のSGMIIインターフェース用TXクロックがインストールされました [ 1.899632] pfeng 46000000.pfe: SGMIIインターフェース用EMAC0のRXクロックがインストールされました [ 1.907158] pfeng 46000000.pfe: SGMIIインターフェース用EMAC1のTXクロックがインストールされました [ 1.914657] pfeng 46000000.pfe: SGMIIインターフェース用EMAC1のRXクロックがインストールされました [ 1.922167] pfeng 46000000.pfe: SGMIIインターフェース用EMAC2のTXクロックがインストールされました [ 1.929668] pfeng 46000000.pfe:SGMIIインターフェース用のEMAC2のRXクロックがインストールされました [ 1.937287] pfeng 46000000.pfe: 割り当てられた予約済みメモリ・ノード pfebufs@83100000 [ 1.944700] pfeng 46000000.pfe: 割り当てられた予約済みメモリ・ノード pfebufs@83180000 [ 1.952114] pfeng 46000000.pfe: 割り当てられた予約済みメモリ・ノード pfebufs@83200000 [ 1.959494] pfeng 46000000.pfe: 割り当てられた予約済みメモリ・ノード pfebufs@835e0000 [ 1.966964] pfeng 46000000.pfe: ファームウェア:CLASS s32g_pfe_class.fw [46564バイト] [ 1.974406] pfeng 46000000.pfe: ファームウェア:UTIL s32g_pfe_util.fw [20332バイト] [ 1.981677] pfeng 46000000.pfe: PFE CBUS p0x46000000 mapped @ v0xffffffc00b000000 (0x1000000バイト) [ 1.990884] pfeng 46000000.pfe: HWバージョン0x101 [ 1.995607] pfeng 46000000.pfe: Silicon S32G3 [ 2.000048] pfeng 46000000.pfe: フェイルストップ・モードが無効 [ 2.008218] pfeng 46000000.pfe: PFE_ERRORS: パリティ・インスタンスが作成されました [ 2.014521] pfeng 46000000.pfe: PFE_ERRORS: ウォッチドッグ・インスタンスが作成されました [ 2.020995] pfeng 46000000.pfe: PFE_ERRORS: バス・エラー・インスタンスが作成されました [ 2.027553] pfeng 46000000.pfe: PFE_ERRORS: FWフェイル・ストップ・インスタンスが作成されました [ 2.034378] pfeng 46000000.pfe: PFE_ERRORS: ホスト・フェイルストップ・インスタンスが作成されました [ 2.041375] pfeng 46000000.pfe: PFE_ERRORS: フェイル・ストップ・インスタンスが作成されました [ 2.047936] pfeng 46000000.pfe: PFE_ERRORS: ECCエラー・インスタンスが作成されました [ 2.054322] pfeng 46000000.pfe: BMU1バッファ・ベース:p0xc0000000 [ 2.060273] pfeng 46000000.pfe: BMU2バッファ・ベース:p0x83100000 (0x80000バイト) [ 2.068915] pfeng 46000000.pfe: IRQ 41を「PFE BMU IRQ」という名前で登録 [ 2.075661] pfeng 46000000.pfe: BMU_EMPTY_INT (BMU @ p0x(____ptrval____)). プールの準備が整いました。 [ 2.075664] pfeng 46000000.pfe: ファームウェア .elf検出 [ 2.075675] pfeng 46000000.pfe: CLASSファームウェアのアップロード [ 2.083732] pfeng 46000000.pfe: BMU_EMPTY_INT (BMU @ p0x(____ptrval____))。プールの準備が整いました。 [ 2.088966] pfeng 46000000.pfe: 8つのPEを並行してロードするためのFWロードOPを選択しました [ 2.130712] pfeng 46000000.pfe: pfe_ct.hファイル・バージョン"92367c0e25f21f49217a9b08168ad2c8" [ 2.154221] pfeng 46000000.pfe: [FWバージョン] 1.5.0, ビルド::2022年11月23日, 09:48:33 (), ID: 0x31454650 [ 2.163755] pfeng 46000000.pfe: UTILファームウェアをアップロード中 [ 2.169076] pfeng 46000000.pfe: 1つのPEを並行してロードするためのFWロードOPを選択しました [ 2.179283] pfeng 46000000.pfe: pfe_ct.hファイル・バージョン"92367c0e25f21f49217a9b08168ad2c8" [ 2.190990] pfeng 46000000.pfe: VLAN IDが正しくないか、設定されていません。デフォルトのVLAN ID = 0x01を使用しています。 [ 2.199499] pfeng 46000000.pfe: VLAN 統計サイズが正しくないか、設定されていません。デフォルトのVLAN統計サイズ = 20 を使用しています。 [ 2.209335] pfeng 46000000.pfe: フォールバック・ブリッジ・ドメイン@ 0x20000a34 (class) [ 2.216510] pfeng 46000000.pfe: デフォルト・ブリッジ・ドメイン@ 0x20000a2c (class) [ 2.223861] pfeng 46000000.pfe: ルーティング・テーブルが作成されました。ハッシュ・テーブル@ p0x83180000, Pool @ p0x83188000 (65536バイト) [ 2.234571] pfeng 46000000.pfe: 機能err051211_workaround: DISABLED [ 2.242853] pfeng 46000000.pfe: MDIOバス0が無効:DTにありません [ 2.249331] pfeng 46000000.pfe: MDIOバス1が無効:DTにありません [ 2.259052] pfeng 46000000.pfe: MDIOバス2が有効 [ 2.264362] pfeng 46000000.pfe: HIF0が有効 [ 2.269056] pfeng 46000000.pfe: HIF1が有効 [ 2.273765] pfeng 46000000.pfe: HIF2が有効 [ 2.278117] pfeng 46000000.pfe: HIF3が設定されていないため、スキップされました [ 2.284811] pfeng 46000000.pfe pfe0: 登録済み [ 2.289456] pfeng 46000000.pfe pfe0: HIF0を購読 [ 2.295133] pfeng 46000000.pfe pfe0: HIF0を有効化 [ 2.300042] pfeng 46000000.pfe pfe0: MACアドレスを設定:00:01:be:be:ef:11 [ 2.306889] pfeng 46000000.pfe pfe0: PTP HW アデンド 0x80000000、max_adjを46566128 ppbに設定 [ 2.315924] pfeng 46000000.pfe: IEEE1588:入力クロック:200000000Hz、出力:100000000Hz、精度:10.0ns [ 2.326149] pfeng 46000000.pfe pfe0: EMAC0にPTP HWクロックが正常に登録されました [ 2.334539] pfeng 46000000.pfe pfe1: 登録済み [ 2.339160] pfeng 46000000.pfe pfe1: HIF1を購読 [ 2.344814] pfeng 46000000.pfe pfe1: HIF1を有効化 [ 2.349689] pfeng 46000000.pfe pfe1: MACアドレスを設定:00:01:be:be:ef:22 [ 2.356529] pfeng 46000000.pfe pfe1: PTP HWアデンド0x80000000、max_adjを46566128 ppbに構成 [ 2.365572] pfeng 46000000.pfe:IEEE1588:入力クロック:200000000Hz、出力:100000000Hz、精度:10.0ns [ 2.375773] pfeng 46000000.pfe pfe1: EMAC1にPTP HWクロックが正常に登録されました [ 2.384135] pfeng 46000000.pfe pfe2: 登録済み [ 2.388755] pfeng 46000000.pfe pfe2: HIF2を購読 [ 2.394407] pfeng 46000000.pfe pfe2: HIF2を有効化 [ 2.399319] pfeng 46000000.pfe pfe2: MACアドレスを設定:00:01:be:be:ef:33 [ 2.406162] pfeng 46000000.pfe pfe2: PTP HWアデンド0x80000000、max_adjを46566128 ppbに構成 [ 2.415194] pfeng 46000000.pfe:IEEE1588: 入力クロック:200000000Hz, 出力: 100000000Hz, Accuracy: 10.0ns [ 2.425397] pfeng 46000000.pfe pfe2: pfeにPTPハードウェア・クロックが正常に登録されました: [ 2.433127] pfeng 46000000.pfe: (PFENG_DEV)イベント1 - ドライバ・ランタイム・エラー:[pfeng-drv.c:864] [ 10.394090] pfeng 46000000.pfe pfe1: MACアドレスを設定:02:48:5a:01:03:20 [ 10.407065] pfeng 46000000.pfe: HIF1が起動しました [10.411380] pfeng 46000000.pfe pfe1: 固定/sgmiiリンク・モードの設定 [10.418267] pfeng 46000000.pfe pfe1: リンクがアップ - 2.5Gbps/フル - フロー制御オフ [10.427109] pfeng 46000000.pfe pfe2: MACアドレスを設定: 00:01:be:be:ef:33 [10.439587] pfeng 46000000.pfe: HIF2が起動しました [10.782874] pfeng 46000000.pfe pfe2: PHY [PFEng Ethernet MDIO.2:02] ドライバ [RTL9010AX Ethernet] (irq=POLL) [10.792177] pfeng 46000000.pfe pfe2: phy/sgmiiリンク・モードの構成 [10.798923] pfeng 46000000.pfe pfe2: (PFENG_NETDEV) イベント1 - ドライバ・ランタイム・エラー: [pfeng-phylink.c:37]速度はサポートされていません [ 10.810905] pfeng 46000000.pfe pfe2: リンクがアップ - 1Gbps/フル - フロー制御オフ [ 11.273105] IPv6: ADDRCONF(NETDEV_CHANGE): pfe1: リンクが準備完了 [ 11.279623] IPv6: ADDRCONF(NETDEV_CHANGE): pfe2: リンクが準備完了
記事全体を表示