How-To:バス海賊、ユニバーサルシリアルインタフェース

更新:JTAGの新しいファームウェアなど

私たちは常に新しいチップまたはSIMカードをインターフェースにするために常に恍惚としていますが、私たちの熱意は通常プロトタイピングプロセスによって湿られます。どんなチップのインターフェースは通常、回路、書き込みコード、およびプログラマを運搬することを示します。たぶんプロトタイピングPCBさえも。

数年前、私たちは、PCのシリアル端末から多くのチップと話すユニバーサルバスインターフェースである最初の「バス海賊」を構築しました。いくつかの従来のシリアルプロトコルは、I2C、SPI、および非同期シリアルを含む3.3~5ボルトでサポートされています。追加の「RAW」2および3ワイヤライブラリは、ほぼ専有のシリアルプロトコルをインタフェースできます。これが私たちにとってそのような有益なツールであったことを考えると、コードをクリーンアップし、デザインを文書化し、そのようなスペック、回路図、およびソースコードを解放しました。

コンセプトの概要

バス海賊は、複数のICインターフェースプロトコルへのシリアルターミナルブリッジです。コンピュータのシリアル端末にコマンドを入力します。コマンドはPCシリアルポートを介してバス海賊に移動します。バス海賊は適切なプロトコルのマイクロチップに相談し、結果をPCに戻します。

すべてのピンは3.3ボルトを出力しますが、耐性5Voltです。接続チップに電力を供給するために、オンボード3.3Voltと5Voltの電源装置があります。ソフトウェア設定可能なI2Cプルアップ抵抗器はパッケージを完成させます。

シリアル端末インタフェースは、PC、Mac、Linux、Palm Pilots、WinCEデバイスなどのシステムと連携します。 Crapwareは必要ありません。 USBデバイスを検討しましたが、USBはシリアルポートを持つ実質的な携帯端末と互換性がありません。また、5Volt耐性入力を備えた3.3Voltデバイスも望まれていましたが、多くの人気のあるスルーホールUSBマイクロコンントラルは5Voltの部品です(例えば、PIC18FX550)。

バス海賊は現在、高速インターフェース用の3つのハードウェアプロトコルを「話す」、バス操作を容易にするための2つのソフトウェアプロトコルライブラリを持っています。各プロトコルの理論と仕様は、ここでカバーできるものを超えていますが、これらのチュートリアルのいくつかをチェックしてください。

I2C

遅い2ワイヤバス。 WikipediaはI2Cの背景を始めるのに素晴らしい場所です。 i2c-bus.org、ロボットエレクトロニクス、組み込みシステムアカデミー、およびembedded.comは、I2Cチュートリアルを知っています。

スピ

基本3ワイヤバス。ウィキペディアは背景を持っています。 embedded.comは素晴らしいチュートリアルとI2Cとの比較を行いました。

ユニバーサル非同期受信機トランスミッタ(UARTまたはシリアル)

PCシリアルポートプロトコルとしてその外観が最もよく知られているクロックおよびタイミング依存シリアルプロトコル。 Wikipediaは非同期シリアルプロトコルに関する背景を持っています。

生2ワイヤー

これは、I2Cと同様であるがACKビットなしで一般的な2線式プロトコルライブラリです。このモードで利用可能なバス操作を使用して、I2Cと多くの独自の2線式プロトコルを作成できます。このライブラリを使用して、スマートカードやSENSIRION SHT11の温度/湿度センサーなどの非I2C 2ワイヤデバイスで動作します。

生3ワイヤー

これは、SPIと同様の一般的な3つのワイヤプロトコルライブラリですが、ハードウェアモジュールの制約がありません。このライブラリを使用して、Sparkfun Nokia 6100 LCDノックオフのように、8bit互換性のない3-Wireプロトコルを使用するデバイスで動作します。このモードで利用可能なバス操作を使用して、たくさんの3つのワイヤプロトコルを形成できます。

