5.5.8 · D1 · Coding › Embedded Systems & Real-Time Software › DMA — memory-to-memory, peripheral-to-memory without CPU
Data ko jagah A se jagah B le jaana boring, repetitive kaam hai — aur computer ka brain (CPU) itna valuable hai ki usse iss par waste nahi karna chahiye. DMA ek doosra, chota worker hai jo hardware se bana hai, jiska ek hi kaam hai: ek address se doosre address par bytes copy karna, jabki CPU asli sochne ka kaam karta hai. Is page par baaki sab kuch sirf woh vocabulary hai jo kehne ke liye chahiye ki bytes kahan se aate hain, kahan jaate hain , kitne hain , aur kitni tezi se .
Is page par kuch bhi assume nahi kiya gaya . Parent note DMA ko samajhne se pehle, tumhare dimaag mein kuch words bilkul crisp hone chahiye. Hum har ek ko ek picture se banate hain, ek aisi order mein jahan har word sirf pehle se define kiye words use karta hai.
"Source", "destination", ya "address" ka koi matlab banne se pehle, tumhe memory dekhni hogi.
Definition Memory & address
Memory ek bahut lambi row of tiny boxes hai, jisme se har ek ek byte (0 se 255 tak ka number) hold karta hai. Har box par ek number chipka hota hai jise uska address kehte hain — jaise kisi street par ghar ke numbers. "Read" karna matlab kisi box ke andar dekhna hai; "write" karna matlab usme naya number daalna hai.
Figure dekho: chote ghar memory boxes hain. Har ghar ke upar wala number (0, 1, 2, 3 …) uska address hai — isi se tum keh sakte ho ki kaunsa box tumhara matlab hai . Andar ka number data hai — woh actual value jo store hai.
Intuition Addresses ki zaroorat kyun hai
Copy kuch nahi hai siwaaye is ke: "yahan wale box mein jo value hai, usse wahan wale box mein daalo." Yahan aur wahan ko describe kiye bina koi raasta nahi hai boxes ko naam dene ka. Address wahi naam hai. Neeche diye gaye har DMA symbol ultimately ek box number ya boxes ki count hai.
Related vault idea: peripherals bhi box numbers par rehte hain — dekho Memory-Mapped IO .
Definition Byte, word, item width
w
Ek byte ek memory box hai (8 bits, values 0–255). Ek word bytes ka ek chota group hai jise machine saath mein move karna pasand karti hai — aksar 2 ya 4 bytes. Item width , jise w likha jaata hai, simply itne bytes hain jo ek item mein hain jise tum move karna choose karte ho : w = 1 , 2 , ya 4 .
Figure mein, width w = 4 ka ek lavender item ek saath chaar boxes cover karta hai. DMA engine ek poora item ek hi grab mein le sakta hai agar boxes align hain ("aligned").
w kyun matter karta hai
Socho tum bricks carry kar rahe ho. Tum unhe ek ek karke le ja sakte ho (w = 1 ) ya chaar ko glue karke (w = 4 ). Same wall, lekin chaar-at-a-time matlab kam trips. Yahi poori wajah hai ki parent note kehta hai wider items faster hote hain — same number of bytes ke liye kam grabs.
w matlab zyada data."
Kyun sahi lagta hai: 4, 1 se bada dikhta hai. Fix: w chunk size per grab hai, total nahi. Same total bytes move karne ke liye tum bas kam grabs karte ho. Iske baare mein aur jab hum N milenge.
N , total bytes B
Count N kitne items hain jo tum DMA se move karne ko kehte ho. Total bytes B kitne actual boxes touch hote hain:
B = N ⋅ w
Worked example Same wall, different bricks
B = 4096 bytes move karo.
w = 1 ke saath: tumhe N = 4096 items chahiye.
w = 4 ke saath: tumhe N = 1024 items chahiye.
Same 4096 bytes, lekin doosre tarike se chaar guna kam grabs. Isse yaad rakho — parent ka "4× faster" ka claim seedha isi se aata hai.
S , Destination D
Source S woh address hai jahan se tum copy karte ho (woh box jo tum read karte ho). Destination D woh address hai jahan tum copy karte ho (woh box jo tum write karte ho). DMA transfer, at heart, yeh hai: "box S read karo, box D write karo, baar baar."
Figure mein coral arrow S se D ki taraf point karta hai — woh arrow hi copy hai. DMA jo kuch bhi karta hai woh wahi ek arrow N baar repeat karna hai, har baar S aur D ko aage nudge karte hue.
Yeh woh subtle part hai jis par parent note bahut zyada lean karta hai, toh hum isse dheere dheere build karte hain.
Δ (Greek "delta")
Symbol ==Δ == (ek triangle, "delta") ka matlab hai "change in" — kisi number ka ek moment se doosre moment tak kitna step hota hai. Toh Δ S hai "har item ke baad source address kitna move karta hai," aur Δ D wahi destination ke liye hai.
Item i move karne ke baad, addresses update hote hain:
S i + 1 = S i + Δ S , D i + 1 = D i + Δ D
Isse zor se padho: "agla source box current source box plus step Δ S hai."
Figure mein do behaviours side by side dikhaye gaye hain:
Dono increment karte hain (Δ S = Δ D = w ): arrow dono taraf aage barhta hai — yeh ek memory-to-memory copy hai, jaise kisi list ko duplicate karna.
Source fixed (Δ S = 0 , Δ D = w ): read-box wahi rehta hai jabki write-boxes ek ke baad ek fill hote hain — yeh peripheral-to-memory hai.
Intuition Source kabhi kabhi fixed kyun rehta hai?
Ek peripheral (jaise ek ADC ) tumhe fresh data ek fixed box se deta hai — uska data register (ek memory-mapped address). Naye readings usi box par aate hain har baar. Toh tum usi S ko baar baar read karte ho (Δ S = 0 ) lekin naye destination boxes mein scatter karte ho (Δ D = w ). Ek fixed peripheral box ko galti se increment karne par DMA unrelated hardware registers mein wander karta hai — silent corruption.
Recall
Δ se hi teen directions
Mem→Mem increments? ::: Dono: Δ S = Δ D = w
Periph→Mem increments? ::: Source fixed Δ S = 0 , destination Δ D = w
Mem→Periph increments? ::: Source Δ S = w , destination fixed Δ D = 0
Bus woh ek shared road hai jo CPU, memory, aur DMA engine ko connect karta hai. Sirf ek traveller ek waqt mein use kar sakta hai, toh kisi ko decide karna hota hai ki kaun jaaye — woh decider arbiter hai (dekho Bus Arbitration ).
CPU ki desk aur memory shelves ke beech ek one-lane hallway socho. Jab DMA hallway mein koi box carry kar raha hota hai, CPU ko apna data fetch karne ke liye wait karna padta hai. Isliye parent note insist karta hai ki DMA free nahi hai — CPU ki sochne ke liye free hai, lekin hallway ab bhi occupy karta hai.
Ab hum speed ki baat kar sakte hain — symbols ka aakhri group.
Definition Clock frequency
f , cycle, beat
Ek clock ek heartbeat hai jo hardware ko aage tick karta hai. ==f == frequency hai — kitne ticks per second, hertz (Hz) mein measure kiya jaata hai. Ek cycle ek tick hai. Ek beat ek item ke DMA kaam ke barabar hai (ek item read+write karo), jo kuch whole number of cycles c leta hai.
Worked example Sanity number
N = 1000 items, c = 1 cycle/beat, f = 48 MHz = 48 000 000 Hz:
t DMA = 48 000 000 1000 × 1 ≈ 20.8 μ s .
Yeh ek microsecond -scale job hai — isliye DMA fast peripherals ke saath up with reh sakta hai jo ek CPU loop miss kar deta.
Intuition "Cycles per beat"
c 1 se bada kyun ho sakta hai
Fast on-chip RAM ek tick mein respond karta hai, toh c = 1 . Ek slow peripheral keh sakta hai "ruko, main ready nahi" — extra wait states insert karte hue — toh ek beat zyada cycles leta hai, c > 1 . Bada c → har beat slower.
Ek interrupt ek hardware signal hai jo kehta hai "jo kar rahe ho band karo aur mujhe dekho. " DMA ek transfer-complete interrupt fire karta hai jab last beat khatam hoti hai, taki CPU ko pata chale ki data ab use karna safe hai. (Poora mechanism: Interrupts and ISRs .)
Common mistake "Main DMA start karne ke baad turant buffer read kar sakta hun."
Kyun sahi lagta hai: tumne start call kiya, toh ho gaya hoga. Fix: DMA asynchronously run karta hai — background mein. Pehle transfer-complete interrupt ka wait karna zaroori hai , warna tum half-filled, stale boxes read karte ho.
Memory as boxes with addresses
Source S and Destination D
Byte word and item width w
Count N and total bytes B
Increments delta S and delta D
Time equals N times c over f
Bus arbitration and stalls
Left side par sab kuch words hain; sab kuch single box "DMA transfer" mein flow karta hai right side par. Agar koi bhi left-hand box fuzzy hai, toh parent note mechanism ki jagah magic lagega.
Right side cover karo aur zor se jawab do. Agar koi atka, toh uska section upar dobara padho.
Address kya hota hai? Woh number jo ek memory box ko naam deta hai, taaki tum keh sako kaunsa box tumhara matlab hai.
Item width w kya hai? Ek item mein kitne bytes hain jo tum ek grab mein move karte ho (1, 2, ya 4).
Count N kya hai, aur total bytes B kaise milta hai? N = items ki sankhya; B = N ⋅ w .
S aur D kiske liye stand karte hain?Source (woh address jahan se read karte ho) aur Destination (woh address jahan write karte ho).
Δ ka kya matlab hai, aur ek peripheral source ke liye Δ S kya hoga?"Change in"; Δ S = 0 kyunki peripheral data register ek fixed box hai.
Bus ek bottleneck kyun hai? Yeh ek single shared road hai — ek waqt mein sirf CPU ya DMA mein se ek hi use kar sakta hai.
f kya hai, aur ek clock tick kitni lambi hoti hai?Clock frequency Hz mein; ek tick 1/ f seconds leti hai.
DMA transfer-time formula likho. t DMA = N c / f .
Buffer read karne se pehle interrupt ka wait kyun karna chahiye? DMA background mein run karta hai; data tab tak complete nahi hota jab tak transfer-complete interrupt fire na ho.