Caranya: bajak laut bus, antarmuka serial universal

Pembaruan: firmware baru dengan jtag dan banyak lagi

Kami selalu senang untuk mendapatkan chip atau kartu SIM baru ke antarmuka, tetapi antusiasme kami biasanya dibasahi oleh proses prototipe. Interfacing Chip apa pun yang biasanya menunjukkan breadboarding sirkuit, menulis kode, dan mengangkut programmer; Mungkin bahkan PCB prototyping.

Beberapa tahun yang lalu kami membangun ‘bus bajak laut’ pertama, antarmuka bus universal yang berbicara dengan banyak chip dari terminal serial PC. Beberapa protokol serial konvensional didukung pada 3,3-5Volts, termasuk seri I2C, SPI, dan asinkron. Tambahan pustaka ‘mentah’ 2 dan 3-kawat dapat antarmuka hampir semua protokol serial eksklusif. Mempertimbangkan bahwa ini adalah alat yang menguntungkan bagi kami, kami membersihkan kode, mendokumentasikan desain, dan merilisnya di sini dengan spesifikasi, skema, dan kode sumber.

Konsep ikhtisar

Bus bajak laut adalah jembatan terminal serial untuk beberapa protokol antarmuka IC. Kami mengetik perintah ke terminal serial di komputer. Perintah pergi ke bus bajak laut melalui port serial PC. Bus Bajak Laut berbicara dengan microchip dalam protokol yang tepat, dan mengembalikan hasilnya ke PC.

Semua pin keluaran 3.3Volts, tetapi toleran 5Volt. On-board 3.3Volt dan 5Volt pasokan daya tersedia untuk memberi daya pada chip yang terhubung. Perangkat lunak mengkonfigurasi resistor pull-up I2C menyelesaikan paket.

Antarmuka Terminal Serial bekerja dengan sistem apa pun: PC, Mac, Linux, Palm Pilot, Perangkat Wince, dll; Tidak diperlukan crapware. Kami mempertimbangkan perangkat USB, tetapi USB tidak kompatibel dengan sejumlah besar perangkat genggam yang memiliki port serial. Kami juga menginginkan perangkat 3.3Volt dengan input toleran 5volt, tetapi banyak mikrokontol USB melalui-lubang populer adalah bagian 5volt (mis. PIC18FX550).

Busap bajak laut saat ini ‘berbicara’ tiga protokol perangkat keras untuk interfacing berkecepatan tinggi, dan memiliki dua perpustakaan protokol perangkat lunak untuk manipulasi bus mudah. Teori dan spesifikasi masing-masing protokol berada di luar apa yang dapat kami bahas di sini, tetapi periksa beberapa tutorial ini:

I2c.

Bus 2 kawat lambat. Wikipedia adalah tempat yang hebat untuk memulai latar belakang I2C. I2c-bus.org, robot elektronik, akademi sistem tertanam, dan Embedded.com memiliki tutorial I2C terhormat.

SPI.

Bus dasar 3 kawat. Wikipedia memiliki latar belakang; Embedded.com memiliki tutorial dan perbandingan yang hebat dengan I2C.

Pemancar Penerima Asynchronous Universal (UART ATAU SERI)

Protokol Serial Dependent Jam dan Waktu paling dikenal karena penampilannya sebagai protokol port serial PC. Wikipedia memiliki latar belakang protokol serial asinkron.

RAW 2 kawat

Ini adalah perpustakaan protokol kawat generik, mirip dengan I2C tetapi tanpa bit ACK. I2C dan banyak protokol 2 kawat eksklusif dapat dibentuk menggunakan manipulasi bus yang tersedia dalam mode ini. Gunakan perpustakaan ini untuk bekerja dengan perangkat kawat non-I2C 2, seperti SmartCards atau Sensirion SHT11 Suhu / Sensor Kelembaban.

RAW 3 kawat

