5.5.5 · D4 · HinglishEmbedded Systems & Real-Time Software

ExercisesCommunication interfaces — UART, SPI, I2C (master - slave), CAN bus

3,774 words17 min read↑ Read in English

5.5.5 · D4 · Coding › Embedded Systems & Real-Time Software › Communication interfaces — UART, SPI, I2C (master - slave),

Shuru karne se pehle, ek reminder un symbols ka jo hum neeche baar baar use karte hain:


L1 — Recognition

L1 problems se pehle, yeh raha wiring picture — saare chaar interfaces side by side — har bus ki "shape" khud ek recognition cue hai. Dhyan do: UART TX↔RX cross karta hai; SPI har slave ke liye ek SS fan out karta hai; I2C do wires pull-ups ke through share karta hai; CAN ek single differential pair hai terminators ke saath.

Figure — Communication interfaces — UART, SPI, I2C (master - slave), CAN bus

Problem 1.1 (L1)

Chaar situations. Har ek ke liye, best interface batao (UART / SPI / I2C / CAN) aur ek word mein reason. (a) Ek microcontroller ek GPS module se 2-wire cable par baat karta hai, koi clock line available nahi. (b) Ek fast 20 MHz ADC padhna hai, full-duplex, sirf ek chip. (c) Barah chhote temperature sensors sirf do shared wires par lagane hain. (d) Ek car engine bay: sparks har jagah, kai controllers, message priority chahiye.

Recall Solution 1.1

Har clue ko upar wali wiring figure ke ek column se map karo. (a) UART — asynchronous, sirf 2 signal wires (TX, RX) plus shared ground, koi clock line nahi chahiye. (b) SPI — fastest (10s of Mbps), full-duplex, aur ek slave matlab "one SS per slave" ka cost bahut chhota hai. (c) I2C — 2 signal wires (SDA, SCL) plus ground, kai addressed devices share karte hain; koi per-device select line nahi. (d) CAN — differential (noise-immune, ground ki zyada parwah nahi) + message IDs jo priority bhi double karte hain.

Problem 1.2 (L1)

Ek idle UART line par, voltage HIGH hota hai ya LOW? Woh kaunsa ek event hai jo receiver ko jagaata hai?

Recall Solution 1.2

Idle = HIGH. Wake event hai START bit: ek falling edge (HIGH→LOW). Yahi receiver ki stopwatch ke liye "starting gun" hai. (Yaad raho: "HIGH" matlab high us shared ground ke relative jise dono chips connect karti hain.) Wiring figure mein, yeh woh falling edge hai jo pehli baar TX→RX line par appear hoti hai.

Problem 1.3 (L1)

I2C mein, SDA aur SCL dono open-drain hain. "Released" state mein (koi chip pull nahi kar rahi), wire kis level par baith-ti hai, aur kya cheez use wahan rakhti hai?

Recall Solution 1.3

"Released" = HIGH, jo pull-up resistor se high hota hai (figure ke I2C column par jo do resistors draw hain). Ek chip sirf LOW pull kar sakti hai ya chhood sakti hai; chhodna = resistor jeeta = HIGH. Yahi Wired-AND logic hai: LOW hamesha HIGH ko beat karta hai.


L2 — Application

Problem 2.1 (L2)

Ek UART 19200 baud, 8N1 par chalta hai (1 start, 8 data, no parity, 1 stop). 5-character string "Hello" bhejne mein kitna time lagega, milliseconds mein?

Recall Solution 2.1

KYA KARNA HAI: bits count karo, bit time se multiply karo. KYU: start/stop bits bhi wire par hote hain, isliye total time mein count hote hain.

  • Bits per character (8N1) .
  • .
  • Per char .
  • 5 chars .

Problem 2.2 (L2)

Same as upar lekin 8E1 (8 data + 1 even parity + 1 stop). Ab "Hello" ke liye total time?

Recall Solution 2.2

Ab bits/char .

  • Per char .
  • 5 chars . Kyun zyada time? Har character mein ek extra overhead bit — parity bit time leta hai chahe woh koi message data carry nahi karta.

Problem 2.3 (L2)

Ek I2C bus 400 kHz par hai jiska total capacitance hai. Spec rise time ko par cap karta hai. use karke, sabse bada allowed pull-up nikalo.

Recall Solution 2.3

KYA KARNA HAI: rise-time bound ko ke liye solve karo. KYU: bahut bada resistor → slow charging → "let go = HIGH" edge itni lazy hai ki threshold tak time par nahi pahunchwi. . Toh chunna chahiye. Neeche wala figure kya dikhata hai: teen RC charging curves same ke liye lekin teen alag pull-ups ke saath. Orange curve () dashed HIGH threshold ko dotted deadline se kafi pehle cross karta hai; violet curve () mushkil se deadline meet karta hai (yahi humara answer hai, limit); magenta curve () deadline ke baad bhi chadh raha hai — bahut slow, bus 400 kHz par fail ho jaata. Dekhna ki har curve dotted line se kahan milti hai yahi derivation hai.

