私はLPUART0をマルチプレックスUARTモードで使用しており、外部の10KΩ抵抗で3.3Vまでプルアップしています。シングルワイヤUARTとして設定した後、データを送信できなくなりました。この問題の解決にご協力ください。
I2Cバス波形をキャプチャし、プルアップ抵抗を4.7Kに変更すると、さらに改善される可能性があります。
こんにちは@sssPPP
あなたが共有してくれたコードによると、LOOPSビットとRSRCビットの設定は正しいようです。
LPUART0->CTRL |= LPUART_CTRL_LOOPS_MASK; /* Enable loop/single-wire mode */
LPUART0->CTRL |= LPUART_CTRL_RSRC_MASK; /* Select single-wire mode */
ただし、これらのビットを変更する前に、トランスミッタとレシーバの両方が無効になっていることを確認することが重要です。
LPUART0->CTRL &= ~(LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK);
次に、送信を開始する前に、送信方向を設定し、トランスミッタを有効にする必要があります。
LPUART0->CTRL |= LPUART_CTRL_TXDIR_MASK; /* Set transmit direction */
LPUART0->CTRL |= LPUART_CTRL_TE_MASK; /* Enable transmitter */
最後に、DATAレジスタにデータを書き込んだ後、送信完了フラグ(TC)が点灯するまで待ってから、送信データレジスタ空フラグ(TDRE)だけでなく、ピンを受信モードに戻してください。これは、バイトが完全に送信される前にLPUARTが単線ラインを解放するのを防ぐためです。
この件については、 S32K344 シングルワイヤ UART モードのスレッドでも議論されており、適切な送信を保証するためには TXDIR 信号の正しいタイミングが重要です。
BR、VaneB