問題タブ [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.

0 投票する
2 に答える
2315 参照

arduino - SPI による外部 EEPROM への書き込み

デバイスの動作を構成するために別のデバイスの EEPROM に書き込もうとしており、Arduino Uno でデバイスを制御しています。

このウェブページによると、SCK はピン 13 に接続され、SDA はピン 11 に接続されています。

この例から取ったi2c_eeprom_write_byteとの2 つの関数があります。i2c_eeprom_read_byte

私の問題は、Wire.available()常に 0 を返すことです。これは、スレーブ デバイスがマスター デバイスである Arduino に何も送信していないことを意味します。

スレーブデバイスから読み取るにはどうすればよいですか?

0 投票する
0 に答える
102 参照

java - Java でのローカリゼーション用 SPI

ロケールの SPI パッケージ (サービス プロバイダー インターフェイス) について。このOracle Javaチュートリアルから直接:

これらのメソッドは、最初に Java ランタイム環境が要求されたロケールをサポートしているかどうかを確認します。もしそうなら、彼らはそのサポートを利用します。それ以外の場合、メソッドは、適切なインターフェースのインストール済みプロバイダーの getAvailableLocales() メソッドを呼び出して、要求されたロケールをサポートするプロバイダーを見つけます。

spi インターフェイスを作成し、必要なすべてのメソッドをオーバーライドして実装したら、そのクラスを実行時に表示するために、そのクラスをインストールするにはどうすればよいですか?

前もって感謝します。

0 投票する
0 に答える
230 参照

kernel - ドラゴンボードのSPIクロックの問題

私はドラゴン ボードに取り組んでおり、SPI デバイスをドラゴン ボードの SPI_QUP モジュールに接続する必要があります。QUP モジュールは msm8960 の GSBI1 に接続されています。SPI を正常に実行しており、スコープで適切な波形を取得しています。デフォルトとしてクロックレート10Mでデータを送信することを観察しました.クロックレートを下げようとすると、5M未満に下げることができません.5M未満に下げると、デフォルトレート(10M)でデータの送信が開始されます)。私のスパイ デバイスは、これに比べて非常に遅い速度で動作します (約 3M の最大クロック速度)。5M未満に減らす方法はありますか?

ありがとう。

0 投票する
2 に答える
3244 参照

vhdl - vhdl で spi バスを実装しようとしています

SPI経由でLTC2426 DACと通信しようとしましたが、失敗しました。今、私は助けを求めています。私のコードが機能しない理由を教えてください。CSDAC は正常に動作し、SCLK が生成されて 32 ビットが送信されますが、それでもタイミングが狂った可能性があります。誰かがコードを修正するのを手伝ってくれたら、とても感謝しています。

編集:新しいコード

数ビットを送信すると SCLK が回復するため、MOSI をパルスします。最初の SCLK は、mosi をパルスすると約 1.4 mhz で実行され、4.167 mhz に回復します。

0 投票する
2 に答える
4999 参照

linux - SPI: Linux ドライバー モデル

私は SPI が初めてです。Linux カーネルは、SPI バスとデバイスを宣言し、標準の Linux ドライバー モデルに従ってそれらを管理するための API を提供します。

struct spi_master の説明は、https ://www.kernel.org/doc/htmldocs/device-drivers/API-struct-spi-master.html にあります。

上記のリンクの説明には、「チップが選択されていない限り、これらの共有信号は無視されるため、各デバイスは異なるクロックレートを使用するように構成されている可能性があります」と書かれています。この文をコンテストに入れるために、「デバイス」とは SPI スレーブ デバイスを意味し、「これらの共有信号」とは MOSI、MISO、および SCK 信号を意味すると言わざるを得ません。

