2404602_ja-JP

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

2404602_ja-JP

2404602_ja-JP

FlexIO0 SPIコントローラーのTXシフター(SHIFTCTL, PINCFG=11b)は、SHIFTSにもかかわらず出力ピンを駆動しません

取締役会: FRDM-MCXN236(MCX N236、デュアルCortex-M33)
ツールチェーン: MCUXpresso IDE 25.6.136,ベアメタルレジスタレベルC(SDK周辺機器ドライバーなし)
RMの参考文献: MCX N23x リファレンスマニュアル Rev. 4、2025-03-05、第53章(FlexIO)、表453(SPIコントローラ、CPHA=0構成)

私が作っているもの:

FlexIO0はRM表453に従いSPIコントローラとして構成:シフター2台(shifter0 = TX、shifter1 = RX)+タイマー1台(timer0 = SCK、デュアル8ビットカウンタボーモード)、SPI経由でBME280センサーを読み込みます。ピン: P1_0/P1_1/P1_2 は ALT6 (FLEXIO0_D8/D9/D10) に多重化され、PORT1->PCR の読み取りによって正しいことが確認されています。

観察:
RXシフターとSCKタイマー出力はどちらも完全に動作します。SCKは正常にスケジュール通りに切り替わり(2つの独立したレジスタで確認済み、下記参照)、SHIFTSTAT/TIMSTATはすべての転送が正常に、時間通りに、エラーなく完了したことを報告します。しかし、 TXシフターの出力ピン(SDO、D8)は、私が思いつく限りのあらゆるバリエーションで、そこに何が書き込まれていても、電気的な動きを全く示しません。センサーからのチップIDレジスタの読み込みは常に 0x00 であり、期待される 0x60 ではありません(同じボード、同じセンサー、同じブート上の動作する FlexComm/LPSPI3 ドライバーが正しく読み取れます)。

レジスタ構成(RMテーブル453と完全に一致、PINSELは実際のピンに置き換えられています)

SHIFTCFG0 = 0x0000_0000 (RM: 0000_0000h -- スタート/ストップビット無効)
SHIFTCTL0 = 0x0083_0002 (RM: 0083_0002h、PINSEL=8 (実際のD8/SDOの場合))
デコード結果: TIMSEL=0、TIMPOL=1(負エッジ)、PINCFG=3(11b、駆動出力)
PINSEL=8、PINPOL=0、SMOD=2(送信) -- すべてのフィールドがRMのものと照合されます
文字通りの例では、PINSELのみが置換されています。
SHIFTCFG1 = 0x0000_0000
SHIFTCTL1 = 0x0000_0101 (RM: 0000_0101h、PINSEL=10 (実際のD10/SDIの場合))
TIMCMP0 = RM独自の式に基づいて算出(8ビットフレーム、1MHz SCK用のボー分周器)
TIMCFG0 = 0x0100_2222 (RMリテラル値、ピン置換不要)
TIMCTL0 = 0x01C3_0201 (RM: 01C3_0201h、PINSEL=9 (実際のD9/SCKの場合))

