Mise à jour: nouveau firmware avec JTAG et plus
Nous sommes toujours extatiques pour obtenir une nouvelle puce ou une nouvelle carte SIM pour interfacer, mais notre enthousiasme est généralement imbibé par le processus de prototypage. Interfaçage de n’importe quelle puce indique normalement de pain en panne d’un circuit, d’un code de rédaction et de transport du programmeur; peut-être même un PCB de prototypage.
Il y a quelques années, nous avons construit le premier «pirate de bus», une interface de bus universelle qui parle de nombreuses copeaux d’un terminal série PC. Plusieurs protocoles de série conventionnels sont pris en charge à 3,3-5 volts, y compris la série de numéros I2C, SPI et asynchrones. Les bibliothèques «brutes» de ‘brut’ 2 et 3 et 3 peuvent interfacer presque tous les protocoles de série exclusifs. Considérant que cela a été un outil aussi bénéfique pour nous, nous avons nettoyé le code, documenté la conception et la publie ici avec des spécifications, schématiques et code source.
Vue d’ensemble du concept
Le pirate de bus est un pont de terminal série vers plusieurs protocoles d’interface IC. Nous tapons des commandes dans un terminal de série de l’ordinateur. Les commandes vont au pirate de bus via le port série PC. Le pirate de bus parle à une micropuce dans le protocole approprié et renvoie les résultats au PC.
Toutes les goupilles de sortie 3.3volts, mais sont tolérantes de 5 Volts. Les alimentations de la puce connectée de la puce connectée 3.3Volt et 5 Volet sont disponibles. Software Configurable Les résistances de pull-up I2C complètent le package.
L’interface de terminal série fonctionne avec n’importe quel système: PC, Mac, Linux, Pilotes Palm Pilotes, Wince Devices, etc. Aucun cragway requis. Nous avons considéré un périphérique USB, mais USB n’est pas compatible avec le nombre substantiel de périphériques portables ayant un port série. Nous avons également voulu un dispositif de 3,3 Volt avec des entrées tolérantes à 5 Volts, mais beaucoup de microcommeurs USB par des trous traversants étaient des parties de 5 Volts (par exemple, PIC18FX550).
Le pirate de bus actuellement “Parle” trois protocoles matériels pour une interface à grande vitesse et dispose de deux bibliothèques de protocole de logiciels pour une manipulation facile du bus. La théorie et la spécification de chaque protocole dépasse ce que nous pouvons couvrir ici, mais consultez certains de ces tutoriels:
I2c
Un bus lent de 2 fils. Wikipedia est un endroit formidable pour commencer pour le fond I2C. I2c-bus.org, robot électronique, académie des systèmes embarqués et embedded.com a des tutoriels I2C respectables.
SPI
Un bus de base de 3 fils. Wikipedia a des antécédents; Embedded.com a un didacticiel et une comparaison formidables à I2C.
Émetteur récepteur asynchrone universel (UART ou série)
Un protocole série dépendant de l’horloge et du timing est mieux connu pour son apparence en tant que protocole PC série Port. Wikipedia a de l’arrière-plan sur les protocoles de série asynchrones.
Fil de 2 brut
Il s’agit d’une bibliothèque de protocoles de 2 fil génériques, similaire à I2C mais sans un bit ACK. I2C et beaucoup de protocoles de 2 fils exclusifs peuvent être formés à l’aide des manipulations de bus disponibles dans ce mode. Utilisez cette bibliothèque pour fonctionner avec des périphériques de fil non i2c 2, tels que des capteurs de température / humidité SENSIRAIN SHT11.
Fil de 3 cru
Il s’agit d’une bibliothèque de protocoles de 3 fil génériques, similaire à SPI mais sans les contraintes d’un module matériel. Utilisez cette bibliothèque pour travailler avec des périphériques utilisant des protocoles à 3 fils compatibles non-8bits, tels que le knock-off de Sparkfun Nokia 6100 LCD. Beaucoup de protocoles de 3 fils peuvent être formés à l’aide des manipulations de bus disponibles dans ce mode.
Matériel
Cliquez pour une image de placement de PCB de taille complète (PNG). Les bornes à vis se connectent aux alimentations. Une rangée de sept goupilles se connecte aux broches IO. Malgré l’étiquette, seuls 7volts DC sont nécessaires.
ÉPINGLER
SPI
I2c
RS232
B9
Mosi
SDA
–
B8
Cl k
SCL
–
B7
MISO
–
Rx
B6
Cs
–
Tx
B5
Aux
Aux
Aux
Sol
Gnd
Gnd
Gnd
Ce tableau indique les connexions des broches pour chaque mode de bus. Le mode RAW 2 Wire utilise la même configuration de la broche que I2C. Le mode RAW 3 Wire utilise la même configuration de la broche que SPI.
Cliquez pour une image de circuit complet (PNG). Le circuit et le PCB sont créés à l’aide de la version gratuite de Cadsoft Eagle. Téléchargez l’archive du projet (ZIP).
Pic 24fj64ga002
Nous avons utilisé un microcontrôleur PIC24FJ64GA002 dans le pirate de bus; C’est la même puce que nous avons utilisée dans notre projet Mini-Server. Il est assez rapide de faire tout ce que nous voulons (16 MiPS) et la fonctionnalité de sélection de broches périphériques permet aux modules Matériels SPI, UART et I2C de partager des broches de sortie. Chaque code POWER a besoin d’un condensateur de découplage (C12,13) et la fonction MCLR nécessite une résistance (R7) entre PIN 1 et 3,3 Volts. La photo dispose d’un régulateur de tension interne qui nécessite un condensateur Tantalum 10UF (C3), bien que nous utilisions un condensateur électrolytique uni sans problème. Lisez sur la programmation et le travail avec cette puce dans notre tutoriel PIC24F. Si vous n’avez pas de débogueur de photo, plusieurs lecteurs recommandent les clones de moins de 40 $ CIM2 sur eBay.
La photo fonctionne à 3,3 volts, mais les goupilles numériques que seules seules 5 Volts tolérants pour l’interfaçage de la logique 5 Volt. Les broches de 14,15,16,17,18,21 et 22 sont numériques uniquement, que nous avons imaginées en regardant dans la fiche technique et éliminant les broches avec un type de connexion analogique (tableau 1-2, pages 11-16). Selon la fiche technique,Les épingles I2C sont également tolérantes à 5 Volts. Il y a un tas d’informations contradictoires sur le Web, mais la page de données Page 230, le paramètre DI28, indique clairement que l’entrée maximale pour une goupille I2C 24F64GA002 I2C sans circuit analogique est de 5,5 volts.
Les broches 21 et 22 (RB10 / 11) peuvent rétrograder SDA / SCL à travers des résistances R4 et R5.
Max3223cppp
Cette puce convertit la sortie série 3.3Volt sur +/- 10 Volt RS232 Signaux compatibles avec un port série PC. Le MAX323CPP est une version de 3-5 Volt du MAX202, avec des fonctionnalités d’économie d’énergie supplémentaires. Les émetteurs-récepteurs maximum RS232 nécessitent quatre condensateurs 0.1UF pour une pompe à charge (C4,5,7,8) et un condensateur de découplage (C17). Nous avons utilisé les mêmes condensateurs pour tout.
Nous avons utilisé un MAX3223CPP, qui ne semble plus être disponible. Max3223Esep + est une version plus récente compatible des broches, disponible à Digikey pour 7 $. Aie! Aucune des 3223 Fonctions d’économie d’énergie n’est utilisée, de sorte qu’un émetteur-récepteur RS232 moins coûteux et plus simple de RS232 doit être substitué s’il est possible.
Alimentations
La plupart des puces peuvent être alimentées à partir des approvisionnements de 3,3 Volts à bord du pirate de bus et de 5 Volts. 5volts est fourni par un régulateur commun 7805 (VR2) et deux condensateurs de découplage (C9, 10). Un régulateur réglable LM317 (VR1) est réglé sur 3.3volts en utilisant deux résistances (R2,3) et nécessite deux condensateurs de découplage (C6,7). Le circuit nécessite une alimentation CC de 7-10 Volt (J1).
Liste des pièces
Partie
Évaluer
Ic1
Pic24fj64ga002-baisse
Ic2
MAX3223CPP (Essayez max3223Esep +)
C3
10uf condensateur (de préférence Tantalum)
C4-13,17
0.1uf condensateurs
R1
330 ohm résistance
R2
Résistance de 240 Ohm
R3
390 ohm résistance
R4,5,7
Résistance 2K2 Ohm
Vr1
Lm317
Vr2
LM7805
X1
Pince à vis (3 bornes) * non testée
X2
Connecteur femelle DB9 (port série) * non testé
ICSP, SV3
.1 “En-tête de broche, angle idéal
J1
Jack électrique, épingle de 2,1 mm
LED1
LED 3mm (facultatif)
Firmware
Le micrologiciel est écrit en C à l’aide de la version de démonstration gratuite du compilateur photo C30. Apprenez tout sur le travail avec cette photo dans notre introduction à la série photo 24f. Téléchargez l’archive du projet (ZIP).
Main.c – gère l’interface de terminal utilisateur.
Buspirate.c – Des routines d’abstraction qui convertissent la syntaxe vers des actions sur le bus approprié.
uartio.c – io routines pour les deux quincailleries.
m_I2C_1.c – routines i2c logicielles par [Michael Pearce]. Nous n’avons pas pu obtenir le matériel de photo i2c à travailler, nous avons donc utilisé cette précieuse bibliothèque. Le logiciel ne prend pas en compte le réglage de la vitesse I2C et semble fonctionner à environ 5 kHz.
SPI.c – Des routines qui conduisent le module SPI matériel.
Raw2Wire.c – Logiciel bibliothèque d’interface à 2 fils.
RAW3WIRE.C – Bibliothèque d’interface Software 3 fils (SPI).
L’entrée de l’utilisateur est conservée dans un tampon de 4 000 octets jusqu’à ce qu’un caractère nouveau (ENTER) soit détecté. Si le premier caractère de l’entrée est une option de menu (voir ci-dessous), la boîte de dialogue MENU est affichée, sinon la chaîne est analysée pour les données à envoyer sur le bus (voir Syntaxe). Le code consiste en un nombre embarrassant d’instructions de commutation et de code spaghetti.
Interface terminale
Plutôt que d’écrire un morceau de logiciel indésirable pour contrôler l’appareil, nous lui avons donné une interface de ligne de commande série qui fonctionnera avec n’importe quel terminal ASCII. Le pirate de bus répond aux commandes avec des codes de résultat à trois chiffres et un message court. Les codes sont créés avec une automatisation de PC. Nous avons inclus une table de codes de résultat dans l’archive du projet (ZIP).
Options de menu
Les options de menu sont des commandes de caractères unique qui n’impliquent pas les transferts de données. Entrez le caractère, suivi de , pour accéder au menu.
? – Afficher un menu d’aide avec des commandes et la syntaxe.
M – Définissez le mode de bus (SPI, I2C, UART, FIL RAW 2, FIL 3 RAW). suivi tout de suite par une invite de vitesse, de polarité et d’état de sortie (mode dépendant).
Vitesses de bus: SPI: 30, 125, 250, 1000KHz. I2C: 100, 400, 1000KHz. UART: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200BPS. Modes bruts: 1, 10, 50kHz.
Le réglage d’horloge inverse définit l’état inactif opposé de la normale (SPI normale: inactif basse; UART normal: Haute inactif): SPI: Haute au ralenti; UART: Highle bas.
Certains modes ont des modes de sortie High-Z facultatifs pour une utilisation avec des résistances à pull-up (bas = sol, haute = entrée).
L – Beggle Bit Transmit / Recevoir la commande: le plus / le moins significatif en premier.
P – SDA / SCL PIN RESISTOR RESISTOTEUR (3.3VOLTS). Valable uniquement dans les modes I2C et 2 fils RAW.
O – Format d’affichage de sortie du numéro de jeu. Le terminal peut afficher des nombres comme valeurs décimales, hexadécimales et binaires ASCII. Un quatrième format envoie l’octet brut et non transformé pour la lecture d’un texte formaté ASCII.
Syntaxe
Une syntaxe de base est utilisée pour communiquer avec des puces sur un bus. Les commandes de la syntaxe ont des fonctions génériques qui s’appliquent normalement à tous les types de bus.
A / A / @ – Basculer la broche auxiliaire. Capital “A” met à la hauteur des ensembles “A” au sol. @ Définit Aux en entrée (mode haute impédance) et lit la valeur de la broche.
[- Démarrer l’écriture des données. SPI / RAW 3 Fil: Chip Sélectionnez Activé. I2C / RAW 2 FIL: Condition de départ. RS232: Open Uart, jetez les octets reçus.
{- Démarrer les données écrivez avec des lectures. Même chose que [, sauf: SPI / Fil 3 RAW: Montrez l’octet de lecture pour chaque écriture. RS232: Données d’affichage car il arrive asynchronously.
] or } – end data write. SPI/raw 3 wire: chip select disabled. I2C/raw 2 wire: stop condition. RS232: close UART.
R/r – read byte. SPI/raw 3 wire: send dummy byte, return read. I2C: read byte with ACK. Raw 2 wire: read 8 bits. RS232: check UART for byte and return, or fail if empty. use 0r1…255 for bulk reads up to 255 bytes.
0b – write this binary value. format is 0b00000000 for a byte, but partial bytes are also fine: 0b1001.
0h or 0x – write this HEX value. format is 0h01 or 0x01. Partial bytes are fine: 0xA. A-F can be lower-case or capital letters.
0-255 – write this decimal value. any number not preceded by 0x, 0h, or 0b is interpreted as a decimal value.
, or space – Value delimiter. use a coma or space to separate numbers. any combination is fine, no delimiter is required between non-number values: {0xa6,0, 0 16 5 0b111 0haF}.
Direct bus manipulation commands for raw 2 wire mode and raw 3 wire mode.
^ – send one clock tick. use 0^1…255 for multiple clock ticks.
/ and \ – Toggle clock level high (/) and low (\). includes clock delay (100uS).
-/_ – Toggle data state high (-) and low (_). includes data setup delay (20uS).
! – read one bit with clock.
. – read data pin state (no clock).
& – delay 1uS. use 0&1…255 for multiple delays.
En l’utilisant
Here are two examples that show the Bus Pirate in action. Terminals must be set to ASCII mode with local echo, we used the Windows serial terminal. The PC-side serial connection is 115200bps, 8N1. The Bus Pirate must respond to any single line feed type (0x0a, 0x0d), or both (Windows style).
.I2C/SPI – Flash 24LC1025 EEPROM
Microchip’s EEPROMS are popular permanent-storage memory chips, the 24LC1025 has 128Kbytes of storage with an I2C interface. We can test this chip without bread-boarding a big circuit or writing code.
The picture shows an 24LC1025 connected to the Bus Pirate. The EEPROM works from 2.7 to 5volts, so we used the 3.3volt supply from the Bus Pirate to power the circuit. The on-board SDA/SCL pull-up resistors hold the I2C bus high, and eliminate the need for external resistors. A single 0.1uF capacitor decouples the EEPROM from the power supply.
Setup I2C mode
First, we setup the Bus Pirate for I2C mode and enable the pull-up resistors. considering that the Bus Pirate currently uses a software I2C library, the speed setting doesn’t really have an effect.
SPI>m <–enter m for mode select
1. SPI
2. I2C
3. UART
4. RAW 2 WIRE
5. RAW 3 WIRE
MODE>2 <–enter 2 for I2C
Ensemble de mode 900
Définir la vitesse:
1. 100KHz (Standard)
2. 400KHz (Fast Mode)
3. 1MHz (High Speed)
SPEED>1 <–speed doesn’t really do anything…
901 speed SET
202 I2C READY, P/p FOR PULLUPS
I2C>P <–enable the I2C pull-up resistors
205 I2C PULLUP ON
I2c>
Write to EEPROM (I2C)
All I2C operations begin with a start condition { or [, and end with a stop condition } or ]. A write begins by addressing the device (1 byte) and trying to find an acknowledgment bit (ACK). If the EEPROM responds, we can send the data location to write (2 bytes) and data payload (n bytes). The Bus Pirate automatically checks for an ACK at the end of each write, and ACKs each read.
The 24LC1025 base address is 1010xxy, where xx is figured out by the state of pins 2 and 3, and y is read (1) or write (0) mode. We tied pins 2 and 3 high, making the full write address 1010110. We’ll start writing to the device at the first data location (0 0), and write one to thirteen using a mix of data input formats (1…13).
I2C>{0b10100110 0 0 1 2 3 4 5 6 7 8 9 10 0xb 0xc 13} <–I2C command
210 I2C start condition <–bus start
220 I2C WRITE: 0xA6 got ACK: yes <–address sent and ACK received
220 I2C WRITE: 0x00 got ACK: yes <–write address
220 I2C WRITE: 0x00 got ACK: yes <–write address
220 I2C WRITE: 0x01 got ACK: yes <–data
...
220 I2C WRITE: 0x0D got ACK: YES
Condition d'arrêt 240 I2C
I2c>
Read from EEPROM (I2C)
Reading the 24LC1025 takes two steps. First, a write command with no data sets the address pointer. Second, a read comm