タグ付けされた質問 「spi」

SPIは、クロック(SCLK)、データ入力(MISO)、およびデータ出力(MOSI)を備えた低レベル3または4線シリアルバスインターフェイスです。4番目のワイヤはスレーブ選択で、バス上のデバイスを一意に選択します。この信号は通常アクティブローです。スレーブ選択、チップ選択、CS#、SS#は通常、同じ機能を表します。ただし、必ずデータシートを確認してください。SPIバスは、正式な仕様を欠いている*デファクト*標準です。


1
V-USBはATmega328pのビルトインSPIをどのようにねじ込むことができますか?
ATmega328pを使用してキーボードとして表示されるV-USBプロジェクトに取り組んでいます。USB部分はうまく機能しています(最初のV-USBプロジェクトではありません)が、でV-USBスタックを開始した後usbInit()、SDカードライブラリへのすべての呼び出しが失敗します。以前usbInit()に同じ関数を呼び出した場合、すべてが完全に機能します。 Diavolinoと呼ばれるArduinoクローンを使用していますが、Arduino / wiringフレームワークは使用していません。USBをデジタルI / O 2および3に接続し、SDカードを10-13(内蔵SPIライン)に接続しています。 SDカードライブラリを調べたところ、以外の割り込みまたはレジスタを使用してその兆候は見つかりませんでしたSPxx。私もgrepV-USBコードを使いましたが、SPxxレジスターにさえ触れません。 問題の最初の兆候は、SDカードにアクセスすることになっているときにデバイスが切断されたときでした。それから私は置きますusbPoll()wdt_reset()、すべてのSDカード処理ループて呼び出しますが、書き込みの場合、カードは最後の2バイト(CRC-16)を送信した後、カードからの確認応答を永久に待機します。 私が使用するSDカードライブラリはsd_raw、Roland Riegelによるものです。
14 avr  atmega  spi  usb-device  sd 


4
Optoisolate 2MHz SPI通信
2つのチップ間のSPI通信を分離する必要があります。 通信のボトルネックはスレーブにあり、明らかに2MHzSPIクロック周波数まで処理できます。 私の考えは、フォトカプラを使用してこの分離を行うことです。この最初の試みでは、4n35を使用しました。動作していなかったので、データシートを見ると、チップが信号10 usを上げたり10 us下げたりすることがわかりました(最悪の場合)。これはその使用を無意味にします。 誰かが私にできるフォトカプラを提案できますか? この目的には十分に高速である(2MHzですが、1MHzも許容されます) 簡単に購入でき、高価ではない これらの要件を満たすオプトカプラーをインターネットで検索しましたが、最も推奨できるオプトカプラーは見つかりませんでした。 実用的な場合、別の方法でコミュニケーションを分離する方法についての提案を受け入れています。

1
SPIバス終端およびプルアップ抵抗
マイクロコントローラー(ATMELシリーズ)は、SPIプロトコルを使用してスレーブデバイスと通信する必要があります。ハードウェアを設計しています。最大SPIバス速度は1 MHzです。マスターとスレーブ間の距離は50mm未満です。 Q1)このSPI速度(1MHz)での反射を回避するために、SPIバスに直列に終端を追加する必要がありますか?もしそうなら、その値をどのように計算し、どこに終端抵抗を配置すればよいですか?マスターの近くまたはスレーブの近くですか? Q2)他のリファレンスデザインを見てきましたが、すべてのSPI信号にプルアップ抵抗を使用する場合もあれば、一部の信号(CSまたはMISO)のみに使用する場合と使用しない場合があります。SPI信号にはプルアップ抵抗が必要ですか(SPIポートはプッシュプル構成のため)?ピンがフローティングになる唯一の時間は、マイクロコントローラーが電源を取得してピンを出力として設定できるようになるまでです。それでは、プルアップ抵抗を使用する必要がありますか、またはデザインでプルアップ抵抗を使用しない場合はどうなりますか?

