Closed makmorit closed 1 year ago
Nordic社から、nRF5_SDK_17.1.0/examples/peripheral/spi
というサンプルアプリケーションが公開されているので、まずは手始めに、こちらのサンプルで動作確認するようにします。
ただし、TFTディスプレイからのデータ受信は無いため、その部分をコメントアウトするなりして実行させるようにします。
nRF52840 DKに、#761 で製造した治具を接続し、Commit 05f0bf1 までの対応を施したプログラムで動作確認を実施しました。
結果としては、任意のデータを送信後、次のデータを送信する直前でBUSYを検出してしまい、SPI通信が成立しない状況です。
事象の詳細としては、アプリケーションが開始(=main.c
の永久ループが開始)した後だと、前述のBUSY検出が発生しています。
(アプリケーション開始前では、BUSY検出が無く、SPI通信は正常に成立しているようです)
Logs dropped (199)
<error> app_tiny_tft: SPI driver is not ready for a new transfer
Logs dropped (199)
<error> app_tiny_tft: SPI driver is not ready for a new transfer
Logs dropped (199)
<error> app_tiny_tft: SPI driver is not ready for a new transfer
Logs dropped (199)
<error> app_tiny_tft: SPI driver is not ready for a new transfer
:
<error> app_tiny_tft: SPI driver is not ready for a new transfer
Logs dropped (200)
<info> app: TFT display filled by yellow
対策としては、アプリケーションの永久ループ内で、USB通信と同様、例えば「通信が完了した」「BUSYでない」といったステータス判定を行うよう実装する必要がありそうです。 GitHubで公開されている、他プロジェクトの事例も調査しながら、対策検討を続けたいと思います。
対策としては、アプリケーションの永久ループ内で、USB通信と同様、例えば「通信が完了した」「BUSYでない」といったステータス判定を行うよう実装する必要がありそうです。
本件TFTモジュールに対するSPI通信が、送信Onlyであり、そもそも非同期である必要がないため、ノンブロッキング送信に改修しました(Commit 0577896ご参照)。 この結果、nRF52840アプリケーションでも、nRF5340アプリケーションと同様、TFTの動作が正常に行われる事を確認いたしました。
<debug> app_tiny_tft: nrf_drv_spi_init returns 0
<info> app: TFT display initialize done
<info> app: TFT display filled by yellow
<info> app: TFT display filled by black
概要
FORMIKE社の超小型TFTディスプレイ「KWH009ST01-F01」を、nRF52840に接続できるようにするため、nRF52840アプリケーションにSPIペリフェラルを追加実装します。
nRF52840とTFTディスプレイの接続は、#735 で製作した接続用治具を使用します。