ハードウェア

フルサイズのPCB配置画像(PNG)をクリックしてください。ネジ端子は電源装置に接続します。 7ピンヘッダーの行がIOピンに接続します。ラベルにもかかわらず、7Volts DCのみが必要です。

ピン

スピ

I2C

rs232

B9.

mos

SDA.

B8.

クルク

SCL

B7.

味噌

処方箋

B6

CS.

TX.

B5

a a

a a

a a

接地

g

g

g

この表は各バスモードのPIN接続を示しています。 RAW 2 Wire Modeは、i2cと同じピン構成を使用します。 RAW 3 Wire ModeはSPIと同じピン構成を使用します。

フルサイズの回路画像(PNG)をクリックしてください。回路とPCBはCADSoft Eagleのフリーウェアバージョンを使用して作成されます。プロジェクトアーカイブ(ZIP)をダウンロードしてください。

PIC 24FJ64GA002

私たちはバス海賊にPIC24FJ64GA002マイクロコントローラを使用しました。これは私達が私達のミニサーバープロジェクトで使用されているものと同じチップです。私たちが望むすべてのことをするのに十分速い(16mips)、周辺ピン選択機能により、ハードウェアSPI、UART、およびI2Cモジュールが出力ピンを共有できます。各POWERピンにはデカップリングコンデンサ(C12,13)が必要で、MCLR機能はピン1と3.3ボルトの間の抵抗(R7)を必要とします。写真は、10UFタンタルコンデンサ(C3)を必要とする内部電圧レギュレータを持っていますが、問題なく普通の電解コンデンサを使用しました。 PIC24Fチュートリアルでプログラミングとこのチップを操作することについて読んでください。フォトデバッガがない場合は、いくつかの読者がeBayで$ 40のICD2クローンを推奨します。

写真は3.3ボルトで動作しますが、デジタル専用ピンは5Voltロジックをインタフェースするための5Volt耐性です。ピン14,15,16,17,18,21、および22はデジタルのみです。デジタルのみは、データシートを通して見ることによって考え出し、アナログ接続タイプのピンを除去する(表1-2、11-16ページ)。データシートによると、I2Cピンも5Volt耐性です。 Web上に矛盾する情報の束がありますが、データシートPage 230、パラメータDI28は、アナログ回路なしの24FJ64GA002 I2Cピンの最大入力が5.5ボルトであることを明確に示しています。

ピン21および22(RB10 / 11)は、抵抗R4およびR5を介してSDA / SCLをプルアップすることができる。

MAX3223CPP.

このチップは、3.3Voltシリアル出力をPCシリアルポートに対応した+/- 10Volt RS232信号に変換します。 MAX3223CPPはMAX202の3-5Voltバージョンで、追加の省電力機能があります。 MAX RS232トランシーバには、チャージポンプ(C4,5,7,8)、および1つのデカップリングコンデンサ(C17)に4つの0.1UFコンデンサが必要です。私たちはすべてのために同じコンデンサを使いました。

MAX3223CPPを使用しました。これはもう利用できないようです。 MAX3223EEPP +は、Digikeyで7ドルで利用可能なピン互換の新しいバージョンです。痛い! 3223の省電力機能のどれも使用されていないので、安価でシンプルな3.3Volt RS232トランシーバを必要な場合に置き換える必要があります。

電源供給装置

ほとんどのチップは、バス海賊のオンボード3.3ボルトおよび5Voltの供給から電力を供給できます。 5ボルトは、共通の7805レギュレータ(VR2)と2つのデカップリングコンデンサ(C9,10)によって供給されます。 LM317調整可能なレギュレータ(VR1)は2つの抵抗(R2,3)を使用して3.3ボルトに設定され、2つのデカップリングコンデンサ(C6,7)が必要です。回路は7-10Volt DC電源(J1)を必要とする。

部品表


価値

IC1
PIC24FJ64GA002-DIP