1
SPIトランザクションタイムアウトLinuxデバイスドライバー
私は過去3日間、ある時点で行き詰まっています。 msm8960 qualcommチップセットを搭載したeinkデバイスドライバーに取り組んでいます。 Scenario: ファイル:kernel / arch / arm / mach-msm / devices-8960.c とuse of spidm_channels" and "spidm_crci"対応するエントリを確認できません。(msm8960 pro)(いくつかの参照コードからコピー)対応する値start and endが正しいかどうかを確認する方法?msmのデータシートはありますが、参照が見つかりません。 ファイルに新しいgsbiリソースを作成するために、次のコードを追加しました。 static struct resource resources_qup_spi_gsbi9[] = { { .name = "spi_base", .start = MSM_GSBI9_QUP_PHYS, .end = MSM_GSBI9_QUP_PHYS + SZ_4K - 1, .flags = IORESOURCE_MEM, }, { .name = "gsbi_base", …
11 spi  driver  linux 

1
BMA180加速度計。I2CとSPIの間でピンを共有する方法を教えてください。
BMA180加速度計は、SPIスレーブまたはI 2 Cスレーブのいずれかです。両方のバスのピンは共有されています。 SPI mode I2C mode --------------------------------------------------- SDI input SDA bidirectional (!) SDO output ADDR address bit, input SCLK input SCL input CSB chip select, input I2C mode select, input データシート(第8章を参照)によれば、バス間の選択はCSBピンを介して行われます。CSBがローの場合、デバイスはSPIスレーブです。CSBがハイの場合、デバイスはI 2 Cスレーブです。 これが私が心配している故障モードです。BMA180がSPIバス上にあるとします。同じバス上に独自のチップセレクトを持つ別のデバイスもあります。SPIバスマスターが他のデバイスと通信しているとします。BMA180のCSBが高いため、I 2 Cを有効にする必要があります。BMA180は、SCL(SPIのSCLK)上のクロックエッジとSDA(SPIのMOSI)上のビットが飛んでいるのを見ます。これらのビットの一部が有効なI 2 C読み取りトランザクションの開始のようにBMA180に見え、BMA180がデータの出力を開始し、既存のSPIトランザクションを破壊する場合はどうなりますか?BMA180の設計はそれをどのように防止しますか? これは好奇心の問題です。私はこれらの問題をまだ実験していません。SPIでBMA180を使用します。 提案、洞察、参照は本当にありがたいです! 更新。データシートに 何かが見つかりました(7.7.11を参照)。SPI経由でBMA180と通信する場合は、ビットを設定してI 2 Cを無効にすることをお勧めしdis_i2cます。 SPIインターフェイスを使用する場合、誤動作を避けるためにdis_i2cを1に設定することを強くお勧めします。 BMA180はEEPROMを内蔵しています。レジスターの内容はEEPROMに保存され、パワーアップシーケンスで自動的にロードされます。したがって、BMA180にI 2 Cを完全かつ常に無視させることができます。 更新。 …
11 spi  i2c 

4
プログラム可能な可変インダクタ
私は現在、このような可変インダクターを使用しています。私は、デジタルポテンショメーターのような、プログラムで制御された調整を行う方法を見つけようとしています。そのようなデバイスは存在しますか、またはこれを達成するための他の良い方法はありますか?これは、共振を不完全に製造されたデバイスに一致させるために使用されているため、固定値にすることはできません。 編集#1、回路図を追加

4
波形がトリガーより先に開始するのはなぜですか?
エントリーレベルのデジタルストレージオシロスコープを使用してSPIバスクロックとデータを分析する方法を学習しています。私はBK Precision 2542Bを使用して、ARMマイクロコントローラーを利用するNetduinoからのクロックおよびMOSIラインの出力を測定しています。 この画像では、チャネル1(黄色)にクロックがあり、チャネル2(青)にMOSIがあります。トリガは、1.44Vの立ち上がりエッジトリガを使用して、チャネル1を使用するように設定されています。クロック方形波の振幅は約3.3Vです。 トリガーインジケーターはディスプレイの水平方向の中央にありますが、左側にパルスがあります。クロックの最初のパルスがトリガーの場所で始まると思っていました。デジタルストレージオシロスコープを使用すると、プリトリガーイベントとポストトリガーイベントを確認できることは知っていますが、最初のパルスが思ったとおりにならない理由がわかりません。 トリガーの理解が間違っていますか、それとも奇妙なスコープを使用していますか? 編集:パルス列は300μs幅で、2ms間隔で繰り返され、トリガーホールドオフ値は500μsです。ホールドオフを調整しても、1つのパルスがトリガーに先行するという事実は変わりません。 編集2: アナログオシロスコープの使用など、信号をさらに分析した結果、パルス幅が300 µsではなく350 µsになることがあると判断したと思います。これは、フレームを生成するコードの不具合の可能性があります。 ホールドオフ時間が352μsになると期待どおりの結果が得られることを発見しましたが、トリガーの前に時々余分なパルスが発生します。 いくつかのフレームを記録して、パルスの不在と存在の両方を示しました。 パルスの持続時間を確認するのに十分な長さの水平タイムベースを設定した場合、それらの間には常に少なくとも1.7ミリ秒の間隔があるように見えます。 したがって、リーディングパルスはソースからの「グリッチ」の結果であると思いますが、トリガーホールドオフ>360μsがどのようにして予期しないリーディングパルスを生成するかはまだわかりません。

