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

I²C(Inter-Integrated Circuit)は、同じPCB上のIC間の通信、つまり短距離通信用にPhilips(現在のNXP)が発明したマルチドロップシリアルバスです。

1
I2Cのスルーレートとは何ですか?
ドキュメントのセクション2.4で説明されているように、C18コンパイラの組み込み関数を使用して、PIC18でI 2 Cを構成しています。 void OpenI2C2( unsigned char sync_mode, unsigned char slew ); どうすればよいかわかりませんslew。で定義されている2つのオプションから選択できますi2c.h。 SLEW_OFF:100 kHzモードではスルーレートが無効 SLEW_ON:スルーレートは400 kHzモードで有効 257ページのレジスタ15-1 のデータシートでは、2つのオプションについてもう少し詳しく説明しています。 1 =標準速度モード(100 kHzおよび1 MHz)のスルーレート制御が無効 0 =高速モード(400 kHz)のスルーレート制御が有効 私にはわかりませんが、いくつか質問があります。 スルーレートとは何ですか? 私にとって、2つのオプションは意味がありません-400kHzのスルーレートを無効にし、100kHzで有効にしたい場合はどうなりますか?どうしてこれなの? いつSLEW_OFF、いつを選択すればよいSLEW_ONですか?
10 pic  c  i2c  software  c18 