ic2
MAX3223CPP(MAX3223EEPP +を試す)

C3.
10UFコンデンサ(好ましくはタンタル)

C4-13,17
0.1UFコンデンサ

r1
330オーム抵抗器

r2
240オーム抵抗

r3
390オーム抵抗器

R4,5,7
2K2オーム抵抗器

vr1
LM317

vr2
LM7805.

x1
スクリュークランプ(3端子)*未テスト

x2
DB9メスコネクタ(シリアルポート)*未テスト

ICSP、SV3
.1 “ピンヘッダ、理想的な角度

j.
パワージャック、2.1mmピン

LED1
3mm LED(オプション)

ファームウェア

ファームウェアは、Photo C30コンパイラの無料デモ版を使用してCで書かれています。写真24Fシリーズの紹介でこの写真を扱うことについてすべてを学びましょう。プロジェクトアーカイブ(ZIP)をダウンロードしてください。

main.c – ユーザー端末インタフェースを処理します。

Buspirate.c – 適切なバス上のアクションに構文を変換する抽象化ルーチン。

UARTIO.C – 両方のハードウェアUART用のIOルーチン。

M_I2C_1.C – [Michael Pearce]によるソフトウェアI2Cルーチン。写真ハードウェアI2Cが機能するようにすることができなかったので、この貴重な図書館を使用しました。ソフトウェアはI2Cスピード設定を考慮に入れており、約5kHzで動作しているようです。

SPI.C – ハードウェアSPIモジュールを駆動するルーチン。

RAW2WIRE.c – ソフトウェア2-Wireインターフェイスライブラリ。

RAW3WIRE.c – ソフトウェア3-Wire(SPI)インタフェースライブラリ。

ユーザー入力は、改行文字(Enter)が検出されるまで4000バイトのバッファに保持されます。入力の最初の文字がメニューオプションである場合(下記参照)、メニューダイアログが表示されます。それ以外の場合、文字列はバスを介して送信するためのデータに対して解析されます(構文を参照)。このコードは、恥ずかしい数のスイッチステートメントとスパゲッティコードで構成されています。

端末インタフェース

デバイスを制御するためにジャンクのソフトウェアを作成するのではなく、ASCII端末と連携するシリアルコマンドラインインターフェイスを作成しました。バス海賊は、3桁の結果コードとショートメッセージを持つコマンドに応答します。コードはPC自動化を念頭に置いて作成されます。プロジェクトアーカイブ(zip)に結果コードの表が含まれています。

メニューオプション

メニューオプションは、データ転送を伴わないシングル文字コマンドです。メニューにアクセスするには、文字を入力してを入力します。

? – コマンドと構文を備えたヘルプメニューを表示します。

M – バスモード(SPI、I2C、UART、生2線、生3線)を設定します。速度、極性、および出力状態(モードに依存)のプロンプトですぐに続きます。

バス速度:SPI:30,125,250,1000kHz。 I2C:100,400,1000kHz。 UART:300,1200,2400,4800,9600,19200,38400,57600,115200bps。生モード:1,10,50kHz。

逆時計設定通常のIDLE状態を正常の反対側に設定します(通常のSPI:Normal UART:IDLE HIGH):SPI:IDLE HIGH。 UART:低いアイドル

一部のモードには、プルアップ抵抗(Low = Ground、High = Input)で使用するためのオプションのHigh-Z出力モードがあります。

L – トグルビット送受信順序:最下位ビット最初のビット。

P – SDA / SCLピンプルアップ抵抗トグル(3.3ボルト)。 I2Cと生2線式モードでのみ有効です。

O – 数値出力表示形式を設定します。端末は、10進数、16進数、およびバイナリのASCII値として数値を表示できます。 4番目のフォーマットは、ASCIIフォーマットテキストを読み取るために、未処理のバイトを送信します。

構文

基本的な構文は、バス上のチップと通信するために使用されます。構文コマンドには、通常、すべてのバスタイプに適用される一般的な関数があります。

