कसरी – बस समुद्री डाकू, सार्वभौल क्रमबद्ध
अपडेट: Jttag र अधिकको साथ नयाँ फर्मवेयर
हामी जहिले पनि इंस्टेटिकलाई इन्टरफेटेट्टेट गर्न ईन्टरफेसको लागि एक नयाँ चिप वा सिम कार्ड प्राप्त गर्न, तर हाम्रो उत्साह विशुृतिमा व्याकुल हुन्छ प्रोटोटाइपिंग प्रक्रिया द्वारा सामान्य उत्साहलाई। कुनै पनि चिपलाई अन्तर्क्रिया गर्दै एक सर्किट, लेख्ने, लेख्न कोड, र प्रोग्रामर बाहिर निकाल्ने; हुनसक्छ एक प्रोटोटाइपिंग PCB पनि।
केही वर्ष अघि हामीले पहिलो ‘बस समुद्री डाकू’ बनायौं, एक सार्वभौमिक बस इन्टरफेस जुन पीसी रेटिकल टर्मिनलबाट धेरै चिप्ससम्म कुरा गर्दछ। धेरै परम्परागत सिरियल प्रोटोकलहरू 3.3.3–5 वेलनमा समर्थन गरिन्छ, स्पाई, र एसिन्क्रोनस सिरियल। थप ‘कंग’ 2 – र wide-wire पुस्तकालयहरूले लगभग कुनै पनि स्वामित्व सिरियल प्रोटोकलहरू इन्टरफेस गर्न सक्दछन्। यो कुरालाई विचार गर्दा यो हाम्रो लागि यस्तो उपयोगी उपकरण हो, डिजाइन दशांश, र यो यहाँ प्रख्यात, र स्रोत कोड संग जारी।
अवधारणा अवलोकन
बस समुद्री डाकुता एक अनुक्रमिक टर्मिनल पुल हो जसमा बहु आईसी इन्टरफेस प्रोटोललमा। हामी कम्प्युटरमा सिरियल टर्मिनलमा आदेशहरू टाइप गर्छौं। कमाण्डहरू पीसी सिरियल पोर्ट मार्फत बस समुद्री डाकूमा जान्छन्। बस समुद्री डाकूसँग उचित प्रोटोकोलमा माइक्रोचिपसँग वार्ता गर्दछ, र परिणामलाई पीसीमा फर्काउँछ।
सबै पिनहरू आउटपुट .3.3volts, तर 5volt सहनशील छन्। अन-बोर्ड 3.3volt र onvolt पावर आपूर्तिहरू जडान गरिएको चिपलाई पावर गर्न उपलब्ध छन्। सफ्टवेयर कन्फिगर गरिएको I2C पुल-अप प्रतिरोधात्मक प्याकेज पूरा गर्नुहोस्।
सिरियल टर्मिनल इन्टरफेस कुनै पनि प्रणालीको साथ काम गर्दछ: पीसी, म्याक, लिनक्स, पामियोक्स, पाम पायलहरू, ईन्टस उपकरणहरू, आदि; कुनै क्रेपवेयर आवश्यक छैन। हामीले एक USB उपकरण छलफल गरी, तर USB लेड-आयोजित उपकरणहरूको पर्याप्त संख्यासँग उपयुक्त छैन जुन सिरियल पोर्ट हुन्छ। हामी पनि 5 वोल्ट सहनशील इनपुटहरू सहित एक .33 वोभल उपकरण चाहान्छौं, तर धेरै लोकप्रिय मार्फत USB USB MicroContlols 5volt भागहरू (E.g. Pic18FX50)
बसको बस समुद्री डाकूले हाल उच्च-स्पीड ईन्टरफाइक्रिंगको लागि तीन हार्डवेयर प्रोटोकलहरू ‘बोल्छ, र सजिलो बस हेरफेरका लागि दुई सफ्टवेयर प्रोटोकल पुस्तकालयहरू छन्। सिद्धान्त र प्रत्येक प्रोटोकोलको विशिष्टता हामीले यहाँ कभर गर्न सक्दछौं, तर यी ट्यूटोरियलहरू जाँच गर्नुहोस्:
I2c
एक ढिलो 2 तार बस। विकिपेडिया I2C पृष्ठभूमि को लागी सुरू गर्न एक भयानक ठाउँ हो। I2c-bus.org, रोबोट इलेक्ट्रोनिक्स, इम्बेडेड प्रणाली एकेडेमी, र एम्बेडेड.कनेंडर छ।
प्राणी
एक आधारभूत • तार बस। विकिपीडियासँग पृष्ठभूमि छ; इम्बेडेड..com सँग एक डरलाग्दो ट्यूटोरियल छ र I2C को तुलनामा छ।
विश्वव्यापी एशिन्क्रोनस रिसीभर ट्रान्समिटर (UAT वा क्रमबद्ध)
एक घडी र समय निर्भर सिरियर प्रोटोकल उत्तम पीसी सिरियल पोर्ट प्रोटोकोलको रूपमा देखा पर्दछ। विकिपीडियासँग एसिन्क्रोनस सिरियल प्रोटोकलहरूमा पृष्ठभूमि छ।
कच्चा 2 तार
यो एक जेनेरिक 2 तार प्रोटोकल पुस्तकालय हो, I2C को जस्तै B2C को जस्तै। I2C र धेरै स्वामित्वको स्वामित्व 2 तार प्रोटोकलहरू यस मोडमा उपलब्ध बस coverms प्रयोग गरेर गठन गर्न सकिन्छ। यस पुस्तकालयलाई गैर-I2C 2 तारका उपकरणहरूसँग काम गर्न प्रयोग गर्नुहोस्, जस्तै स्मार्टकार्ड वा सेन्सर्शिन SHT11 तापमान / आर्द्रता सेन्सरहरू।
कच्चा w तार
यो एक सामान्य-तार प्रोटोकोलो पुस्तकालय हो, स्पाइटिक तर हार्डवेयर मोड्युलको अवरोध बिना। यस पुस्तकालयको साथ प्रयोग गर्न यो पुस्तकालयको साथ काम गर्न प्रयोग गर्नुहोस् जुन गैर-BIT बिच उपयुक्त – तार प्रोटोकलहरू, जस्तै स्पार्कफान नोकिया 61100 LCD नक-अफ। यस मोडमा उपलब्ध बस रयेस प्रयोग गरेर ar तारको धेरै
हार्डवेयर
पूर्ण आकार pcb प्लेसमेन्ट छवि (पीएनटीएच) को लागी क्लिक गर्नुहोस्। स्क्ल टर्प्लीहरूले पावर आपूर्तिमा जडान गर्छन्। Io पिनमा कनेक्टमा सात पिन हेडरहरूको प r ्क्ति। लेबल को बावजुद मात्र 7volts dc आवश्यक छ।
आलपिन
प्राणी
I2c
232232
B9
छत्त्सक गीौरवाह गर्ने पत्र
सोडा
–
B8
Clte
“Scl
–
B7
अरुमि
–
Rx
B6
सीएस
–
टिक्स
B5
चौि
चौि
चौि
भूमि
रखरको चाल्नु
रखरको चाल्नु
रखरको चाल्नु
यो तालिकाले प्रत्येक बस मोडको लागि पिन जडान देखाउँदछ। कच्चा 2 तार मोड I2C को रूपमा समान पिन कन्फिगरेसन प्रयोग गर्दछ। कच्चा w वायर मोडले एसपीआईको रूपमा समान पिन कन्फिगरेसन प्रयोग गर्दछ।
पूर्ण आकार सर्किट छवि (पीएनएसई) को लागी क्लिक गर्नुहोस्। सर्किट र PCB कार्यवेयर संस्करणको फ्रीवेयर संस्करणको प्रयोग गरेर सिर्जना गरिएको छ। परियोजना संग्रह डाउनलोड गर्नुहोस् (zip)।
PIC 24FJ64GAGG222
हामीले बस समुद्री डाकूमा एक PIC24FFJ6445 Micocuntrontrollar प्रयोग गर्यौं; यो हाम्रो मिनी-सर्भर परियोजनामा प्रयोग हामीले प्रयोग गरेका थियौं। यो हामी चाहन्छौं (1mmmips), र परिधीय पिन चयन गर्नुहोस् सुविधाले हार्डवेयर स्पेस, यू सुरुमा हार्डवेयर स्पेस, यूएटा र I2C मोड्युलहरूलाई आउटपुट पिनहरू साझेदारी गर्न अनुमति दिन्छ। प्रत्येक पावर पिनलाई एक विचलन कवच चाहिन्छ (C12,1)), र MCLR प्रकार्यलाई पिन 1 र 343volts बीचको प्रतिरोधक (R7) आवश्यक छ। फोटोको आन्तरिक भोल्टेज नियामक छ जुन 10 यूएफ टन्टलमुयम (C3) चाहिन्छ, यद्यपि हामीले एक सादा इलेक्ट्रिकल क्षमतामा बिना मुद्दा प्रयोग गर्थ्यौं। प्रोग्रामिंगको बारेमा पढ्नुहोस् र हाम्रो PIC24F ट्यूटोरियलमा यस चिपसँग काम गर्दै पढ्नुहोस्। यदि तपाईंसँग फोटो डिबगर छैन भने, धेरै पाठकहरूले EBay मा अन्तर्गत-$ 40 ICD2 क्नोनहरू सिफारिस गर्छन्।
फोटो 3.3vollts मा चल्छ, तर डिजिटल-मात्र पिनहरू 5volt तर्कको लागि डिजिटल-मात्र पिनहरू हुन्। पिन 1 14,1,11,, 12,21, 12, 22, जुन हामी डाटसथिटबाट खोजिरहेका थियौं र कुनै पिनहरू 11-2, पृष्ठ 11-2, पृष्ठ 11-26)। डाटशेटका अनुसार,I2C pins are also 5volt tolerant. There’s a bunch of conflicting information on the web, but datasheet page 230, parameter DI28, clearly states that the max input for a 24FJ64GA002 I2C pin without analog circuitry is 5.5volts.
Pins 21 and 22 (RB10/11) can pull-up SDA/SCL through resistors R4 and R5.
MAX3223CPP
This chip converts 3.3volt serial output to +/-10volt RS232 signals compatible with a PC serial port. The MAX3223CPP is a 3-5volt version of the MAX202, with extra power saving features. MAX RS232 transceivers require four 0.1uF capacitors for a charge pump (C4,5,7,8), and one decoupling capacitor (C17). We used the same capacitors for everything.
We used a MAX3223CPP, which doesn’t seem to be available anymore. MAX3223EEPP+ is a pin-compatible newer version, available at Digikey for $7. Ouch! None of the 3223’s power saving features are used, so a cheaper, simpler 3.3volt RS232 transceiver must be substituted if in any way possible.
बिजुली आपूर्ति
Most chips can be powered from the Bus Pirate’s on-board 3.3volt and 5volt supplies. 5volts is supplied by a common 7805 regulator (VR2) and two decoupling capacitors (C9,10). An LM317 adjustable regulator (VR1) is set to 3.3volts using two resistors (R2,3), and requires two decoupling capacitors (C6,7). The circuit requires a 7-10volt DC supply (J1).
Part list
Part
Value
IC1
PIC24FJ64GA002-DIP
IC2
MAX3223CPP (try MAX3223EEPP+)
C3
10uF capacitor (preferably tantalum)
C4-13,17
0.1uF capacitors
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 terminals) *untested
X2
DB9 female connector (serial port) *untested
ICSP,SV3
.1″ pin header, ideal angle
J1
Power jack, 2.1mm pin
LED1
3mm LED (optional)
Firmware
The firmware is written in C using the complimentary demonstration version of the photo C30 compiler. learn all about working with this photo in our introduction to the photo 24F series. परियोजना संग्रह डाउनलोड गर्नुहोस् (zip)।
main.c – Handles the user terminal interface.
busPirate.c – Abstraction routines that convert syntax to actions on the proper bus.
uartIO.c – IO routines for both hardware UARTs.
m_i2c_1.c – software I2C routines by [Michael Pearce]. We couldn’t get the photo hardware I2C to work, so we used this valuable library. The software doesn’t take into account the I2C speed setting, and seems to work at about 5KHz.
SPI.c – routines that drive the hardware SPI module.
raw2wire.c – software 2-wire interface library.
raw3wire.c – software 3-wire (SPI) interface library.
User input is held in a 4000 byte buffer until a newline character (enter) is detected. If the first character of the input is a menu option (see below), the menu dialog is shown, otherwise the string is parsed for data to send over the bus (see syntax). The code consists of an embarrassing number of switch statements and spaghetti code.
Terminal interface
Rather than write a junk piece of software to control the device, we gave it a serial command line interface that will work with any ASCII terminal. The bus pirate responds to commands with three digit result codes and a short message. The codes are created with PC automation in mind. We’ve included a table of result codes in the project archive (zip).
Menu options
Menu options are single character commands that don’t involve data transfers. enter the character, followed by , to access the menu.
? – show a help menu with commands and syntax.
M – set the bus mode (SPI, I2C, UART, raw 2 wire, raw 3 wire). followed right away by a prompt for speed, polarity, and output state (mode dependent).
Bus speeds: SPI:30, 125, 250, 1000KHz. I2C:100, 400, 1000KHz. UART: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200bps. Raw modes: 1, 10, 50KHz.
Inverse clock setting sets the idle state opposite of normal (normal SPI:idle low; normal UART:idle high): SPI:idle high; UART:idle low.
Some modes have optional high-z output modes for use with pull-up resistors (Low=ground, High=input).
L – Toggle bit transmit/receive order: most/least significant bit first.
P – SDA/SCL pin pull-up resistor toggle (3.3volts). only valid in I2C and raw 2 wire modes.
O – set number output display format. The terminal can display numbers as decimal, hexadecimal, and binary ASCII values. A fourth format sends the raw, unprocessed byte for reading ASCII formatted text.
Syntax
A basic syntax is used to communicate with chips over a bus. Syntax commands have generic functions that normally apply to all bus types.
A/a/@ – Toggle auxiliary pin. capital “A” sets AUX high, small “a” sets to ground. @ sets aux to input (high impedance mode) and reads the pin value.
[ – start data write. SPI/raw 3 wire: chip select enabled. I2C/raw 2 wire: start condition. RS232: open UART, discard received bytes.
{ – start data write with reads. same as [, except: SPI/raw 3 wire: show the read byte for each write. RS232: display data as it arrives asynchroutounly।
] वा} – अन्त डाटा लेख्नुहोस्। स्पाइ / कच्चा are तार: चिप चयन असक्षम गरिएको। I2c / कच्चा 2 तार: सर्त रोक्नुहोस्। 23232: बन्द गर्नुहोस्।
R / r – BETETE पढ्नुहोस्। स्पाइ / कच्चा w वायर: डमी बाइट पठाउनुहोस्, फिर्ता पढ्नुहोस्। I2C: ack को साथ तट पढ्नुहोस्। कच्चा 2 तार: B बिट्स पढ्नुहोस्। 232322: बाइट र फिर्ताको लागि UATE जाँच गर्नुहोस्, वा खाली भएमा असफल भयो। 0R1 प्रयोग गर्नुहोस् … 255 ले थोकको लागि 2 255 बाइट्ससम्म पढ्छ।
0b – यो बाइनरी मूल्य लेख्नुहोस्। ढाँचा 0 BB00000000000000000000000000000000 हो, तर आंशिक बाइट्स पनि ठीक छ: 0b1001।
0h वा 0x – यस हेक्स मूल्य लेख्नुहोस्। ढाँचा 0h01 वा 0x01 हो। आंशिक बाइट्स ठीक छन्: 0xa। ए-एफ कम-केस वा ठूला अक्षरहरूको हुन सक्छ।
0-2555 – यो दशमलव मान लेख्नुहोस्। कुनै पनि नम्बर 0x, 0 एच, वा 0 बीको दशमलव मूल्यको रूपमा व्याख्या गरिएको छैन।
वा स्पेस – मान डेलिमिटर। एक कोमा वा ठाउँ अलग नम्बरहरूमा ठाउँ प्रयोग गर्नुहोस्। कुनै पनि संयोजन ठीक छ, गैर-संख्या मानहरू बीच कुनै डेलिमिटर आवश्यक पर्दैन: {0xA6,0, 0 1 16} 0b11 0 BESF}।
सीधा बस हेरफेर आदेशहरू कच्चा 2 वायर मोड र कच्चा wore तारको मोडको लागि आदेशहरू।
^ – एक घडी टिक पठाउनुहोस्। 0 ^ 1 ^ 1 … 255 बहु घडी टिकको लागि 255 प्रयोग गर्नुहोस्।
/ \ – \ – क्लक क्वगल हाई उच्च (/) र कम (\)। घडीको ढिलाइ (100) समावेश गर्दछ)।
– / _ – टगल डाटाको उच्च (-) र कम (_)। डाटा सेटअप ढिलाइ (20us) समावेश गर्दछ।
! – घडी संग एक बिट पढ्नुहोस्।
। – डाटा पिन स्टेट पढ्नुहोस् (कुनै घडी छैन)।
& – ढिलाइ 1us 1us। 0 र 1 प्रयोग गर्नुहोस् … 255 बहु ढिलाइहरूका लागि।
यसलाई प्रयोग गर्दै
यहाँ दुई उदाहरणहरू छन् जुन कार्यमा बस समुद्री डाकू देखाउँदछ। टर्मिनलहरू स्थानीय इकोको साथ एस्सीआई मोडमा सेट गर्नुपर्दछ, हामीले विन्डोज सिरियल टर्मिनल प्रयोग गर्यौं। पीसी-साइड सीरियल जडान 1152200BPS, 8N1 हो। बस समुद्री डाकूले कुनै पनि एकल लाइन फिड फाइटर (0x0A, 0x0D), वा दुबै (विन्डोज शैली) लाई प्रतिक्रिया दिन पर्छ।
.I2C / spi – फ्ल्यास 2llc102223 EEPROM
माइक्रोचिपको ईएथिमहरू लोकप्रिय स्थायी-अपरिवर्तक मेमोरी चिप्स हुन्, 2llc102255 मा एक I2C ईन्टरफेसको साथ 128 केबीप भण्डारण छन्। हामी रोटी बिना एउटा ठूलो सर्किट वा लेख्न कोड बिना परीक्षण गर्न सक्दछौं।
तस्विरले बसमा एक 2lelc1022 देखाउँदछ जुन बस समुद्री डाकूमा। ईल्ज्री 2.7 बाट 5 बजेबाट काम गर्दछ, त्यसैले हामीले बसबाट 4.32 वुलुपल्ट आपूर्ति सर्किटलाई बिजुली चलायौं। अन-बोर्ड SDA / SCL पुल-अप प्रतिरोवारहरू I2C बस उच्च हो, र बाह्य प्रतिरोधकर्ताहरूको आवश्यकता समाप्त गर्दछ। एकल 0.1f कणले बिजुलीको आपूर्तिबाट EEPOROMSTAS
I2C मोड सेटअप
पहिले, हामी I2C मोडको लागि बस समुद्री डाकू स्थापना गर्दछौं र पुल-अप प्रतिरोधीहरू सक्षम गर्नुहोस्। बस समुद्री डाकूले हाल सफ्टवेयर I2C पुस्तकालय प्रयोग गर्दछ, गति सेटिंगले वास्तवमा प्रभाव पार्दैन।
MPI> MODE को लागि MPI> MEDER MO चयन गर्नुहोस्
1 spi
2. I2C
Un। Uart
Call। कच्चा 2 तार
कच्चा w तारर
मोड> 2 <-प्रविष्टि 2 <-ईन्डर 2 का लागि
Mot 00 मोड सेट
गति सेट गर्नुहोस्:
1. 100 खोज (मानक)
2. 400KHZ (फास्ट मोड)
1. 1mhz (उच्च गति)
गति> 1 <-speed वास्तवमा केहि गर्दैन ...
901 गति सेट
202 I2C तयार, p / p ताजाको लागि
I2C> p <-<-CC पुल-अप प्रतिरोवारहरू
205 I2C पुलअप मा
I2C>
EEPROM (I2C) लाई लेख्नुहोस्
सबै I2c अपरेसनहरू सुरू सर्तको साथ सुरू हुन्छ {वा [, एक स्टप सर्त} वा]। एक लेख्नुहोस् उपकरणलाई सम्बोधन गरेर सुरू हुन्छ (1 बाइट) र एक स्वीकृति बिट (ACK) फेला पार्न प्रयास गर्दै। यदि EEPROMES प्रतिक्रियाहरू, हामी डाटा स्थान पठाउन सक्दछौं (2 बाइट्स) र डाटा पेलोड (एन बाइट)। बस समुद्री डाकूले स्वचालित रूपमा प्रत्येक लेखनको अन्तमा ACK को लागी जाँच गर्दछ, र प्रत्येक पढ्छन्।
24lc12222 आधार ठेगाना 10100XXY हो, जहाँ XX पिन 2 र 3 को राज्य द्वारा पत्ता लगाइएको छ, र Y पढ्नुहोस् (0) मोड (0) मोड हामीले पिन 2 र 3 उच्च बाँध्यौं, पूर्ण लेखन ठेगाना 101011010 बनाउँदछौं ।
I2C> {0 BB101010 0 0 0 0 0 {7 10 4 10 <10 0XB 0XC 13 <-i2C कमाण्ड 210 I2C सर्त सार्ज