お問い合わせの概要
当社のカスタム i.MX 6ULL ボードで継続的に発生する不安定な Bluetooth 初期化エラーについて、公式のガイダンスを求めています。このシステムでは、UART3 (ttymxc2) 経由でコネクテッド Synaptics BCM4345C5 モジュールを使用します。ファームウェアのダウンロードは断続的にしか成功せず、徹底的なデバッグにもかかわらず安定した動作を実現できませんでした。この問題の核心は、UART インターフェースの pinctrl 構成に関連しているようです。
システム環境
プロセッサ: NXP i.MX 6ULL
Bluetoothモジュール: Synaptics BCM4345C5
インターフェース: ハードウェアフロー制御 (RTS/CTS) を備えた UART3 (ttymxc2)
オペレーティングシステム: Yocto ベースのカスタム Linux
BlueZ バージョン: 5.64
ファームウェアローダー: brcm_patchram_plus
問題の説明
HCD ファームウェアをロードしようとすると、さまざまな予期しない障害が発生します。
brcm_patchram_plus が無期限にハングするか、HCI リセット コマンドを繰り返し送信します。
カーネル ログには、コマンド tx タイムアウトとフレーム再構成失敗 (-84) エラーが表示され、データ破損を示しています。
まれにダウンロードが完了したように見える場合、hci0 インターフェースは null BD アドレス (00:00:00:00:00:00) を報告し、DOWN のままになります。
トラブルシューティングの手順と主な結果
広範囲にわたるソフトウェアおよびハードウェア レベルのデバッグを実行しました。さまざまなボー レート、ファームウェア ローダー オプション、スクリプト ロジック (マルチステージ リセットや有効な BD アドレスの監視を含む) をテストしましたが、成功しませんでした。
調査の結果、UART ピンの異なる pinctrl 値によって障害の症状が大幅に変化することから、これはハードウェア レベルのシグナリングの問題であることが確認されました。
0x1b0b0: (TX/RX) & 0x130b0 (RTS/CTS): この非標準の混合構成は、断続的に動作する唯一の設定でした。
0x1b0b0 (すべてのピン): データ破損が発生しました (tx タイムアウト)。
0x170b1 (すべてのピン): ファームウェアのダウンロードが完全に停止しました。
Synapticsからの重要な情報:
私たちのハードウェアデザインでは、Synaptics から「UART ライン上のプルアップ抵抗を削除する」という直接の指示を受けました。これは、BCM4345C5 モジュールが外部プルアップで動作することを目的としていないことを強く示唆しています。
この新しい情報により、i.MX 6ULL の内部プルアップ抵抗器を有効にした以前の pinctrl テストが根本的に間違っており、信号の競合 (「ダブル プルアップ」状態) を引き起こした可能性が高いと考えられます。
NXPサポートへの質問
1. 「プルアップなし」デザインの pinctrl: Synaptics からの外部プルアップ抵抗なしで動作するための要件を考慮すると、i.MX 6ULL UART ピンに公式に推奨される pinctrl 値は何ですか?すべての内部プルアップ/プルダウン機能を無効にして、ピンを実質的に High-Z またはキーパー状態に設定する構成が必要です。
2. 推奨される初期化シーケンス: このハードウェアの組み合わせに必要な、文書化されていない特定の初期化シーケンス (電源、GPIO リセット、stty 構成の正確なタイミングなど) が欠落している可能性がありますか?
再開まで今しばらくお待ちください。
こんにちは@saintlee1107 !
特定の要件に基づいて適切なレジスタ値を計算する方法を説明します。
要約すると、次の行は SoC の 2 つのレジスタを構成します。
MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b0
1)MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX: This defines the pin multiplexing (pinmux) configuration, assigning the UART3 transmit function to the corresponding pad.
2)0x1b0b0: This hexadecimal value sets the electrical characteristics of the pad, including pull-up/down resistors, drive strength, speed, and other parameters.
内部プルアップまたはプルダウン抵抗を無効にするには、構成値のビット 12 をクリアします。
Wi-Fi モジュールに合わせたより正確な設定については、 i.MX6UL リファレンス マニュアルを参照してください。これを使用して、次のレジスタの適切な値を計算します。
SW_PAD_CTL_PAD_UART3_TX_DATA
SW_PAD_CTL_PAD_UART3_RX_DATA
SW_PAD_CTL_PAD_UART3_CTS_B
SW_PAD_CTL_PAD_UART3_RTS_B
よろしくお願いいたします!
チャビラ
こんにちは、チャビラさん。
早急なご対応ありがとうございます。UART3 の現在のデバイス ツリー構成は次のとおりです。
pinctrl_uart3: uart3grp {
fsl、ピン = <
MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b0
MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b0
MX6UL_PAD_UART3_RTS_B__UART3_DCE_RTS 0x130b0
MX6UL_PAD_UART3_CTS_B__UART3_DCE_CTS 0x130b0
>;
};
参考までに、完全な DTS ファイルを添付しました。
これは、TX/RX に 0x1b0b0、RTS/CTS に 0x130b0 を使用する混合構成です。この構成では、Bluetooth の初期化は断続的にしか機能しません。
他にもいくつかの構成を試しました。
すべてのピンが0x1b0b0に設定され、データが破損しました
すべてのピンが0x170b1に設定されています - ファームウェアのダウンロードが完全に停止しました
すべてのピンが0x1b0a0に設定されています - 駆動力が低下しましたが、それでも失敗しました
Synaptics からは「UART ライン上のプルアップ抵抗を削除する」ようにアドバイスされているため、内部のプルアップ/プルダウン抵抗を完全に無効にする pinctrl 値が必要です。
内部のプルアップ/プルダウン抵抗を無効にするための適切な pinctrl 値を推奨していただけますか?
ありがとう。
こんにちは@saintlee1107 !
NXP サポートにお問い合わせいただきありがとうございます。
内部プルアップ抵抗とプルダウン抵抗は、使用しているデバイス ツリー内で直接構成されます。
これらの抵抗を無効にするためにデバイス ツリーを変更するお手伝いをさせていただきます。現在のデバイスツリーまたは関連セクションを共有していただけますか?
よろしくお願いします、
チャビラ