Figure — Communication interfaces — UART, SPI, I2C (master - slave), CAN bus

Problem 2.4 (L2)

Ek SPI slave ko ek SS line har slave ke liye chahiye. Agar ek master ko 6 SPI slaves se baat karni ho (no daisy-chain), toh master se kul kitne wires niklenge? (MOSI, MISO, SCLK shared count karo, plus har slave ke liye ek SS.)

Recall Solution 2.4

KYU MOSI + MISO + SCLK shared hain (ek baar count karo): yeh teen data out, data in, aur clock carry karte hain. Har slave same clock aur same data lines sunता hai — sirf selected slave actually respond karta hai — toh sabhi slaves ek hi copy par hang off kar sakte hain. Inhe share karna kuch cost nahi karta, toh hum total count karte hain. KYU har slave ke liye ek SS (count ): SPI mein koi addressing nahi hai. Master ka yeh kehna ki "I mean YOU" sirf us slave ki apni Slave Select line low pull karke hota hai. Agar do slaves ek SS line share karein, dono MISO drive karenge aur collision hogi. Toh har slave ko apna dedicated SS chahiye → slaves ke liye select lines. Shared: MOSI + MISO + SCLK . Selects: per slave . Total wires (plus ek common ground, implied). General rule: slaves ke liye wires.


L3 — Analysis

Problem 3.1 (L3)

Ek UART receiver STOP bit ko 9.5 bit-times (8N1) ke baad sample karta hai. Ek taraf ka clock constant fraction per bit se fast hai. Maximum (percentage mein) kya hai, jisse pehle last sample half-bit margin se drift na kare?

Recall Solution 3.1

KYA: sabse bura sample last wala hota hai, jahan error sabse zyada pile up hoti hai. KYU: har bit drift add karta hai; bits ke baad drift hai, aur yeh half a bit () se kam rehna chahiye. Isliye "±5% clock tolerance" UART ke liye folklore number hai.

Problem 3.2 (L3)

Do I2C masters lagbhag ek hi instant par start karte hain. Master A address bits 1 0 1 1 0 0 1 bhejta hai, Master B 1 0 1 0 1 1 0 (MSB first). Kis bit par collision resolve hoti hai, aur kaun jeetta hai? Wired-AND use karke explain karo.

Recall Solution 3.2

Bits ko line up karo aur yaad rakho: wired-AND bus par dominant/LOW (0) hamesha jeetta hai, aur jo master 1 bhejta hai lekin 0 padhta hai woh haar gaya. Confusion avoid karne ke liye, yahan dono counting conventions side by side hain. "Position number" 1 se count karta hai (human order, left to right); "index" 0 se count karta hai (programmer order).

position:  1  2  3  4  5  6  7
index   :  0  1  2  3  4  5  6
A       :  1  0  1  1  ...
B       :  1  0  1  0  ...
bus     :  1  0  1  0   <- yahan diverge hota hai

Positions 1–3 (indices 0–2) match karte hain. Position 4 = index 3 par, A 1 (recessive) bhejta hai, B 0 (dominant) bhejta hai. Bus 0 padhta hai. A dekhta hai usne 1 bheja lekin 0 padha → A haarta hai aur back off karta hai. B jeetta hai aur uncorrupted continue karta hai. Kyun lowest value jeetti hai: sabse pehla 0 (dominant) shared line ko neeche kheenchta hai; wahan 1 bhejna haarne wala move hai. Same non-destructive idea jaise CAN arbitration.

Problem 3.3 (L3)

Ek CAN bus ko 1 Mbps par chalna hai. Wire par signal speed hai. use karke, maximum bus length nikalo.

Recall Solution 3.3

KYU factor 2: far node ka ek dominant bit near node tak pahunchna chahiye aur far node ko bhi usi bit time mein result sunna chahiye — round-trip-worth of margin. Isliye classic CAN at 1 Mbps margins ke hisab se roughly 40–100 m tak limited hai.


L4 — Synthesis

Problem 4.1 (L4)

Design check: ek I2C bus, , itna current sink karna chahiye ki koi bhi device par ke saath valid LOW hold kar sake. Iska bhi hai aur (standard mode 100 kHz) meet karna hai. ki allowed range batao.

Recall Solution 4.1

Lower bound (current jo chip sink kare): Upper bound (rise time): Allowed range: . Common pick check: kya window ke andar hai? ✓ — haan, dono fences ke beech aaram se baitha hai (lower bound se ~ upar aur upper bound se ~ neeche), toh yeh ek safe standard choice hai. Kyun dono bounds: bahut chhota pull-down margin ko bhuka rakhta hai; bahut bada pull-up speed ko bhuka rakhta hai. Design window ke andar rehta hai. Neeche wala figure kya dikhata hai: values ki ek number line. Magenta vertical line lower fence (, "enough current sink karo") mark karta hai; violet line upper fence (, "fast enough rise karo") mark karta hai; unke beech shaded orange band allowed window hai; navy dot par humari chosen value safely andar dikhata hai.