私が除外した可能性は、それぞれハードウェアの直接的な証拠(デバッガによるレジスタ/メモリの検査、オシロスコープは使用不可)に基づいている。

  1. ピンマルチプレクサがALT6に到達していません -- PCRの読み取り結果から、使用されている4つのピンすべてでALT6の設定が正しいことが確認されました。
  2. センサ/配線の故障――別の動作するFlexComm/LPSPI3 SPIドライバが同じ物理センサ、同じ起動時にチップID(0x60)を正しく読み取ります。
  3. SCKは物理ピンで一度もトグルしなかった――同時にサンプリングされた2つの独立したレジスタ、FLEXIO0->PIN(ビット9)とGPIO1->PDIR(ビット1、完全に別の周辺ブロックで、FlexIO内部ロジックを経由しない)によってトグルが確認された。両者はリアルタイムで、サンプルごとに一致する。
  4. SHIFTBUFBIS (ビットスワップされたエイリアスレジスタ) 内の TX バイトレーンの配置 -- 下位バイト、上位バイト (RM 53.3.1 から再導出) を試しました。シフトレジスタのマイクロアーキテクチャ記述(サマリーテーブルだけでなく)、バイトレーンに依存しない完全な32ビット交互書き込み(0xAAAAAAAA)など、すべて同一の永続的にフラットなSDOを生成します。
  5. TXバッファアンダーラン(SHIFTERR)-- RX準備完了待機が成功した直後にキャプチャされ、毎回0x0(クリーン)を読み取ります。
  6. ピン/パッド固有の障害 -- shifter0 の PINSEL をまったく異なる物理ピン (D8 ではなく D9) に再ターゲットしましたが、依然として平坦です。タイマーは、同一のPINCFG=11b「駆動出力」機構を使用して、どちらのピンも正しく駆動します。
  7. 「有効化時の暗黙的なロード」(RM 53.3.1:シフターの状態フラグは、「データがSHIFTBUFからシフターにロードされたとき、またはシフターが送信モード用に最初に構成されたとき」に設定されます。つまり、最初のサイクルでロードされた古いデータが存在する可能性があります)は、最初の転送を破棄し、続いてトレースされた明確な2番目の転送を行うことで除外されました。結果は同一で、フラットな状態でした。
  8. SHIFTBUFBIS エイリアス書き込みパスの非対称性 -- SHIFTBUFBIS[0] の代わりに、エイリアスされていないプレーンな SHIFTBUF[0] レジスタを介して同じバイトレーン非依存パターンを書き込みました: 同じフラットな結果。
  9. FLEXIO0->PINOUTD/PINOUTE/PINOUTDIS(グローバルなピンごとのソフトウェア出力オーバーライドレジスタ、RM 53.3.3)-- ライブ読み取りでは、動作中のSCKピンと動作していないSDOピンの両方で、すべてゼロが表示されます。これは、「タイマー/シフター構成によって制御されている」(通常の状態)ことを意味します。原因ではない。
  10. FLEXIO0->PINの読み取り自体が信頼できない - 上記の#3を参照。GPIO1->PDIRを介して独立して確認済み。
  11. Shifter0インスタンス固有の不具合 -- 代わりに、ビット単位で同一のSHIFTCTL値で構成されたshifter2を使用して、全く同じフラットな結果を再現しました。同じ失敗。特定のインスタンスに限った話ではありません。
  12. RM 53.7.1.27の文書化された 2 段階の PINCFG 書き込みシーケンス (最初に 10b を書き込み、次に 11b に別途書き込み、最初の構成時の短い低グリッチを回避する) -- 直接適用: 同じフラットな結果。

また、この部分に関する唯一の公開されたマスクセットエラッタ文書(MCXN23x_0P21K Rev. 2.0)も確認しましたが、FlexIO関連の項目は一切ありません。また、NXP自身のFlexIO-SPIアプリケーションノート(AN12780)も確認しました。後者はRM表453がすでに記載しているもの以上の指針を加えていません。

質問:

シフターの内部帳簿(SHIFTSTAT、SHIFTERR、TIMSTAT)は、すべてのテストで完全に正常で、スケジュールどおりで、エラーのない送信モード動作を報告しており、同じCSブラケットトランザクション内の複数の転送にわたってTX準備完了フラグが正しくクリアおよび再設定されています。これはRM 53.3.1によれば、真のタイマートリガーによるリロードでのみ発生するはずです。また、シフトクロック自体(同じPINCFG=11b「駆動出力」メカニズムですが、SHIFTCTLではなくTIMCTL経由)が物理ピンに正しく到達することが独立して証明されています。

レジスタレベルの設定がすべてRMテーブル453の具体的な例と完全に一致するにもかかわらず、シフタのSHIFTCTL.PINCFG=11b送信モード出力(タイマーの同じPINCFG=11b出力とは対照的に)がMCXN23xマスクセット上の割り当てられたピンに到達できないような、既知のシリコン動作、文書化されていない前提条件、またはRMのギャップは存在するのでしょうか?

必要であれば、レジスタレベルのプロジェクトソースコード全体と、完全な追記専用の調査ログ(試行したすべての仮説、すべての撤回、およびそれぞれの正確なハードウェア証拠)を喜んで共有します。

 

 

MCX N
Tags (1)
No ratings
Version history
Last update:
Friday
Updated by: