問題タブ [spi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
embedded - 組み込み:SDHCSPI書き込みの問題
私は現在、MSP430F2618MCUとSanDisk4GBSDHCカードを使用するロガーで働いています。
カードの初期化は期待どおりに機能します。MBRおよびFATテーブルも読み取ることができます。
問題は、データを書き込めないことです。ノッチによって書き込み保護されているかどうかを確認しましたが、そうではありません。Windows 7 OSは、読み取り/書き込みに問題はありません。
ただし、「HxD」というツールを使用して、いくつかのセクターを変更しようとしました(Windowsの場合)。コンテンツをSDカードに保存しようとすると、ツールがウィンドウをポップアップして「アクセスが拒否されました!」と通知します。
次に、SDカードに書き込むためのコードに戻りました。
問題は、カードのステータスを待っているときのようです。
ここでは、Xが未定義のタイプ「X5」(16進値)の応答を待っています。
しかし、ほとんどの場合、応答は0x00(16進値)であり、ループから抜け出すことはできません。応答が0xFF(16進値)の場合はほとんどありません。
何が問題なのかわかりません。
誰か助けてもらえますか?ありがとう!
serial-port - シリアル対SPI
SPIとシリアルの違いは何ですか?プロセッサ間通信について話している記事を読んで、それはより良い/より速い通信のためにシリアルインターフェースがSPIに置き換えられていると述べていますか?違いは正確には何ですか?
c - ワークキューの優先度を設定できますか?
ワークキューの優先度を設定できますか?
ハードウェアとより高速に通信できるように、SPI カーネル モジュール「spidev」を変更しています。外部ハードウェアは非常に小さなバッファーを持つ CAN コントローラーであるため、データの損失を避けるために受信データをすばやく読み取る必要があります。新しいデータを通知するために GPIO 割り込みを構成しましたが、割り込みハンドラーで SPI ハードウェアを読み取ることができません。私の割り込みハンドラーは基本的に、SPI データを読み取るワークキューをセットアップします。カーネルにアクティブなプロセスが 1 つしかない場合は、問題なく動作します。他のプロセス (プロセス ビューアーのトップを含む) を同時に開くとすぐに、データの束が失われ始めます。つまり、1000 パケットのデータを問題なく受信し、その後 15 パケットを続けて失う可能性があります。 . 私の問題の原因は、他のプロセス (トップ、この場合) は、割り込みハンドラーが実行する CPU を制御しますが、スケジューラが再度呼び出されるまで、ワークキュー内の作業は制御されません。プロセスの優先度を上げようとしましたが、成功しませんでした。
割り込み処理関数の直後にワークキュー内の作業を実行するようにカーネルに指示する方法はあるのだろうか。提案は大歓迎です。
c - Spidev は ioctl を使用して同時に書き込み/読み取りを行いません
この問題がソフトウェア関連よりもハードウェア関連である場合でも、何らかの助けが得られることを願っています (後で説明します)。Freescales P1021 プロセッサ (ppc、e500v2 コア) に基づくカスタム ボードに取り組んでいます。外部 PCB が接続され、SPI によって構成できます。この外部 PCB の仕様は、全二重モードで 2 バイトのコマンドを想定し、MISO でデータを転送するために最後のバイトのみが使用されることを読み取ります。
これを知って、私は現在、このデバイスをテストするためのいくつかのソフトウェアの準備に取り組んでいます。そこで、よく知られているspi_testプログラムから始めました。
信号は 608 クロックを示しており、前半のデータしかないようです。ループバックを使用して調査およびテストすることにしました-MOSI-MISOループをショートカットして、データをrxバッファーに戻します。結果:
この信号は、テレグラム全体が何らかの理由で繰り返されていることを示しています (理由はわかりません)。ただし、プログラムは受信したデータをコンソールに正しく表示するため、spi_test が期待したとおりである可能性があります。
さらに、このプログラムで送信されるパターンを次のように 2 バイトまで操作します (要求されたコマンド形式をシミュレートするため)。
しかし、予想していなかったように、16 ビットではなく 32 ビットが SPI バスにシフトアウトされます。最初の 2 バイトの間、MOSI は tx[] からの両方のバイトを提供し、残りの 2 バイトは Low/0 です。コンソール出力とシグナルの結果は次のとおりです。
また、MOSI を MISO にループバックしても、データは受信されません (コンソール出力は「00 00」を受信しても同じです)。
すべてのパラメーターを少しいじって、半二重 (送信のみ) モードを使用するようにテスト プログラムを変更することにしました。
これがコンパイルされて実行されるので、期待どおりです。SPI_CLK は 16 ビットに対して 16 回サイクルし、MOSI は期待どおりにデータを提供します。Cosole の出力には、受信したデータが表示されず、信号は予想どおりです。
実際には、2 バイトの全二重転送を行う代わりに、N バイトの送信に続いて N バイトの受信を行うように思えます。
実際には、次の 2 つの質問があります。
- なぜ 0xAA, 0x81 と 0x00, 0x00 が送信されるのですか?
- (ループバックを使用して) 元のコードが rx バッファーにデータを戻すことができるのに、2 バイトに減らすとデータが受信されないのはなぜですか?
arduino - Arduino Nano: SPI はサポートされていますか?
Arduino Nano の SPI ハードウェアは使用できますか?
ナノのページには次のように書かれています。
SPI: 10 (SS)、11 (MOSI)、12 (MISO)、13 (SCK)。これらのピンは、基盤となるハードウェアによって提供されますが、現在 Arduino 言語には含まれていない SPI 通信をサポートしています。
それでも、SPI ライブラリがあります。
誰かこの矛盾を説明してくれませんか? どちらかと思います
- nanoページは古くなっています
- SPI ライブラリは Nano SPI ハードウェアではサポートされていませんが、他のボードではサポートされています
- SPI ライブラリは、Nano 用にソフトウェアのみで実装されています。
それはどれですか?
ありがとう
linux - SPI データ転送 - データ転送の前に MOSI がゼロ ハーフ サイクルになるのはなぜですか?
SPI デバイスから SPI 信号を出力しています。実際のデータがバスに書き込まれる前に、データ出力 ( MOSI
) が半サイクルになるのはなぜですか? 0
SPI デバイスの必須条件ですか? ゼロにならない場合、データ転送に問題はありますか?
Linux (ubuntu 12.04 - カーネル 3.7.1) で spidev32766.1 を使用しています。プロセッサは imx233 です。
前もって感謝します!!
avr - SPI 通信に USBASP プログラマを使用する
USBASPプログラマーを介して、PCからATmega328Pチップにデータを送信しようとしています。
SPI 経由で最大 4 バイトを送信できます。この 4 バイトは、USB Setup Packet で設定できます ( の場合は 2 バイト、 の場合はwValue
2 バイトwIndex
)。ATmega328P で SPI を有効にするために、USBASPReset
ピンを に接続しましたSS
。PC 側ではlibusb
、USB セットアップ パケットの送信に使用しています。
ATmega328P コード:
PC コード (C#):
USBASP -> ATmega328P SPI 通信は正常に動作しますが、Setup Packet のデータwValue
とwIndex
フィールドが USBASP で破損しているように見えます。
また、これらの数値は ATmega328P に接続された LED ディジット ディスプレイにも表示されます。
誰もそれを説明できますか?
PS プログラミング目的では、この USBASP はうまく機能します。
c - Zynq 7000 ARM 開発ボード用の SPI ドライバーを作成する方法を教えてください。
ARM 開発ボード用の SPI ドライバーを作成します。Linux では使用されません。
昨日、ザイリンクスが提供した QSPI ドライバーを読み、問題なく試してみました。しかし、私は自分の SPI ドライバーを書きたいと思っています。
ここに私の質問があります:
- QSPI と SPI の使用上の違いは何ですか?
- QSPI に基づいてドライバーを作成すると、動作しますか?
- ドライバをゼロから書く場合、基本的な手順 (READ / WRITE / INITIALIZE) は何ですか?
- 最後に、なぜ SPI は同時に送信と受信を行う必要があるのでしょうか?
みんなありがとう。