実際、構造体 spi_device ( https://www.kernel.org/doc/htmldocs/device-drivers/API-struct-spi-device.html ) には、構造体 spi_master には存在しない max_speed_hz という名前の属性があります。 . したがって、上記のステートメントの最初の部分で理解できます。「各デバイスは、異なるクロック レートを使用するように構成されている可能性があります」。

しかし、第二部はどういう意味ですか?「チップが選択されていない限り、これらの共有信号は無視されるため」とは、異なるレートでスレーブを有効/無効にすることで、異なるクロックレートを使用できるが、一度に1つしか使用できないことを意味しますか?

ご協力ありがとうございました!よろしく、

-- マッテオ

0 投票する
1 に答える
795 参照

linux - Linuxでデータを読み取る前にチップセレクトを手動で制御しますか?

こんにちは、私は 24 個のキーを備えた SPI タッチ デバイスを持っています。読み取りごとに 3 バイトが返され、24 個のキーすべての状態が正確に含まれています。私のハードウェアはカスタムメイドのビーグルボーンのようなデバイスで、spi0 は MISO を MOSI に接続することで独自の書き込みを読み取ることができます。

すべて (配線、ソフトウェア) は、このガイドと完全に一致して動作しています: http://communistcode.co.uk/blog/blogPost.php?blogPostID=1

現在、私のタッチ デバイスは CS アクティブ ハイ デバイスですが、実際の読み取りの前にチップ セレクトをローに駆動し、ハイに戻す必要があります。SPI cs 値を制御できないようです。実際の読み取りフェーズ内で、CS を高くまたは低く指定することによってのみ制御できます。私の知る限り、別の GPIO を使用して CS をエミュレートする必要があります。

質問: cs を自由に制御する方法はありますか? (つまり、コードで直接 0 または 1 を設定しますか?)

0 投票する
1 に答える
559 参照

optimization - SDカードarduinoとの通信

Arduino の sd カードとの通信に問題があります。この構成を行います。Arduino Mega を持っているので、コードは次のとおりです。

私は SD をイーサネット シールド上に持っています。そのため、SD でエラーが発生することもあれば、すべての準備が整っていることもあります。イーサネット ケーブルが接続されているといくつかのエラーが発生しますが、ケーブルが接続されていないときにもエラーが発生するのはこの理由だけではありません。

0 投票する
0 に答える
2204 参照

c - SPI の DMA 割り込み

dsPIC33FJ128GP802 マイクロコントローラ用の SD カード (FatFS を使用) に書き込むプロジェクトを再作成しようとしています。

現在、SPI から日付を収集するために、512 回ループして SPI バッファーにダミー値を書き込む do/while を使用し、SPI フラグを待ってから、次のように SPI 値を読み取ります。

DMA 割り込みを使用してこれを再現しようとしていますが、期待どおりに動作しません。私は 1 つの DMA チャネルを使用しています。SPI は当面 8 ビット モードであるため、DMA はバイト モードであり、「ヌル書き込み」モードでもあり、ピンポンなしで連続します。私のバッファーは 1 つのメンバー配列のみであり、DMA は一致しています。

null書き込みモードから私が理解していることから、DMAは読み取りが実行されるたびにnull値を書き込みます。ただし、CPU による最初の書き込みが実行されるまで DMA は開始されないため、手動/強制の方法で DMA を開始しました。

割り込みが開始され、エラーなしで実行されます。ただし、コードは後でコレクションが正しくないことを示しています。

私の割り込みは、収集したデータ (上記で割り当てられた DMA バッファーに配置されていると想定) を、プログラム全体で使用されるポインターに配置するだけであるという点で単純です。

割り込みが 512 回実行されたら、DMA を停止してフラグをスローします。

私は何が欠けていますか?これは非 DMA 方式とどのように同じではないのですか? SPIの送信完了を待つwhileループ(while(!_SPIRBF);)が無いのが原因でしょうか。残念ながら、null 書き込みモードでは SPI データを自動的に送受信するため、手動で待機することはできません。

また、2 つの DMA チャネル (1 つは書き込み用、もう 1 つは読み取り用) を使用してみましたが、これも機能しませんでした (さらに、後で SD カードに適切に書き込むときに、そのチャネルが必要になります)。

どんな助けでも素晴らしいでしょう!

0 投票する
1 に答える
2483 参照

linux - ioremap() メモリからは 0 しか読み取れません

SPI 経由でデバイスと通信する Linux 用の単純なドライバーを開発しています。request_mem_region と ioremap を使用した後、値を書き込んだ後でも、返されたアドレスから読み取ることができるのはすべて 0 です。オフセット 0 のアドレスは、SPI コントローラー (Xilinx Zynq SoC) の制御レジスターである必要があります。コントロール レジスタは、ブート プロセス中に初期値が設定されます。

コード:

モジュールを挿入したときの出力は次のとおりです
。Driver init complete. アドレス 0xE08C2000 にマッピング
0

助けてくれてありがとう。

0 投票する
2 に答える
2490 参照

c - LPC1788 で SPI を使用してデータを送受信する方法

LPC1788 マイクロコントローラーを使用してプログラムを作成しようとしていますが、SPI プロトコルを使用して UFDC (ユニバーサル周波数からデジタルへのコンバーター) にデータを送受信する必要があります。このデータシートはこちらにあります。私のマイクロコントローラーの SSP コントローラーはマスターとして設定されており、UFDC はおそらくスレーブになります。MOSI ラインを介して情報を送信し、データがオシロスコープに表示されるのを見ることができます。しかし、MISO ラインでデータを受信しようとすると、MOSI に送信したものしか返されません。

これが回路図の写真です。

私が書いたコードの関連部分は以下のとおりです。

これから得られる出力は次のとおりです。

編集:SPIコントローラーで「ループバック有効」を設定して、MOSIがMISOから入力を読み取ったり、その逆を行うことができます。ただし、関連するレジスタを確認したところ、これは無効になっています。