Ini adalah perpustakaan protokol kawat generik, mirip dengan SPI tetapi tanpa kendala dari modul perangkat keras. Gunakan perpustakaan ini untuk bekerja dengan perangkat yang menggunakan protokol 3-wire non-8bit yang kompatibel, seperti Sparkfun Nokia 6100 LCD Knock-Off. Banyak 3 protokol kawat dapat terbentuk menggunakan manipulasi bus yang tersedia dalam mode ini.

Perangkat keras

Klik untuk gambar penempatan PCB ukuran penuh (PNG). Terminal sekrup terhubung ke catu daya. Baris tujuh tajuk pin terhubung ke pin IO. Meskipun label, hanya 7volts DC yang diperlukan.

PIN

SPI.

I2c.

Rs232.

B9.

MUSI

SDA.

B8.

CLK

SCL

B7.

SUP KEDELAI JEPANG

Rx.

B6.

CS.

Tx.

B5.

Aux.

Aux.

Aux.

Tanah

Gnd.

Gnd.

Gnd.

Tabel ini menunjukkan koneksi pin untuk setiap mode bus. Mode 2 Kawat Raw menggunakan konfigurasi PIN yang sama dengan I2C. Mode 3 kawat mentah menggunakan konfigurasi pin yang sama dengan SPI.

Klik untuk gambar sirkuit ukuran penuh (PNG). Sirkuit dan PCB dibuat menggunakan versi freeware dari CADSOFT EAGLE. Unduh Arsip Proyek (ZIP).

Pic 24FJ64GA002.

Kami menggunakan mikrokontroler PIC24FJ64GA002 di Bus Pirate; Ini adalah chip yang sama yang kami gunakan dalam proyek mini-server kami. Ini cukup cepat untuk melakukan semua yang kami inginkan (16MIPS), dan fitur PIN PINPERAL memungkinkan modul perangkat keras SPI, UART, dan I2C untuk berbagi pin output. Setiap pin daya membutuhkan kapasitor decoupling (C12,13), dan fungsi MCLR memerlukan resistor (R7) antara PIN 1 dan 3.3Volts. Foto ini memiliki regulator tegangan internal yang memerlukan kapasitor 10UF tantalum (C3), meskipun kami menggunakan kapasitor elektrolit polos tanpa masalah. Baca tentang pemrograman dan bekerja dengan chip ini di tutorial PIC24F kami. Jika Anda tidak memiliki foto debugger, beberapa pembaca merekomendasikan klon $ 40 ICD2 di eBay.

Foto ini berjalan pada 3.3Volts, tetapi pin Digital-only adalah toleran 5volt untuk logika 5volt interfacing. Pin 14,15,16,17,18,21, dan 22, adalah Digital saja, yang kami ketahui dengan melihat melalui lembar data dan menghilangkan pin dengan tipe koneksi analog (Tabel 1-2, halaman 11-16). Menurut lembar data,Pin I2C juga toleran 5 volt. Ada banyak informasi yang saling bertentangan di web, tetapi Parameter DI28, dengan jelas menyatakan bahwa input maks untuk pin 24FJ64GA002 I2C tanpa sirkuit analog adalah 5.5volts.

Pin 21 dan 22 (RB10 / 11) dapat menarik SDA / SCL melalui resistor R4 dan R5.

Max3223cpp.

Chip ini mengkonversi output serial 3.3Volt ke +/- 10volt RS232 Signals yang kompatibel dengan port serial PC. MAX3223CPP adalah versi 3-5volt dari MAX202, dengan fitur hemat daya ekstra. Transceiver Max RS232 memerlukan empat kapasitor 0.1uf untuk pompa biaya (C4, 5,7,8), dan satu kapasitor decoupling (C17). Kami menggunakan kapasitor yang sama untuk semuanya.

Kami menggunakan MAX3223CPP, yang sepertinya tidak tersedia lagi. MAX3223EEPP + adalah versi yang kompatibel dengan PIN, tersedia di Digikey seharga $ 7. Aduh! Tidak ada fitur hemat daya 3223 yang digunakan, jadi transceiver RS232 yang lebih murah, lebih sederhana harus diganti jika dengan cara apa pun memungkinkan.