A / A / @ – 補助ピンを切り替えます。大文字の「A」はAUXの高さ、小さい「A」セットをグランドに設定します。 @ AUXを入力(ハイインピーダンスモード)に設定し、ピン値を読み取ります。

[ – データの書き込みを開始します。 SPI / RAW 3 Wire:チップ選択が有効になります。 I2C / RAW 2ワイヤ:開始条件。 RS232:UARTを開く、受信したバイトを破棄します。

{ – データを読み取りで書き込みを開始します。 [、以外:SPI / RAW 3 Wire:書き込みごとに読み取りバイトを表示します。 RS232:ASYNCHRに到着したときにデータを表示しますあくまに。

– データ書き込みを終了する。 SPI / RAW 3 Wire:チップ選択無効化。 I2C / RAW 2ワイヤ:停止条件。 RS232:UARTを閉じます。

R / R – バイトを読み取ります。 SPI / RAW 3ワイヤ:ダミーバイトを送信し、リターンリードを読みます。 I2C:ACKでバイトを読み込みます。生2線:8ビットを読みます。 RS232:バイトの場合はUARTを確認して、空の場合は失敗してください。バルクは255バイトまで読み取るために0r1 … 255を使用してください。

0B – このバイナリ値を書き込みます。フォーマットはバイトの0B00000000ですが、部分バイトも大丈夫です.0B1001。

0hまたは0x – この16進値を書きます。フォーマットは0h01または0x01です。部分バイトは大丈夫です:0xa。 A-Fは、小文字または大文字です。

0-255 – この10進値を書きなさい。 0x、0h、または0bの前にある数字は、小数値として解釈されます。

、またはスペース値区切り文字。数字を区切るためにコマやスペースを使用してください。任意の組み合わせが問題ありませんが、非数値の値の間には区切り文字は必要ありません。{0xa6,0,0 16 5 0B111 0 HAF}。

RAW 2ワイヤモードと生3ワイヤモードのダイレクトバス操作コマンド。
^ – 1クロックダニを送信します。複数のクロックダニについては0 ^ 1 … 255を使用してください。

/および\ – クロックレベルの高さ(/)とlow(\)を切り替えます。クロック遅延(100US)を含みます。

– / _ – データ状態の高い( – )と低(_)を切り替えます。データ設定遅延(20US)を含みます。

! – クロックで1ビットを読みます。

。 – データ端子状態(クロックなし)を読み取ります。

遅延1US。複数の遅延に対して0&1 … 255を使用してください。

それを使って

バス海賊を行動中に示す2つの例がここにあります。端末はローカルエコーでASCIIモードに設定する必要があります.Windowsシリアル端末を使用しました。 PC側シリアル接続は115200bps、8n1です。バス海賊は、任意の単一の行送りタイプ(0x0a、0x0d)、またはその両方に応答する必要があります(Windowsスタイル)。

.i2c / SPI – Flash 24LC1025 EEPROM

MicrochipのEEPROMは常設保存メモリチップであるため、24LC1025はI2Cインターフェイスを備えた128Kバイバイトのストレージを持ちます。ビッグサーキットや書き込みコードをパン搭載することなく、このチップをテストできます。

写真はバス海賊に接続されている24LC1025を示しています。 EEPROMは2.7から5ボルトに働くので、バス海賊からの3.3ボルトの供給を使用して回路に電力を供給しました。オンボードSDA / SCLプルアップ抵抗器はI2Cバスを高く保持し、外部抵抗の必要性を排除します。単一の0.1UFコンデンサは電源からEEPROMを切り離します。

I2Cモードを設定します

まず、BUS PirateをI2Cモードで設定し、プルアップ抵抗を有効にします。バス海賊が現在ソフトウェアI2Cライブラリを使用していることを考慮すると、スピード設定は実際には効果がありません。

SPI> M <-enter Mモード選択 1. Spi. 2.I2C 3. UART. 4.生2ワイヤー 5.生3ワイヤー i2cのモード> 2 <-enter 2 900モードセット スピードを設定: 1. 100kHz(標準) 400kHz(高速モード) 3. 1MHz(高速) スピード> 1 <スピードは本当に何もしません... 901スピードセット 202 I2C準備完了、プルアップのためのP / P I2C> P <-ENA使用可能なI2Cプルアップ抵抗 205 I2Cプルアップオン i2c>

EEPROMに書く(I2C)

すべてのI2C操作は開始条件{または[停止状態で終了]または]から始まります。書き込みはデバイス(1バイト)にアドレス指定して確認応答ビット(ACK)を見つけようとすることから始まります。 EEPROMが応答する場合は、データの場所を書き込む(2バイト)とデータペイロード(nバイト)を送信できます。バス海賊は各書き込みの終わりにACKを自動的にチェックし、それぞれ読み取るACKを確認します。

24LC1025ベースアドレスは1010xxyです。ここで、XXはピン2と3の状態によって切り出され、Yは読み取られ(1)または書き込み(0)モードです。ピン2と3をハイに接続し、フル書き込みアドレス1010110を作成します。 。

I2C> {0B10100110 0 0 1 2 3 4 5 6 7 8 9 10 0xB 0xc 13} <-i2cコマンド 210 i2c開始条件<-bus start. 220 I2C WRITE:0xa6 ack:はい<-address送信し、ACKを受信しました 220 I2C WRITE:0x00 GOT ACK:はい<書き込みアドレス 220 I2C WRITE:0x00 GOT ACK:はい<書き込みアドレス 220 I2C WRITE:0x01 ack:はい<-data ... 220 I2C WRITE:0x0D GOT ACK:はい 240 I2C停止条件 i2c>

EEPROM(I2C)から読む

24LC1025を読むと2つのステップがかかります。まず、データなしのライトコマンドはアドレスポインタを設定します。第二に、読み取り通信

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post

印刷された装置は、世界の暖かい死印刷された装置は、世界の暖かい死

A 2:1ギアの減少がトルクを2倍にするだけでなく、回転軸を半速度に遅くするまで何もしない。これを数回繰り返してください。それは[Jeshua]のプロジェクトの背後にあるコンセプトで、部分的にコンクリートのブロックに埋め込まれた印刷装置です。 [Jeshua]の発展は、[Arthur Ganson]の速度論的彫刻の1つのレプリカです。 [Ganson]の装置は、200rpmのモータの回転をさらに200回のキンティリオン時に減らすために50組のギアを利用する。彫刻内の最終ギアはコンクリートのブロックに埋め込まれており、コンクリートブロックのどちらかの侵食またはNovaに行く太陽のいずれかによって解放されるのを待っています。 金属歯車の代わりに、[Jeshua]はPLA内に3Dプリントギアを利用した。スタンドに組み立てた後、彼は最終的な、かくじめに動くギアの周りにコンクリートを鋳造します。最終ギアが革命の1/10の革命になる前に、ほこりに変わることは印象的に無駄な発展です。 PLAの代わりにABSで印刷された場合、このデバイスが長い可能性がありますが、ここではここで話している時間スケールではあまり違いはありません。

OOS 3.0.2 OnePlus 2の更新後の修正回復OOS 3.0.2 OnePlus 2の更新後の修正回復

Marshmallowベースの酸素OS 3.0アップデートは、OnePlus 3の発売とともにOnePlusラインナップの最も熱心に期待されるアップデートの1つでした。既存のユーザーは、Googleの最新のAndroidフレーバーの味をついに得るのに長い待ち時間の終わりでした。 多くの人は、2015年10月に公式のMarshmallowの発売がどのように戻ってきたかを見て、数ヶ月前にアップデートが押し出されるべきだったと不満を言うでしょうが、今すぐ更新を取得することは確かに歓迎されます。 OnePlus CEOのCarl Peiは、開発チームがまだすべてのバグをアイロンをかけているためであるため、最初に報告されたものの一部を修正するためにマイナーなOTAアップデートを起動する必要がある理由であると述べました。現在、ほとんど気付かれていないバグの1つは、回復を起動しようとするときです。 私のデバイスは、XDAデベロイヤーフォーラムの数人のユーザーと同様に、主に更新をフラッシュした人にこの問題を報告しています。リカバリへの起動は、デバイスが「OnePlusロゴ」に閉じ込められ、前進しないため、機能しないようです。簡単な修正はありますが、デバイスが同じ問題に直面していると確信していない限り、適用しないでください。そうでなければ、データの損失に直面する可能性があります。 前提条件: まず、開始する前に、いくつかのことを保証する必要があります。 ロック解除されたOnePlus 2を使用していることを確認します 注:キャリアモデルは、この方法では機能しない場合があります。ユーザーは、これを自分の責任で実行する必要があります。 必要なOnePlusがインストールされていることを確認してください(こちらからダウンロードしてください)。 少なくとも80〜85%のバッテリー充電があるかを確認してください。プロセスの途中で電話が死ぬことは望ましくありません。 他のデバイスでこのプロセスを以前に行ったことがある場合は、ADBとFastBootに精通している必要があります。インストールしていることを保証します。 ADBとFastBootに精通していない人については、数秒以内にWindowsでADBとFastBootをセットアップする方法に関する包括的なガイドを参照してください [設定]メニューで開発者オプションからUSBの突入を有効にします。 開発者のオプションが見つからない場合は、最初に[電話] – > [> [build]に設定]に移動して、有効になったという小さな通知が表示されるまで7回タップする必要があります。 次に、[設定]メニューに戻ると、開発者のオプションを見つける必要があります。それを開いて、USBデバッグを有効にします。 すべてのデータが消去される可能性があるため、すべての個人データとアプリをバックアップしたことを確認してください! 連絡先、カレンダー、および人の詳細については、Googleアカウントの同期を使用してバックアップします アプリとアプリのデータについては、こちらの詳細な投稿をご覧ください。 免責事項:次の手順は非常に危険であり、正しく実行されないと携帯電話をレンガする可能性があります。したがって、ユーザーは慎重に自分の責任で踏み込むべきです。 ダウンロード: これらのファイルをダウンロードして、デスクトップに保管する必要があります。

iPhone 15 Pro Maxは、iPhone 14 Pro Maxが14 ProiPhone 15 Pro Maxは、iPhone 14 Pro Maxが14 Pro

AppleのiPhone 14 Pro Maxをアウトセルするため、特別な機能を獲得する可能性があります。 iPhone 14 Pro。 それは、Twitterを通じて多くのことを報告したアナリストのMing-Chi Kuoによるとです。 Kuoから、AppleがiPhone 14から離れたプロデュースとProモデルに移転したいと思っていたとすでに聞いていましたが、現在、iPhone 14 Pro Maxは、それらの全体的な購入ブーストの約60%を占めていると述べています。プロモデル。 それを念頭に置いて、彼は移転が「AppleがiPhone 15 Pro Maxと15のProをはるかに多くの区別を生み出し、15のPro Maxの出荷を改善し、iPhone製品ミックスを改善するように動機付けます」と考えています。 iPhone 15 Pro Maxが新しい名前を取得する可能性があるという推奨事項がすでにあります。iPhone15Ultraは、ブルームバーグのマークガーマンによって帯びているものです。 Apple View Ultraの到着に準拠しているため、Appleは将来のハイエンドデザインでそのブランディングを利用することを選択するかもしれないと考えられています。 iPhone 15のラインナップの噂では現在、AppleがUSB-Cに変更されていますが、確かにそれが名前である場合、iPhone 15 Ultraにはさらに多くの変更があると考えられています。