1
他のスレーブSPIデバイスがある場合、SPI経由でmicroSDカードにアクセスする際に問題はありますか?
SPIポートが1つだけのCPUを備えたデザインに取り組んでいます。このポートには複数のスレーブが接続されており、そのうちの1つはmicroSDカードです。 これは、SDカードがSPIマスターの唯一のスレーブとして動作するように設計されているというエンジニアからのレポートです。 他の誰かが同じバス上の他のSPIスレーブと一緒にmicroSDを使用できましたか?おそらく、このレポートは特定の問題のあるminiSDカードに基づいているだけでしょうか? 安全のために、miniSDカードにつながるスレーブ選択ラインでSPI CLKラインをゲーティングすることをお勧めしますか?
10 spi  sd  microsd 

2
クワッドSPI PCBレイアウト
STM32 MCUでQuad SPI NORフラッシュメモリMT25QL256ABA1EW9-0SITのレイアウトを改善しようとしています。私の問題は、メモリチップのピン配置が非常に不便であることです。信号が隣り合うようにMCU側でピンを交換することに成功しましたが、それでも難しいです。Micron Quad spiレイアウトガイドに従って、私はなんとかしました: 下にあるグランドプレーンを分割しないでください(これは2層PCBです)。 クロック信号を短くし、おそらく最小の曲げで、 信号ルーティングにVIASを使用しない しかし、私はどうにかしてうまくいきませんでした: ストリップラインを計算して、適切なインピーダンスを維持します(実際にはスペースや信号は多くありません) 信号の長さを同じに保ちます。 ここにレイアウトがあります: 画像を拡大すると、メモリチップパッドのネット名を確認できます。このデザインは最大80 Mhzのクロック転送に十分であるとあなたの意見で尋ねたいと思います。比較のために、チップの内側にあるピンクの形状は18 x 8 mmです。GNDポリゴンは、見やすくするために棚に置かれています。何卒よろしくお願いいたします。
10 pcb  stm32  spi  layout  high-speed 

1
SPIバス終了の問題
私はOMAP Linux SPIマスターが6つのSPIスレーブペリフェラル(5x A / Dコンバーターと単一の磁力計)と相互作用するプロジェクトに取り組んでいます。 SPIクロック周波数を設定でき、50 kHz、100 kHz、1 MHzで実験しました。 SPIマスターとすべての周辺機器からの長さを示す配線/ボード図を添付しました。私の実験の場合、マスターから離れたSPIバス長(すべてのワイヤー長)は約970mmです。 私が見つけた問題は、バスに他の周辺機器を追加すると、1つの周辺機器との通信が失敗することです。バスの反対側にある磁力計への通信が通過しても、磁力計ハーネススタブが取り外されてからA / Dセクションに戻るまで、反対側のA / Dコンバーターとの通信は失敗します。 ここでいくつか読んだことがあります: SPIバス終了の考慮事項 とここ: 短距離のボード間通信 RC LPFを任意の駆動ノードの近くに配置することをお勧めします。そのため、マスター側のSCLKとMOSI、および各6x MISO / SOMI信号。47pF / 27R RCネットワークを使用してUSBに対して同様のアプローチが行われるのを見てきました。私の意図は、鋭いエッジの高速〜100nsecのエッジ遷移を減らすために私の回路でこれを試すことです。 これは、RC LPFを追加するためにここで実行している正しい手順ですか?これは本当に揺れているようです、もっと良い練習はありますか?TIのアプリノートで、バス距離を長くするためのSPIの拡張について説明しましたが、これは適切な解決策ですか、それとも高速エッジ遷移による高周波高調波の問題の1つですか? http://www.ti.com/lit/an/slyt441/slyt441.pdf ありがとう、ニック