2
I2Cプルアップ抵抗の計算
このI2C LCDディスプレイをATxmega16A4Uマイクロコントローラーで駆動しようとしています。 どちらのデバイスも、最大400 kHzのI2Cクロック周波数で動作するようにリストされています。2つのデバイスは、I2Cバス上の唯一のデバイスです。 ただし、プルアップ抵抗の境界の計算を行うと、かなり奇妙な値が得られます。 I2C最小プルアップ抵抗値の計算: RM I nは= Vc c − 0.43 m A= 966.7 ΩRメートル私ん=Vcc−0.43メートルあ=966.7Ω\begin{equation} R_{min} = \frac{Vcc - 0.4}{3mA} = 966.7 \Omega \end{equation} 92ページのuCデータシートを見ると、10pFの最大ピン入力容量がリストされています。 ただし、LCDの場合、8ページにCapacitive load represent by each bus lineCb というラベルの付いたものがあり、400pFの最大値でリストされています。この値を10pFのuC入力容量に追加する必要があると想定していますが、これは非常に高く見え、計算が不安定になります。 たとえば、400kHzクロックの最大プルアップ抵抗値を計算しようとすると、次のようになります。 Rmは、Xが= 300 n s10 p F+ 400 p F= 731.7 ΩRメートルaバツ=300んs10pF+400pF=731.7Ω\begin{equation} R_{max} = \frac{300ns}{10pF …
10 i2c  pullup 

4
割り込み負荷が大きい場合のI2C読み取り/書き込み障害
私のシステムでは、I2Cを使用していますが、(他のソースからの)割り込み負荷が大きいと、I2C通信が簡単に中断されます。これはI2Cの予想される動作ですか?割り込みの負荷にもかかわらず、私は期待していましたが、I2Cは正確にタイムクリティカルなインターフェイスではなく、クロックがデータで提供されるため、それでも問題ありません。 更新: プロセッサはSTM32です。割り込みはADCが原因です。読み取りイベント中に割り込みを無効にできないため、i2c通信をより安定させることができる解決策を見つける必要があります。STM32はマスターで、スレーブは別のデバイス(加速度計)です。 Update2: ロジックアナライザーをクロックに小さなフライングケーブルで接続すると、問題が解決します。興味深いことに、割り込みの負荷はなく、読み取りと書き込みはうまく機能します。割り込みの負荷がある場合は機能しません。ただし、プローブをクロックに接続すると、割り込み負荷でも読み取りと書き込みが機能します。容量の問題がどこかにあると思います。
10 i2c 

2
宇宙機アビオニクスにおける冗長I2Cの使用
私は最近、JPL x2000アビオニクス開発プロジェクトに関するこのレポートを読みました。このプロジェクトは、コストと電力を削減するために、商用シリコンを使用してよりモジュール式のアビオニクスプラットフォームを開発しました。彼らは、宇宙船のすべての電子機器をリンクする2つの冗長プロトコルのアーキテクチャを選択しました。大容量データには高速1394バスが使用され、低帯域幅制御にはI2Cバス(100kHz)が使用されます。これはマルチマスターバスとして構成され、すべてのノードが相互に通信できます。 私は複数のセンサーにI2Cを使用していませんが、私が理解していることから、深刻な距離制限があることがわかります。私は宇宙船の中で、かなり長いワイヤーハーネスがあるかもしれません。 2つの冗長I2Cバスがあることに加えて、各デバイスには、バスとこことここに描かれているメインチップ間の分離を提供するカスタムASICがあります。このチップはおそらく何らかの調整を提供していますか? 大型車両内の通信に1つのPCB内の通信用に設計されたプロトコルを使用することを選択した理由を誰かが説明できますか? たぶん、明確な答えは1つではないことはわかっていますが、そのような選択にどのような要因があるかについて聞きたいと思います。
10 i2c  protocol 

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

5
I2C EEPROMビットバンギング:正常に書き込みますが、最初のビットが設定されていない場合のみ
現在、ビットバンギングを使用してSDAおよびSCLラインを駆動するI2C EEPROMプロジェクトに取り組んでいます。 私の読み取り機能は正常に動作しますが、先頭に「1」が付いたバイトを書き込むときはいつでも、常にFFを読み取ります。バイトが以前に何か他のものでプログラムされていても。先頭の「0」は完璧です。これは私の読み取りルーチンではありません。スコープで確認できるように、FFを返します。 これがなぜであるかについての提案を探しています。問題を引き起こす可能性のある明らかなミスはありますか?[コードを投稿できません-会社の機密情報... :(] 私が見るすべての波形は、仕様を正確に満たしています。EEPROMを分離しています。私のプルアップは2.2kなので、仕様の範囲内です。このプロトタイプでは、約500 Hzでクロッキングしています。チップは各バイトにACKを送信しているため、それらを認識します。しかし、それはうまくいきません... Microchip 24LC256を使用しています。 1バイトの簡略化された書き込みアルゴリズム: wait SDA low SCL low wait for each bit if bit is set: SDA high if bit is unset: SDA low wait SCL high wait wait SCL low wait wait SDA high SCL high wait wait check ACK status SDA …
9 i2c  eeprom 

4
この通信はI²Cですか?
2つのデバイス間の通信をデコードする必要がありますが、これらのデバイスに関する情報がありません。私が知っているのは、4本のワイヤー(GND、VCCおよび2本の通信ワイヤー)が必要であることだけです。I²C通信だと思います。 オシロスコープのデコードツールでデコードしようとしていますが、よくわかりません。波形を目視確認したところ、I²C通信の要素が適切に特定できません。 波形を見て、私は以下の仮定をしました、そしておそらく誰かが助けることができます。これらは私の仮定でした: すべては、クロックが青信号であり、データが赤信号であると信じることにつながります。 アイドル状態がハイレベルではないため、クロックが反転しているようです。 データ信号も反転しているかどうかはわかりませんが、反転しているようです。 私の仮定は正しいですか? 前の図では、丸で示された数字5の数字で、信号の一部があります。スタート、ACK、およびストップビットを識別できません。誰かが図を見ただけでこれらの要素を識別できますか? [編集]一部の人々は、通信しているデバイスについて私に尋ねました。コミュニケーションは車の鍵と私が言うことのできない道具との間のものですが、私はそれに対してリバースエンジニアリングをしようとしています。

1
I2Cは1Mohmでプローブまたはロードされた場合にのみ機能します
msp430fr5847(マスター)とI2Cチップが不明なスレーブセンサー(産業用センサーの一部)の間の通信をトラブルシューティングしようとしています データがすべてゼロで返されるセンサーの新しいバッチで問題が発生していますが、Saleae logic pro(2Mohm、10pf)、またはオシロスコープ(10Mohm、50pf)でトラブルシューティングしようとすると、システムはプローブ時に完全に機能しますSDAピン。 さらにトラブルシューティングを行うと、SDAとグランドの間に1Mオームの抵抗を追加しても回路は正しく機能しますが、10pfまたは100pfのコンデンサを追加しただけでは機能しません。 3.3vレールに4.7kのプルアップ抵抗を使用しています。 この問題の原因となるもの、および意図せずに問題を修正せずにトラブルシューティングを行うために実行できること。 編集:19/07/2017これが私の信号のクイックスコープトレースです。 SDAをプローブするだけでボードが機能し、SCLをプローブするか、または割り込みラインがボードを適切に動作させないことについて、私が言及するのを忘れていました。 編集:21/07/2017 プロットが厚くなり、別のオシロスコープを接続しても回路が正しく機能しないように見え、唯一の違いはACKが送信されていないことです。 上の図では、回路が正しく動作していない場合の青と緑のトレースがSCLとSDAです。黄色とピンクのトレースは、SaleaeロジックもSDAピンとグラウンドに接続したときのものですが、USBを接続していません(グラウンドループを回避しようとしている)。 センサーにもう少し背景を追加するのは、メーカーから購入した工業用圧力センサーです。私たちは以前に、これらのPCBをセンサーの最初のバッチで設計およびテストしました。最近、新しいバッチを受け取り、これらの問題が発生しています。私は、PDFデータシート、内部センサーがZSC31014または類似を使用していること(データシートからユニークな探して文章をグーグル後)私は強く容疑者捜査のビットを行っているとHERE 編集:2017年7月26日 したがって、この問題を解決する最後の記事として、SamGibsonの詳細な回答に従って、アドレスの上位ビットを設定して、開始ビットの最後のグリッチをマスクするという修正を実装しました。 これは主に期待通りにデータを処理することで機能しましたが、書き込み後の最初の読み取りコマンドで(i2cビットのグループの正しい用語である場合)、スレーブは1ビット早く(書き込みビットの位置)。スレーブがSDAラインと直列に小さな(47オーム)抵抗を追加することでラインをプルダウンしていることがわかります。 私は通常、これを新しい質問として開始しますが、上記のトラブルシューティングで効果がなかった同じスコープをアタッチすると、この問題は解消されるようです。スコーププローブをアタッチしても、これは実際には境界線の問題のようです。スコープに接続しなくても問題は解決されるので、容量の問題だと思います。 スコープが接続されていない問題のプロット スコーププローブが接続されているが、接続されていない問題のプロット。スレーブがACKビットではなく書き込みビットをプルダウンすると、電圧がわずかに高くなります。

2
MCP3424、チャネルを並行して読み取る方法は?
この質問について 私は電子工学の経歴を持っていません。これは、I2Cを介した通信とレジスタへの書き込みに関する最初の課題の1つなので、私の側からあまり多くの知識を推測しないでください。Arduinoをプログラミングしています。 特定の電子部品/チップについて尋ねるとき、私は人々が私に正しい答えを与えるために実験/テストを行うことができないと思います。また、人々がこのコンポーネントを知らないことも期待しています。したがって、私はこの質問に多くの情報を追加しようとします。 さらに情報が必要な場合はお知らせください。 コンポーネントには4つのADCがあります 4チャネルコンポーネントMCP3424(データシート)を使用しています。2つのパッケージで提供されます。MCP3422またはMCP3423 2チャネルバージョンではなく、MCP3424 E / SL、4チャネルSOICバージョンを使用しています。 ADCは4つあると思います。RS-Onlineでは、E / SLバージョンには4つのADC(ダイレクトリンク)があるようですが、E / STには1つ(ダイレクトリンク)しかないようです。 これは、複数のチャネルで同時にサンプリングできることを意味しているに違いないと思います。コンポーネントに複数のADCを配置する他の理由はありません。 私は正しいですか? I2Cを介した通信 通信は、1つの構成バイトを送信してから、サンプリングが終了するのを待ち、結果を読み取ります。 構成バイトのフォーマット 興味深いものは次のとおりです。 左からビット3、1から数えて:連続サンプリング 左からビット1と2、1から数えて:アドレス 構成バイトの詳細については、18ページのデータシートを参照してください。 読み取り結果のフォーマット 私の例では、18ビットの解像度(ビット5および6を1に設定)のみを使用します。リードバックの結果は4バイトになります。最初の3つは値を含み、4番目は構成バイトを含みます。 ただし、左端のビット!RDYは、値が「新しい」かどうか、つまり最後の読み取り以降の新しい読み取りかどうかを示します。初めて1つの結果を読み取る場合、値は0であり、ADCが新しいサンプル値で準備ができるまで、後続の結果は1です。 並行してサンプリングせずに使用する方法 私はこれを行う方法を完全によく知っています。そして、私がオンラインで見つけたすべての例、これも簡単です。構成バイトをコンポーネントに書き込んでから、値を読み取るだけです。 各チャネルを自動的に誤ってサンプリングするように設定し、チャネルを並行して読み取る方法 疑似コードは次のようになります setup(): start sampling channel 1, 18bit, 0gain, continuously start sampling channel 2, 18bit, 0gain, continuously start sampling channel 3, …
9 arduino  adc  i2c 

2
PIC12F675 GP4が機能しない
プロジェクトにPIC12F675を使用していますが、1つの点を除いてすべて正常に動作します。GP4はデジタルIOとして機能しません。設定とコードをよく見てきましたが、何も見つかりませんでした。 構成: #pragma config FOSC = INTRCCLK #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config BOREN = ON #pragma config CP = OFF #pragma config CPD = OFF コード: #include <xc.h> #include <math.h> #include "config.h" #define _XTAL_FREQ 4000000 void delay(unsigned int …
9 pic  c  embedded  programming  audio  oscillator  spark  dc-dc-converter  boost  charge-pump  eagle  analog  battery-charging  failure  humidity  hard-drive  power-supply  battery-charging  charger  solar-energy  solar-charge-controller  pcb  eagle  arduino  voltage  power-supply  usb  charger  power-delivery  resistors  led-strip  series  usb  bootloader  transceiver  digital-logic  integrated-circuit  ram  transistors  led  raspberry-pi  driver  altium  usb  transceiver  piezoelectricity  adc  psoc  arduino  analog  pwm  raspberry-pi  converter  transformer  switch-mode-power-supply  power-electronics  dc-dc-converter  phase-shift  analog  comparator  phototransistor  safety  grounding  current  circuit-protection  rcd  batteries  current  battery-operated  power-consumption  power-electronics  bridge-rectifier  full-bridge  ethernet  resistance  mosfet  ltspice  mosfet-driver  ftdi  synchronous  fifo  microcontroller  avr  atmega  atmega328p  verilog  error  modelsim  power-supply  solar-cell  usb-pd  i2c  uart 

6
I2C信号と長距離(10mケーブル)での電力
いくつかの読み取り/テストの後、FTP CAT5銅ツイストペアケーブルでI2Cを使用して2つのデバイス間で安定した通信を行うことができました。 緑線-SCL 白/緑ワイヤー-GND ブルーワイヤー-SDA 白/青線-GND GNDはケーブルの一方の端でのみ接続され、I2Cバスクロックは10Khzで、VCCに10Komプルアップ抵抗を使用しました それはうまく機能し、安定しています。他の2ペアのケーブルを電源(+ 12V)に使用することを決定したとき、それは機能しなくなりました。一方のペアの+ 12Vをもう一方のペアのGNDでテストしました。同じペアで+ 12V / GNDもテストしました。同じ結果、動作しなくなりました。I2Cバス全体が機能しなくなり、他のデバイスも接続されました。 同じケーブルを使用できるのか、それとも最も安全な選択肢-電源用の別のケーブルを使用できるのか。
9 power  i2c 

2
I2Cバス上のMITM
I2Cバスで選択したスレーブ応答を変更できるモジュールを設計しようとしています。これは元のバス構成です(わかりやすくするためにプルアップと電源接続は示していません)。 このバスには2つのデバイスしかなく、100kHzしかありません。コントローラーMCU(I2Cマスター)およびRFIDカードリーダー(I2Cスレーブ)NXP PN512。コントローラーのファームウェアを変更したり、I2Cバスのトランザクションを変更したりできません。良い点は、コントローラーが2種類のトランザクションのみを送信することです。 Master (Write Register) - <s><address+W><register number><data><p> Master (Read Register) - <s><address+W><register number><p><s><address+R><data><p> 私がしたいことは、マスターレジスタの読み取り中に選択したデータバイトを自分のバイトで置き換えることです。MCUが読み取りたいレジスタ番号をUART(921.6kbaud)経由でPCに送信できます。C / C ++またはPythonで処理できます。値を置き換える必要のあるレジスター番号を受け取ったら、偽のバイトをデバイスに送り返すことができます。コントローラーに送り返して、元のカードの応答を置き換えます。 最初に、I2Cバスを2つのバスに分割しました。 Arduino Nanoを試し、その後クロックストレッチを使用してCPLDを試しました。MCUコントローラーに面したATmega328ハードウェアI2Cは、前の停止サイクルの5usより前に開始シーケンスが生成されることがあったため、追いつくことができませんでした。したがって、時々、AVRは読み取りトランザクションをNAKしていました。CPLDは、バスストレッチがMCUで無効になっていることが判明した停止/開始速度を処理できました。 マスターレジスタの読み取りは、その後に読み取りが続くと確信しているので、1バイトの書き込みを検出することで、読み取りを「予測」できるというアイデアを思いつきました。次のリードサイクルアドレス書き込み中に、スレーブからバイトを取り込むのに十分な時間があったようです。それはうまくいきませんでした。バストランザクションは最初(約最初の5秒間)は正常に見えましたが、コントローラーはバス上のすべての通信を停止し、タグの読み取りと直接通信していないことを検出したかのように処理していました。 カードリーダーは、マスターへの割り込みを生成することもできます。IRQは、タイマーまたはイベントベースです。この問題は、バスに本来導入されていた遅延が原因であると考えています。私は間違っていたかもしれませんが、別の「ゼロ遅延」設計を思いつきました。 私が考えているのは、SDAラインを切断し、SCLラインをマスターとスレーブの間に接続したままにすることだけです。このようにして、データラインのバイトをどちらの方向でも置き換えることができます。バスサイクルに基づいてSDAラインの方向を制御する必要があるため、設計がより複雑であることがわかりました。バストランザクションを処理し、16進バイトをUART経由でコンピューターに送信するVHDLコードを次に示します。コンピューターからのバイトの受信はまだ実装されていません。 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity I2C_Sniffer is port ( clk : in std_logic; scl_master : in std_logic; sda_master : inout std_logic; sda_slave : …

2
長距離でI2C / TWIを行うための最良の方法
長距離(30〜40メートル)でI²C/ I2C / TWIを実行する必要があるプロジェクトがあります。私が想定しているような長いラインの静電容量の影響を軽減するために、クロックレートを500 Hz前後のどこかに下げることを提案している人を見かけましたか?私が使用しているコンポーネントには、少なくとも標準の100 kHzクロックレートが必要です。さらに調査を行ったところ、別の質問への回答の中から、P82B96レベルシフターを使用することを提案しました。データシート:彼らはさらに100メートルライン上でそれらを使用する例を与える 私が通ってレベルシフトする別の方法に遭遇してきたadafruitからブレークアウトボードいずれかの(2つだけプルアップ抵抗を有するMOSFET(bss138)であり、両側/電圧)。彼らはからアイデアを得ましたNXP(AN10441)のアプリケーションノート、およびそこにある2つのチャネルは次のように使用できます。 今私は疑問に思います:どの解決策が最善ですか?または私が見落としているものはありますか?また、良好な接続を確保するには5Vで十分ですか?12Vのようなさらに高い電圧を使用する利点はありますか?
9 i2c  bus 

1
PCI Express 1XでのみSMBusを利用できますか?
PCI ExpressのWikipediaページによると、 PCI-e 1Xスロットには2つのレーン(18ピン)に18ピンの位置があり、5〜9の位置はSMBusとJTAGを表します。 µCをSMBus(基本的にはI²C)デバイスとして接続したいのですが、追加のメッセージプロトコル要件を理解していますが、どのピンに接続するつもりなのか正確にはわかりません。 SMCLK、SMDAT、TCK、TDI、TMS、TRST、TDO、WAKE、PERST、PRSNT1、PRSTN2のピンに加えて、PCI固有の要素のピンが表示されます。PRSNTピンを短絡する必要があること、およびデバイスに+ 12Vと+ 3.3Vの電源があることは知っていますが、残りは少し混乱します。通常、I²CではSDAとSCLを考えていますが、ここに表示されているピンは、SPIに期待する種類のインターフェイスに似ており、個別の入力および出力データピンとデバイス選択を備えています。これはJTAGビットですか、SMCLK / SMDATだけを見ているのですか? だから、私の質問は2つあります: どのピンを気にする必要がありますか? デバイスを登録するには、PRSNT1 / PRSNT2ピンをジャンパーする以外に何かする必要がありますか?つまり、SMBusインターフェース以外はすべて無視しても安全ですか?実際、これらのピンでカードを存在するものとしてマークする必要がありますか、それともPCIバスを利用するデバイスのためだけですか? これがかなり些細な質問のように思える場合はお詫びします-私はハードウェアよりもソフトウェアの方がはるかに熟達しています。
9 i2c  pcie  smbus 

1
部品識別用I2C IC
ホストシステムが特定の機械モジュールCが接続されていることを識別する方法を探しています。このメカニカルモジュールには電子機器を含める必要はありませんが、ホストの互換性の理由により(他のメカニカルコンポーネントA、Bとの関係で)、それとホストの間にI2Cバスが確立されています(必要ない場合でも) )。 ホストがバスをプローブしてICを探し、部品が接続されているかどうかを確認できるように、このバスの機械部品側にICを配置することを考えていました。 基本的に、アドレスがプローブされたときにACKを送信する(それを構成するための)入力ピンのみを備えたI2C ICだけを探しています。 このようなICは存在しますか?または、構成可能なアドレスピンにたくさんのその他の通常のIC(たとえば、gpioエキスパンダー)を使用する必要がありますか?

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