Perlengkapan Daya

Sebagian besar keripik dapat ditenagai dari perlengkapan Bajak Laut Bajak Laut 3.3Volt dan 5Volt. 5Volts dipasok oleh regulator 7805 yang umum (VR2) dan dua kapasitor decoupling (C9,10). Regulator Adjustable LM317 (VR1) diatur ke 3.3volts menggunakan dua resistor (R2,3), dan membutuhkan dua kapasitor decoupling (C6,7). Sirkuit membutuhkan pasokan DC 7-10VOLT (J1).

Daftar Bagian

Bagian
Nilai

IC1.
Pic24FJ64GA002-Dip.

IC2.
MAX3223CPP (coba MAX3223EEPP +)

C3.
10UF Kapasitor (Lebih disukai Tantalum)

C4-13,17.
0.1uf kapasitor

R1.
330 ohm resistor.

R2.
240 ohm resistor.

R3.
390 ohm resistor.

R4,5,7.
2k2 ohm resistor.

Vr1.
LM317.

Vr2.
LM7805.

X1.
Screw Clamp (3 terminal) * belum diuji

X2.
Konektor perempuan db9 (port serial) * belum diuji

ICSP, SV3.
.1 “Header PIN, Sudut ideal

J1.
Power jack, pin 2.1mm

LED1.
3mm dipimpin (opsional)

Firmware.

Firmware ditulis dalam C menggunakan versi demonstrasi gratis dari kompiler Foto C30. Pelajari semua tentang bekerja dengan foto ini dalam pengantar kami ke seri Photo 24F. Unduh Arsip Proyek (ZIP).

main.c – menangani antarmuka terminal pengguna.

buspirate.c – rutin abstraksi yang mengubah sintaks terhadap tindakan pada bus yang tepat.

Uartio.c – io rutinitas untuk kedua perangkat keras UARTS.

m_i2c_1.c – perangkat lunak rutinitas I2C oleh [Michael Pearce]. Kami tidak bisa mendapatkan perangkat keras foto I2C untuk bekerja, jadi kami menggunakan perpustakaan yang berharga ini. Perangkat lunak ini tidak memperhitungkan pengaturan kecepatan I2C, dan tampaknya berfungsi sekitar 5KHz.

SPI.C – Rutin yang menggerakkan modul SPI perangkat keras.

RAW2WIRE.C – Perangkat Lunak Perpustakaan Antarmuka 2-Wire.

RAW3WIRE.C – Perangkat Lunak Perpustakaan Antarmuka 3-Wire (SPI).

Input pengguna disimpan dalam buffer 4000 byte hingga karakter baris baru (Enter) terdeteksi. Jika karakter pertama input adalah opsi menu (lihat di bawah), dialog menu ditampilkan, jika tidak string ini diuraikan untuk data untuk mengirim bus (lihat sintaks). Kode ini terdiri dari jumlah pernyataan sakelar dan kode spageti yang memalukan.

Antarmuka terminal.

Daripada menulis selembar perangkat lunak untuk mengontrol perangkat, kami memberikannya antarmuka baris perintah serial yang akan berfungsi dengan terminal ASCII. Bus bajak laut merespons perintah dengan kode hasil tiga digit dan pesan singkat. Kode-kode dibuat dengan otomatisasi PC dalam pikiran. Kami telah menyertakan tabel kode hasil di arsip proyek (ZIP).

Opsi menu

Opsi menu adalah perintah karakter tunggal yang tidak melibatkan transfer data. Masukkan karakter, diikuti oleh , untuk mengakses menu.

? – Tampilkan menu bantuan dengan perintah dan sintaks.

M – Atur mode bus (SPI, I2C, UART, Kawat Raw 2, 3 Wire). Diikuti segera dengan cepat untuk kecepatan, polaritas, dan status output (tergantung mode).