1
SPIモードのSDカードはチップセレクト/スレーブセレクトを尊重しますか?アプリケーションでリセットされているようです
16ビットSPIを介してFPGAに接続されているマイクロコントローラー(NXP LPC1343)があるアプリケーションがあります。同じSPIポート(MISO / MOSI)を使用しているが、CS / SSピンが異なるSDカードもあります(どちらもSPI仕様に従ってアクティブLOWです)。FAT32を使用して、FPGAからSDカードのファイルにデータを書き込む必要があります。これがマイクロコントローラーの仕事です。マイクロコントローラーはFatFSを実行しています。これは、自分で確実に動作するようになっています。 マイクロコントローラーには少量のRAMしかないため、一度にバッファーできるのは少量のデータだけです。したがって、マイクロはFPGAからバッファーを読み取り、SPIモードを8ビットに変更してから、そのデータをFATFSに書き込む必要があります。SDカードをSPIモードに構成するには、SPIバスが400 kHzで動作しているときにコマンドを送信する必要があり、ある程度の待機が発生することを思い出してください。したがって、初期化を1回だけ実行したいと思います。 ただし、SDカードでCSをHighに保持しながらFPGAでトランザクションを実行すると、SDカードが奇妙な状態になり、初期化をやり直す必要があるようです。もちろん、これは望ましくありません。4kB程度のデータを書き込むために、初期化には数ミリ秒かかる可能性があるためです(これも、私のマイクロの小さなRAM機能によって制限されます)。数メガバイトをできるだけ早く書き込む必要があるため、これによりパフォーマンスが約500 kB / sから100 kB / s未満に低下します。 SDカードは技術的に完全にSPIに準拠していないことは承知していますが、この問題を解決するにはどうすればよいですか?
9 fpga  spi  sd  nxp 

2
モジュールの複数のプルアップ抵抗を処理する方法
数日前に開発したボードに、spi / i2cインターフェイスを含むモジュールを作成することを考えていました。 問題は、メインボードのMCUピンにプルアップ抵抗を含めておらず、モジュールに追加してそれらをより「一般的」にして、すべてのユーザーが追加の抵抗を追加する必要なしにそれらを使用できるようにすることでした。プロトタイプボード。 しかし、私は次の問題に直面しました。追加のモジュールにプルアップ抵抗を追加し、たとえば2つ以上のモジュールを同じバスに接続すると、それらの抵抗が並列に接続されるため、抵抗が低下し、機能が発揮されません。 しかし、プルアップ抵抗をメインボードに追加すると、MCUのこれらのピンは常にアクティブLOWになります。 したがって、主な質問は次のとおりです。 複数のモジュールを同じバスに接続して、それぞれにプルアップ抵抗を備えているが、複数のモジュールがある場合にそれらを並列に接続する方法は?それは可能ですか? または、ここでの最善の解決策は、MCUでプルアップ抵抗を有効にし、それらをモジュールに含めないことですか? ありがとう。

1
ATmega328でのAVRタイマーの高速化
ATmega328でクロックプリスケーラー64で実行すると、不明な理由により、実行中の特定の時間に私のタイマーの1つがスピードアップします。 ATmega328で2つのタイマーを使用して、TLC5940が必要とするクロッキングを生成しています(理由については以下を参照してください。これは質問には重要ではありません)。TIMER0Fast PWM onを使用してクロック信号を生成し、OC0B次のように設定されます。 TCCR0A = 0 |(0<<COM0A1) // Bits 7:6 – COM0A1:0: Compare Match Output A Mode |(0<<COM0A0) // |(1<<COM0B1) // Bits 5:4 – COM0B1:0: Compare Match Output B Mode |(0<<COM0B0) |(1<<WGM01) // Bits 1:0 – WGM01:0: Waveform Generation Mode |(1<<WGM00) ; TCCR0B = 0 |(0<<FOC0A) // Force Output …
9 avr  atmega  spi  timer 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.