58979


現在使用しているバージョンは1.3.1です。  
・Arduino IDE(VSCode)を使用。

ハードウェアドキュメントを参照しますと、拡張ボード側のUARTは調歩同期式で、メインボードと拡張ボードを組み合わせた場合は、出荷時には自動的に拡張ボードのUARTが使用できる設定となっています。  
拡張ボード側のUARTが有効な場合、メインボードのUARTをGPIOとして設定した場合には、D27, D28のみ使用可能です。と記載されています。  
UARTの設定等は特に操作していませんので、出荷状態の拡張ボードのUARTが使用できる設定になっていると思います。

D27,D28を入力に設定してプルアップしているのですが、この状態ですとSerial2から何も送信されません。フロー制御が無効になっていないような感じなのですが、D27,D28を使用するには、pinModeの他に何か特別な設定等必要なのでしょうか。


CC BY-SA 4.0
2019-09-04T04:07:23.807
57829
2020-02-13T07:02:59.780
35717
question
spresense
spresense Serial2 制御


UARTは、Universal Asynchronous
Receiver/Transmitterの略で、受信機(Receiver)と送信機(Transmitter)両方の機能を持っています。

そのため、UARTから出ている２本のピンの一方は入力（データ受信用）、もう一方は出力（データ送信用）です。

「D27,D28を入力に設定してプルアップ」ということは、データ送信用のピンも入力に設定されている訳です。  
送信用のピンからデータが出てこないのは、そのピンの設定が入力になっているからではないでしょうか？


CC BY-SA 4.0
2019-09-04T08:36:42.043
57840
2019-09-04T08:36:42.043
217
57829
answer


ソニーのSPRESENSEサポート担当です。

お問い合わせいただきましたUART2使用時のピンのモードですが、  
ホームページ上のハードウェアドキュメントに誤りがございました。  
現在は訂正が済んでおりますので、下記の回答と併せて以下のページをご参照ください。  
[https://developer.sony.com/develop/spresense/docs/hw_docs_ja.html#_uartの使用方法](https://developer.sony.com/develop/spresense/docs/hw_docs_ja.html#_uart%E3%81%AE%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95)

UART2をシリアルポートとして使用する場合には、UART2_TX, UART2_RX, UART2_RTS, UART2_CTS  
の４ピンはまとめてフロー制御付きのシリアルポート動作となりますので、  
UART2_RTS, UART2_CTSの2ピンを独立してGPIOとして使用することはできません。

ご迷惑をお掛けしてしまい申し訳ございません。

今後ともSPRESENSEをどうぞよろしくお願いいたします。

SPRESENSEサポートチーム


CC BY-SA 4.0
2019-09-11T05:06:40.803
58979
2019-09-11T05:06:40.803
29520
57829
answer


Arduino IDEでSerial2(UART2)の動作を確認してみました。  
結論から言うとSerial2はフロー制御付きのシリアルポート動作となります。

CTSに外部からHIGH(1.8V)を入力した状態でSerial2.writeとするとデータは送信されません。  
CTSをHIGH→LOWと切り替えると送信バッファに溜まっていたデータが一度に送信されます。  
また受信データをSerial2.readせずにいると受信バッファがいっぱいになったタイミングでRTSがHIGH(1.8V)になります。  
Serial2.readで受信データをいくらか引き抜くとRTSはHIGH→LOWに変化しました。


CC BY-SA 4.0
2020-02-13T07:02:59.780
63021
2020-02-13T07:02:59.780
37821
57829
answer