Kecepatan bus: SPI: 30, 125, 250, 1000kHz. I2C: 100, 400, 1000kHz. UART: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200bps. Mode Raw: 1, 10, 50kHz.

Pengaturan jam terbalik mengatur kebalikan dari normal (SPI normal: idle rendah; normal UART: idle tinggi): SPI: idle tinggi; UART: Menganggur rendah.

Beberapa mode memiliki mode output tinggi opsional untuk digunakan dengan resistor pull-up (rendah = ground, tinggi = input).

L – Toggle Bit Transmit / Terima pesanan: Sebagian besar / paling tidak signifikan terlebih dahulu.

P-SDA / SCL PIN Toggle Toggle (3.3Volts). Hanya berlaku dalam mode I2C dan RAW 2 kawat.

O – Atur format tampilan output nomor. Terminal dapat menampilkan angka sebagai nilai desimal, heksadesimal, dan biner ASCII. Format keempat mengirimkan byte RAW, Diproses untuk membaca teks yang diformat ASCII.

Sintaksis

Sintaks dasar digunakan untuk berkomunikasi dengan keripik di atas bus. Perintah sintaks memiliki fungsi generik yang biasanya berlaku untuk semua jenis bus.

A / A / @ – Toggle PIN AUXILIARY. Modal “A” set aux tinggi, kecil “A” ke tanah. @ Mengatur AUX ke input (mode impedansi tinggi) dan membaca nilai PIN.

