0

ロック機構のアクセス ポイントとして HID OEM75 を使用するプロジェクトを構築しています。Arduino Duemilanove (ATmega328) を介して制御を行っています。私たちは、セキュリティと (明らかに) サポートのためにSPIと協力しています。(どの RFID チップもセキュリティがかなり弱いことを認識しています。)

現在、カード リーダーから SPI 経由でバイトを受信するのに苦労しています。

カードリーダーは自律読み取りモードにあり、カードを読み取り、信号を Arduino に送信し (SPI とは別のカード存在ラインを介して)、Arduino に Slave Select ラインをハイにして転送サイクルをアクティブにするように指示します。カードリーダー。ここで問題が発生します。コマンドバイトをカードリーダーに送信せずに、Arduinoにカードリーダーからのバイトを単純に読み取らせる方法がわかりませんか?

デフォルトのコマンド構造である SPI.transfer(0x00) は、バイト (この場合はダミー バイト 0x00) を送信し、ソースからバイトを受け入れますが、ソースは自律的に動作しているため、ダミー バイトを受け入れません (そしてそれは実際にその操作を台無しにします)。

簡単に言うと、Arduino の SPI ライブラリを使用して、マスター ソースからバイトを送信せずに、スレーブ ソースからバイトの文字列を受け入れるにはどうすればよいでしょうか。

4

2 に答える 2

0

少し遅くなりましたが、誰かの役に立ちますように。

最初に:

これは、Arduino に Slave Select ラインを高くして、カード リーダーからの転送サイクルをアクティブにするように指示します。

これは SPI です。Slave Select を Low にプルして、High ではなく、スレーブをアクティブにします。他の人が話している間、黙るように指示するために高く設定します。

コマンドバイトをカードリーダーに送信せずに、Arduinoにカードリーダーからのバイトを単純に読み取らせる方法がわかりませんか?

それはあなたがしないからです。SPI では、マスター (arduino が設定され、SPI.h ライブラリが想定している) が通信を開始します。これは MOSI ラインでデータを送信し、スレーブは MISO ラインで応答します。スレーブに何も言うことがない場合は、0xFF などのダミー バイトを送信して、MISO に何が入ったかを確認します。arduinoでは、SPDR、SPIデータレジスタに格納されると思います。または、spi ライブラリが提供するものを使用します。

しかし、ソースは自律的に動作しているため、ダミー バイトを受け入れません (そして、実際にはその動作が台無しになります)。

SPIスレーブデバイスにデータを送信できない場合、実際にはSPIが実装されておらず、arduino SPIライブラリは役に立ちません。独自のソリューションをハックする必要があります。SPI 標準は実際にはかなり緩く、あらゆる種類の人々が独自の方法でそれを行っています。これは非常に迷惑です。デバイスが SS ラインを使用してクロック同期を開始するのを見てきました。つまり、スレーブを常にオンにするために、単にグランドに接続することはできません。

ただし、書き留める前に、ダミーバイトを受け入れない理由を調査することをお勧めします。MOSIとMISOを組み合わせて全二重から半二重に変える「3線式」SPIを使用している可能性があり、すべてを踏みにじらないようにタイミングを正しくする必要があります。

SPI の核心に入ると、オシロスコープは、実際に何が起こったのか、何が起こるべきだったのかを確認するのに驚くほど機能します。

于 2013-10-04T15:22:11.627 に答える
0

私が間違っていなければ、SPI バスをマスターとして使用することは、着信バイトを逆方向に読み取りながら、ダミー バイトをスレーブにシフトするようなものです。

  • embedded24.netのWindows用USB HIDホストドライバー
于 2011-03-18T11:50:36.080 に答える