Figure — Communication interfaces — UART, SPI, I2C (master - slave), CAN bus

Problem 4.2 (L4)

Tumhe ek flash chip se 1 KB (1024-byte) block move karna hai. Wall-clock transfer time compare karo: (a) SPI mode 0 at 8 MHz (8 clocks per byte, koi framing overhead nahi), vs (b) UART 8N1 at 115200 baud (10 bits per byte). Kaun fast hai aur kitne factor se (1 decimal tak round karo)?

Recall Solution 4.2

SPI: har byte = 8 clock cycles; clock period . Time . UART: har byte = 10 bits; . Time . Ratio faster on SPI. Kyun itna lopsided: SPI mein start/stop/parity framing bilkul nahi hai aur far higher clock hai — serial speed clock rate se set hoti hai, wire count se nahi.


L5 — Mastery

Problem 5.1 (L5)

-data-bit, 1 stop frame ke liye general UART clock-tolerance formula prove karo, jahan last-sampled bit centre start edge se bit-times par hai. Dikhao , phir aur ke liye evaluate karo.

Recall Solution 5.1

Setup. Start edge ke baad, receiver wait karta hai bit 0 ke centre tak pahunchne ke liye, phir har subsequent bit ke liye . Last (stop-region) sample ka centre baithta hai Drift. Per-bit clock error fraction ke saath, par accumulated timing error hai . Margin condition. Half-bit window ke andar land karne ke liye: Evaluate : Evaluate : Kyun kam data bits zyada error tolerate karte hain: chhote frame par kam drift accumulate hoti hai. Lamba frame tighter clocks demand karta hai. Isliye UART frames chhote rakhe jaate hain.

Problem 5.2 (L5)

Design + justify. Tumhe teen identical sensor chips ek microcontroller se connect karne hain. Har chip dono SPI aur I2C support karta hai. Cable run short hai, tumhe fewest wires chahiye aur teeno individually reachable hone chahiye. Interface choose karo, wire count batao, aur woh ek feature name karo jo us choice par >2 devices possible banata hai.

Recall Solution 5.2

Choice: I2C. Wire count signal wires (SDA + SCL), plus shared ground, chahe kitne bhi chips add karo. Kyun SPI nahi: SPI ko har slave ke liye ek SS chahiye → signal wires, aur koi addressing nahi. I2C har chip tak 7-bit address se pahunchta hai, toh teeno same do wires share karte hain. Enabling feature: open-drain outputs + pull-up resistors jo Wired-AND logic implement karte hain — har device safely ek wire share kar sakta hai kyunki woh sirf LOW pull ya release kar sakta hai, kabhi doosre driver se nahi lad sakta. push-pull se compare karo, jo short ho jaata agar do chips disagree karein. Caveat (mastery detail): teen identical chips same fixed address share kar sakte hain → collision. Real designs ko address-select pins ya I2C mux chahiye. (Agar chips re-address nahi ho sakti, toh SPI ke per-chip SS par fallback karo.)

Problem 5.3 (L5)

CAN sanity: ek network span karna chahiye. aur round-trip rule ke saath, maximum bit rate (kbps mein) kya hai, aur kyun speed simply badh nahi sakti?

Recall Solution 5.3

Step 1 — is length ke liye minimum bit time. Arbitration ko ek full round trip ek bit ke andar fit karna chahiye: Step 2 — bit rate mein convert karo. Bit rate sirf bit time ka reciprocal hai: Kyun speed nahi badh sakti: agar se neeche gira, toh ek haarne wala node far node ka dominant bit wapas sunne se pehle apna bit khatam kar deta. Use pata nahi chalta ki woh haara, do transmitters drive karte rehte, aur frame corrupt ho jaata. Distance aur speed trade off karte hain: ek fixed length par tum bus chhota kiye bina bit rate is ceiling se upar nahi badh sakte.


Recall Self-test summary (cloze)

UART idle level ::: HIGH Woh event jo UART receiver ko jagata hai ::: START bit (falling edge) N SPI slaves ke liye wire count (no daisy-chain) ::: 3 + N (plus shared ground) Woh hidden wire jo har single-ended bus ko chahiye ::: common ground (0 V reference) I2C "released" line level aur cause ::: HIGH, pull-up resistor se hold hota hai CAN dominant bit ::: 0 state, actively driven, hamesha jeetta hai CAN recessive bit ::: 1 state, released/floating, sirf tabhi bachta hai jab sab nodes release karein CAN arbitration mein kaun jeetta hai ::: numerically LOWEST ID (sabse zyada dominant/0 bits) UART clock tolerance for 8N1 ::: about ±5.26% (0.5/9.5) I2C pull-up par do bounds ::: lower sink current se, upper rise time se