[- Mulai menulis data. SPI / RAW 3 Kawat: Pilih Chip Diaktifkan. I2C / Raw 2 kawat: kondisi mulai. RS232: Buka UART, Buang byte yang diterima.

{- Mulai data Tulis dengan Reads. Sama seperti [, kecuali: SPI / RAW 3 WIRE: Tampilkan byte baca untuk setiap penulisan. RS232: Tampilkan data saat tiba ASINCHRdengan sangat.

] atau} – Tulis data akhir. SPI / RAW 3 Kawat: Chip Pilih Dinonaktifkan. I2C / Raw 2 Kawat: Stop Kondisi. RS232: Tutup UART.

R / r – baca byte. SPI / RAW 3 WIRE: Kirim Dummy Byte, Return Read. I2C: Baca byte dengan ack. RAW 2 WIRE: Baca 8 bit. RS232: Periksa UART untuk byte dan kembali, atau gagal jika kosong. Gunakan 0R1 … 255 untuk massal berbunyi hingga 255 byte.

0b – Tulis nilai biner ini. Format adalah 0b00000000 untuk byte, tetapi byte parsial juga baik-baik saja: 0b1001.

0H atau 0x – Tulis nilai hex ini. Format adalah 0H01 atau 0x01. Byte parsial baik-baik saja: 0xA. A-F dapat huruf kecil atau huruf kapital.

0-255 – Tulis nilai desimal ini. Setiap nomor yang tidak diawali dengan 0x, 0h, atau 0b diartikan sebagai nilai desimal.

, atau membatasi nilai ruang. Gunakan koma atau ruang untuk memisahkan angka. Kombinasi apa pun baik-baik saja, tidak diperlukan pembatas antara nilai non-angka: {0xA6,0, 0 16 5 0b111 0HAF}.

Perintah manipulasi bus langsung untuk mode 2 kawat mentah dan mode 3 kawat mentah.
^ – Kirim satu centang jam. Gunakan 0 ^ 1 … 255 untuk banyak centang jam.

/ dan \ – Toggle clock level tinggi (/) dan rendah (\). Termasuk jam tunda (100US).

– / _ – Toggle data state tinggi (-) dan rendah (_). Termasuk penundaan pengaturan data (20US).

! – Baca sedikit dengan jam.

. – Baca Data Pin State (tanpa jam).

& – Tunda 1US. Gunakan 0 & 1 … 255 untuk beberapa penundaan.

Menggunakannya

Berikut adalah dua contoh yang menunjukkan bajak laut bus dalam aksi. Terminal harus diatur ke mode ASCII dengan gema lokal, kami menggunakan terminal serial Windows. Koneksi serial sisi PC adalah 115200bps, 8n1. Bus bajak laut harus menanggapi jenis umpan baris tunggal (0x0A, 0x0D), atau keduanya (Windows Style).

.I2c / SPI – Flash 24LC1025 EEPROM

Eeprom Microchip adalah chip memori penyimpanan permanen yang populer, 24LC1025 memiliki 128Kbytes penyimpanan dengan antarmuka I2C. Kami dapat menguji chip ini tanpa bread-boarding sirkuit besar atau kode penulisan.

Gambar menunjukkan 24LC1025 yang terhubung ke bajak laut bus. EEPROM bekerja dari 2,7 hingga 5volts, jadi kami menggunakan pasokan 3.3Volt dari bus bajak laut untuk memberi daya pada sirkuit. Resistor pull-up SDA / SCL on-board memegang bus I2C tinggi, dan menghilangkan kebutuhan untuk resistor eksternal. Seorang kapasitor 0.1uf tunggal menipu EEPROM dari catu daya.

Setup i2c Mode.

Pertama, kami mengatur bajak laut bus untuk mode I2C dan memungkinkan resistor pull-up. Mempertimbangkan bahwa bajak laut bus saat ini menggunakan perangkat lunak pustaka I2C, pengaturan kecepatan tidak benar-benar memiliki efek.

SPI> M <-enter M untuk mode Pilih 1. SPI. 2. I2C. 3. UART. 4. RAW 2 kawat 5. RAW 3 kawat Mode> 2 <-enter 2 untuk I2C Set mode 900. Tetapkan kecepatan: 1. 100KHz (standar) 2. 400kHz (mode cepat) 3. 1MHz (kecepatan tinggi) Kecepatan> 1 <-peed tidak benar-benar melakukan apa-apa ... 901 set kecepatan 202 i2c siap, p / p untuk pullup I2c> p <-able the i2c resistor pull-up 205 pullup i2c on I2C>

Tulis ke EEPROM (I2C)

Semua operasi I2C dimulai dengan kondisi awal {atau [, dan akhiri dengan kondisi stop} atau]. Tulis dimulai dengan mengatasi perangkat (1 byte) dan mencoba menemukan bit pengakuan (ACK). Jika EEPROM merespons, kami dapat mengirim lokasi data untuk menulis (2 byte) dan muatan data (n bytes). Bus bajak laut secara otomatis memeriksa ACK pada akhir setiap penulisan, dan acks masing-masing membaca.

Alamat dasar 24LC1025 adalah 1010xxy, di mana XX diketahui oleh keadaan pin 2 dan 3, dan y dibaca (1) atau tulis (0) mode. Kami mengikat pin 2 dan 3 tinggi, membuat alamat tulis penuh 1010110. Kami akan mulai menulis ke perangkat di lokasi data pertama (0 0), dan menulis satu hingga tiga belas menggunakan campuran format input data (1 … 13) .

I2c> {0b10100110 0 0 1 2 3 4 5 6 7 8 9 10 0xb 0xc 13} <-i2c perintah 210 Kondisi Mulai I2C <-bus Mulai 220 I2C Tulis: 0xA6 GOT ACK: Ya <-Address dikirim dan ack diterima 220 I2C Tulis: 0x00 GOT ACK: Ya <-Write Alamat 220 I2C Tulis: 0x00 GOT ACK: Ya <-Write Alamat 220 I2C Tulis: 0x01 GOT ACK: Ya <-Data ... 220 I2C Tulis: 0x0d Got ACK: Ya 240 i2c stop syarat I2C>

Baca dari EEPROM (I2C)

Membaca 24LC1025 membutuhkan dua langkah. Pertama, perintah tulis tanpa data menetapkan pointer alamat. Kedua, sebuah komunikasi baca

Leave a Reply