Paano at bakit magbasa ng mga datasheet kung ang mga microcontroller ay iyong libangan

Paano at bakit magbasa ng mga datasheet kung ang mga microcontroller ay iyong libangan

Ang microelectronics ay isang naka-istilong libangan sa mga nakaraang taon salamat sa mahiwagang Arduino. Ngunit narito ang problema: na may sapat na interes, mabilis mong malalampasan ang DigitalWrite(), ngunit ang susunod na gagawin ay hindi lubos na malinaw. Ang mga developer ng Arduino ay naglagay ng maraming pagsisikap sa pagpapababa ng hadlang sa pagpasok sa kanilang ecosystem, ngunit sa labas nito ay mayroon pa ring madilim na kagubatan ng malupit na circuitry na hindi naa-access ng baguhan.

Halimbawa, mga datasheet. Parang nasa kanila na lahat, kunin at gamitin. Ngunit ang kanilang mga may-akda ay malinaw na hindi itinakda sa kanilang sarili ang gawain ng pagpapasikat ng mga microcontroller; Minsan parangna sadyang inaabuso nila ang hindi maintindihan na mga termino at pagdadaglat kapag naglalarawan ng mga simpleng bagay upang malito ang mga hindi pa nakakaalam hangga't maaari. Ngunit hindi lahat ay napakasama; kung ninanais, magbubukas ang kabaong.

Sa artikulong ito ibabahagi ko ang karanasan ng isang espesyalista sa humanities na nakikipag-usap sa mga datasheet para sa mga layunin ng libangan. Ang teksto ay inilaan para sa mga baguhan na lumaki mula sa Arduino pants; ipinapalagay nito ang ilang pag-unawa sa mga prinsipyo ng pagpapatakbo ng mga microcontroller.

Magsisimula ako sa tradisyonal

Pag-flash ng LED sa Arduino

At kaagad ang code:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

"Ano ito? – Magtatanong ang isang sopistikadong mambabasa. – Bakit ka nagsusulat ng isang bagay sa PINB input register? Ito ay para sa pagbabasa lamang!" Talaga, Dokumentasyon ng Arduino, tulad ng karamihan sa mga artikulong pang-edukasyon sa Internet, ay nagsasaad na ang rehistrong ito ay read-only. Iyon ang naisip ko hanggang sa binasa ko ulit ito sheet ng datos sa Atmega328p, inihahanda ang artikulong ito. At doon:

Paano at bakit magbasa ng mga datasheet kung ang mga microcontroller ay iyong libangan

Ito ay isang medyo bagong pag-andar, wala ito sa Atmega8, hindi alam ng lahat ang tungkol dito o hindi binanggit para sa mga kadahilanan ng pabalik na pagkakatugma. Ngunit ito ay lubos na angkop para sa pagpapakita ng ideya na ang mga datasheet ay sulit na basahin upang magamit ang lahat ng mga kakayahan ng chip, kabilang ang mga hindi gaanong kilala. At hindi lang ito ang dahilan.

Bakit pa nagbabasa ng mga datasheet?

Karaniwan, ang mga inhinyero ng Arduino, na naglaro nang sapat sa mga LED at AnalogWrites, ay nagsisimulang ikonekta ang lahat ng uri ng mga module at chips sa board, kung saan mayroon nang nakasulat na mga aklatan. Maaga o huli, may lalabas na library na hindi gumagana ayon sa nararapat. Pagkatapos ay sinimulan ng amateur na kunin ito upang ayusin ito, at pagkatapos...

At isang bagay na ganap na hindi maintindihan ang nangyayari doon, kaya kailangan mong pumunta sa Google, magbasa ng maraming mga tutorial, maglabas ng mga bahagi ng angkop na code ng isang tao at sa wakas ay makamit ang iyong layunin. Nagbibigay ito ng isang malakas na pakiramdam ng tagumpay, ngunit sa katotohanan ang proseso ay tulad ng muling pag-imbento ng gulong sa pamamagitan ng reverse engineering ng isang motorsiklo. Bukod dito, ang pag-unawa sa kung paano gumagana ang bike na ito ay hindi tumataas. Alam ko, dahil ginawa ko ito sa aking sarili sa loob ng mahabang panahon.

Kung sa halip na ang kapana-panabik na aktibidad na ito ay gumugol ako ng ilang araw sa pag-aaral ng dokumentasyon ng Atmega328, makakatipid ako ng malaking oras. Pagkatapos ng lahat, ito ay isang medyo simpleng microcontroller.

Kaya, kailangan mong basahin ang mga datasheet ng hindi bababa sa upang isipin kung paano gumagana ang microcontroller sa pangkalahatan at kung ano ang magagawa nito. At higit pa:

  • upang suriin at i-optimize ang mga aklatan ng ibang tao. Ang mga ito ay madalas na isinulat ng parehong mga baguhan na muling likhain ang gulong; o, sa kabaligtaran, sadyang ginagawa ng mga may-akda ang mga ito nang labis na walang palya. Hayaan itong maging tatlong beses na mas malaki at mas mabagal, ngunit ito ay tiyak na gagana;

  • upang magamit ang mga chips sa isang proyekto kung saan walang nagsulat ng isang aklatan;

  • upang gawing mas madali para sa iyong sarili ang paglipat mula sa isang linya ng MK patungo sa isa pa;

  • upang sa wakas ay i-optimize ang iyong lumang code, na hindi umangkop sa Arduino;

  • upang matutunan kung paano direktang kontrolin ang anumang chip sa pamamagitan ng mga rehistro nito, nang hindi naaabala sa pag-aaral ng istruktura ng mga aklatan nito, kung mayroon man.

Bakit direktang sumulat sa mga rehistro kapag mayroong HAL at LL?

Diksyunaryo
HAL, High Abstraction Layer – isang library para sa pagkontrol sa isang microcontroller na may mataas na antas ng abstraction. Kung kailangan mong gamitin ang interface ng SPI1, i-configure at paganahin mo lang ang SPI1 nang hindi iniisip kung aling mga rehistro ang responsable para sa kung ano.
LL, Mababang Antas na API – isang library na naglalaman ng mga macro o istruktura na may mga address ng rehistro, na nagbibigay-daan sa iyong ma-access ang mga ito sa pamamagitan ng pangalan. Ang DDRx, PORTx, PINx sa Atmega ay LL.

Ang mga hindi pagkakaunawaan sa paksang "HAL, LL o mga rehistro" ay regular na nangyayari sa mga komento sa Habré. Nang walang pag-claim ng access sa astral na kaalaman, ibabahagi ko lang ang aking baguhan na karanasan at mga saloobin.

Ang pagkakaroon ng higit pa o hindi gaanong naisip ang Atmega at nabasa ang mga artikulo tungkol sa kahanga-hangang STM32, bumili ako ng kalahating dosenang iba't ibang mga board - Discovery, at Blue Pills, at kahit na mga chips lang para sa aking mga produktong lutong bahay. Lahat sila ay nakolekta ng alikabok sa isang kahon sa loob ng dalawang taon. Minsan nasabi ko sa sarili ko: “Ito na nga, pinagkadalubhasaan ko ang STM ngayong katapusan ng linggo,” inilunsad ng CubeMX, nakabuo ng setup para sa SPI, tiningnan ang nagreresultang pader ng teksto, na may maraming lasa ng mga copyright ng STM, at nagpasya na ito ay kahit papaano ay sobra-sobra. .

Paano at bakit magbasa ng mga datasheet kung ang mga microcontroller ay iyong libangan

Siyempre, maaari mong malaman kung ano ang isinulat ng CubeMX dito. Ngunit sa parehong oras ay malinaw na ang pag-alala sa lahat ng mga salita at pagkatapos ay isulat ang mga ito sa pamamagitan ng kamay ay hindi makatotohanan. At para i-debug ito, kung hindi ko sinasadyang makalimutang suriin ang isang kahon sa Cube, ayos lang iyon.

Dalawang taon na ang lumipas, dinilaan ko pa rin ang labi ko ST MCU Finder para sa lahat ng uri ng malasa, ngunit lampas sa aking pang-unawa, chips, at aksidenteng dumating sa kabuuan kahanga-hangang artikulo, kahit tungkol sa STM8. AT lahat ng biglaan Napagtanto ko na sa lahat ng oras na ito ay kumakatok ako sa isang bukas na pinto: ang mga rehistro ng STM ay nakaayos sa parehong paraan tulad ng sa anumang iba pang MK, at ang Cube ay hindi kinakailangan upang gumana sa kanila. Posible ba ito?..

Ang HAL at partikular ang STM32CubeMX ay isang tool para sa mga propesyonal na inhinyero na nagtatrabaho nang malapit sa mga STM32 chips. Ang pangunahing tampok ay isang mataas na antas ng abstraction, ang kakayahang mabilis na lumipat mula sa isang MCU patungo sa isa pa at kahit mula sa isang core patungo sa isa pa, habang nananatili sa loob ng linya ng STM32. Ang mga hobbyist ay bihirang makatagpo ng ganoong mga problema - ang aming pagpili ng mga microcontroller, bilang panuntunan, ay limitado sa uri ng AliExpress, at madalas kaming lumipat sa pagitan ng iba't ibang mga chip - lumipat kami mula sa Atmega patungo sa STM, mula sa STM patungo sa ESP, o anumang bagong bagay sa aming mga kaibigang Tsino. ibato sa amin. Ang HAL ay hindi makakatulong dito, at ang pag-aaral nito ay kakain ng maraming oras.

Nananatili ang LL - ngunit mula dito hanggang sa mga rehistro ay may kalahating hakbang. Sa personal, nakita kong kapaki-pakinabang ang pagsusulat ng aking mga macro na may mga address ng rehistro: Pinag-aaralan ko nang mas mabuti ang datasheet, sa tingin ko kung ano ang kakailanganin ko sa hinaharap at kung ano ang tiyak na hindi ko gagawin, mas mahusay kong inayos ang aking mga programa, at sa pangkalahatan, nakakatulong ang pagdaig sa pagsasaulo.

Bilang karagdagan, mayroong isang nuance sa sikat na STM32F103 - mayroong dalawang hindi tugmang bersyon ng LL para dito, isang opisyal mula sa STM, ang pangalawa mula sa Leaf Labs, na ginamit sa proyekto ng STM32duino. Kung sumulat ka ng isang open-source na library (at mayroon akong eksaktong ganoong gawain), dapat kang gumawa ng dalawang bersyon, o direktang i-access ang mga rehistro.

Sa wakas, ang pag-aalis ng LL, sa palagay ko, ay nagpapadali sa paglipat, lalo na kung plano mo ito mula pa sa simula ng proyekto. Exaggerated na halimbawa: isulat natin ang Arduino blink sa Atmel Studio nang walang LL:

#include <stdint.h>

#define _REG(addr) (*(volatile uint8_t*)(addr))

#define DDR_B 0x24
#define OUT_B 0x25

int main(void)
{
    volatile uint32_t k;

    _REG(DDR_B) |= (1<<5);

    while(1)
    {
        _REG(OUT_B) |= (1<<5);
        for (k=0; k<50000; k++);
        _REG(OUT_B) &= ~(1<<5);
        for (k=0; k<50000; k++);
    } 
}

Upang ang code na ito ay mag-blink ng LED sa isang Chinese board na may STM8 (mula sa ST Visual Desktop), sapat na upang baguhin ang dalawang address dito:

#define DDR_B 0x5007
#define OUT_B 0x5005

Oo, gumagamit ako ng isang tampok ng pagkonekta sa LED sa isang partikular na board, ito ay kumurap nang napakabagal, ngunit ito ay mangyayari!

Anong mga uri ng mga datasheet ang mayroon?

Sa mga artikulo at sa mga forum, parehong Ruso at Ingles, ang "mga datasheet" ay nangangahulugang anumang teknikal na dokumentasyon para sa mga chips, at ganoon din ang ginagawa ko sa tekstong ito. Sa pormal, ang mga ito ay isang uri lamang ng naturang dokumentasyon:

Datasheet - Mga katangian ng pagganap, taktikal at teknikal na katangian. Mandatory para sa anumang electronic component. Ang impormasyon sa background ay kapaki-pakinabang na panatilihing nasa kamay, ngunit walang gaanong mababasa dito nang maingat. Gayunpaman, ang mga mas simpleng chip ay kadalasang limitado sa isang datasheet upang hindi makagawa ng mga hindi kinakailangang dokumento; sa kasong ito Manwal ng Sanggunian ay kasama dito.

Manwal ng Sanggunian – ang mga tagubilin mismo, isang malusog na libro ng 1000+ na pahina. Ang gawain ng lahat ng bagay na nakasiksik sa chip ay inilarawan nang detalyado. Ang pangunahing dokumento para sa mastering ang microcontroller. Unlike datasheet, isinulat ang mga tagubilin para sa malawak na hanay ng mga MK; naglalaman ang mga ito ng maraming impormasyon tungkol sa mga peripheral na hindi available sa iyong partikular na modelo.

Manwal sa Programming o Instruction Set Manual – mga tagubilin para sa mga natatanging utos ng microcontroller. Idinisenyo para sa mga nagprograma sa wikang Assembly. Aktibong ginagamit ito ng mga may-akda ng compiler upang i-optimize ang code, kaya sa pangkalahatang kaso hindi namin ito kakailanganin. Ngunit ang pagtingin dito ay kapaki-pakinabang para sa pangkalahatang pag-unawa, para sa ilang partikular na utos tulad ng pag-alis sa isang interrupt, gayundin para sa aktibong paggamit ng debugger.

Application Tandaan – kapaki-pakinabang na mga tip para sa paglutas ng mga partikular na problema, madalas na may mga halimbawa ng code.

Errata Sheet – paglalarawan ng mga kaso ng hindi karaniwang pag-uugali ng chip na may mga opsyon sa workaround, kung mayroon man.

Ano ang nasa datasheet

Direkta sa Datasheet maaaring kailanganin namin ang mga sumusunod na seksyon:

Buod ng Device – maikling inilalarawan ng unang pahina ng datasheet ang device. Napaka-kapaki-pakinabang sa mga sitwasyon kapag nakakita ka ng chip sa isang lugar (nakita ito sa isang tindahan, na-solder ito, nakatagpo ng isang pagbanggit) at nais na maunawaan kung ano ito.

Pangkalahatang paglalarawan – isang mas detalyadong paglalarawan ng mga kakayahan ng mga chips mula sa linya.

Mga Pinout – pinout diagram para sa lahat ng posibleng chip packages (aling pin ang nasa kung aling binti).

Paglalarawan ng Pin – paglalarawan ng layunin at kakayahan ng bawat pin.

Mapa ng memorya – malamang na hindi namin kailangan ng isang address map sa memorya, ngunit kung minsan ay may kasama rin itong talahanayan ng mga rehistro ng block address.

Magrehistro ng Mapa – ang talahanayan ng mga address ng mga bloke ng rehistro, bilang panuntunan, ay matatagpuan sa datasheet, at sa Ref Manual - mga shift lang (mga offset ng address).

Electrical na mga katangian – sa seksyong ito kami ay pangunahing interesado ganap na pinakamataas na rating, na naglilista ng pinakamataas na load sa bawat chip. Hindi tulad ng hindi masisira na Atmega328p, karamihan sa mga MK ay hindi nagpapahintulot sa iyo na ikonekta ang mga seryosong pagkarga sa mga pin, na nagiging isang hindi kasiya-siyang sorpresa para sa mga Arduinist.

Impormasyon sa Package – mga guhit ng magagamit na mga kaso, kapaki-pakinabang kapag nagdidisenyo ng iyong mga board.

Manwal ng Sanggunian istrukturang binubuo ng mga seksyon na nakatuon sa mga partikular na peripheral na nakasaad sa kanilang pamagat. Ang bawat kabanata ay maaaring hatiin sa tatlong bahagi:

Pangkalahatang-ideya, pagpapakilala, Mga tampok – pangkalahatang-ideya ng mga peripheral na kakayahan;

Functional Paglalarawan, Gabay sa Paggamit o simpleng pangunahing bloke ng seksyon - isang detalyadong paglalarawan ng teksto ng mga prinsipyo ng peripheral device at kung paano ito gamitin;

Nagrerehistro - paglalarawan ng mga rehistro ng kontrol. Sa mga simpleng kaso gaya ng GPIO o SPI, maaaring sapat na ito para simulan ang paggamit ng mga peripheral, ngunit kadalasan kailangan mo pa ring basahin ang mga nakaraang bahagi.

Paano basahin ang mga datasheet

Ang mga datasheet, dahil sa nakagawian, ay tinatakot ka sa kanilang dami at kasaganaan ng mga salitang hindi maintindihan. Sa katunayan, ang lahat ay hindi nakakatakot kung alam mo ang ilang mga hack sa buhay.

Itakda magandang PDF reader. Ang mga datasheet ay nakasulat sa maluwalhating tradisyon ng mga tagubilin sa papel; mahusay silang i-print, ipasok gamit ang mga plastic na bookmark at tahiin. Ang hypertext sa kanila ay sinusunod sa mga bakas na dami. Sa kabutihang palad, hindi bababa sa ang istraktura ng dokumento ay dinisenyo na may mga bookmark, kaya ang isang angkop na mambabasa na may madaling pag-navigate ay lubhang kailangan.

Ang datasheet ay hindi aklat-aralin ni Stroustrup; naglalaman ito hindi na kailangang basahin ang lahat. Kung ginamit mo ang nakaraang payo, hanapin lamang ang nais na seksyon sa bookmarks bar.

Datasheet, lalo na Mga Manwal sa Sanggunian, ay maaaring ilarawan ang mga kakayahan ng hindi isang tiyak na chip, ngunit ang buong linya. Nangangahulugan ito na ang kalahati, o kahit na dalawang-katlo ng impormasyon ay hindi nauugnay sa iyong chip. Bago pag-aralan ang mga rehistro ng TIM7, mag-check in Pangkalahatang paglalarawan, na sa iyo ba?

Alam mo английский sapat na para sa pangunahing antas. Binubuo ng mga datasheet ang kalahati ng mga terminong hindi pamilyar sa karaniwang katutubong nagsasalita, at kalahati ng mga simpleng istrukturang nagkokonekta. Mayroon ding mahusay na mga datasheet ng Chinese sa Chinese English, kung saan ang kalahati ay mga termino din, at ang pangalawang kalahati ay isang random na hanay ng mga salita.

Kung magkikita kayo hindi pamilyar na salita, huwag subukang isalin ito gamit ang English-Russian na diksyunaryo. Kung ikaw ay nalilito hysteresis, kung gayon ang pagsasalin na "hysteresis" ay hindi magpapainit sa iyo. Gamitin ang Google, Stack Overflow, Wikipedia, mga forum, kung saan naroroon ang kinakailangang konsepto ipinaliwanag sa mga simpleng salita na may mga halimbawa.

Ang pinakamahusay na paraan upang maunawaan kung ano ang iyong binabasa ay check in action. Samakatuwid, panatilihing nasa kamay ang debug board na pamilyar sa iyo, o mas mabuti pa sa dalawa, kung sakaling may mali ka pa ring naintindihan at nakakita ng mahiwagang usok.

Isang magandang ugali na panatilihing madaling gamitin ang iyong datasheet kapag ikaw nagbabasa ng tutorial ng isang tao o pag-aaral sa aklatan ng ibang tao. Ito ay lubos na posible na makakahanap ka ng isang mas pinakamainam na solusyon sa iyong problema dito. At kabaliktaran - kung hindi mo maintindihan mula sa datasheet kung paano talaga gumagana ang rehistro, i-google ito: malamang, may isang taong naglarawan na ng lahat sa simpleng salita o nag-iwan ng malinaw na code sa GitHub.

Diksyunaryo

Ilang kapaki-pakinabang na salita at simbolo upang matulungan kang mabilis na masanay sa mga datasheet. Ang naalala ko sa nakalipas na dalawang araw, ang mga karagdagan at pagwawasto ay malugod na tinatanggap.

koryente
VDC, Totoo – “plus”, pagkain
vs, Vee – “minus”, lupa
kasalukuyan – kasalukuyan
boltahe - Boltahe
upang lumubog ang kasalukuyang – gumana bilang "lupa" para sa panlabas na pagkarga
sa mapagkukunan ng kasalukuyang – kapangyarihan panlabas na load
mataas na lababo/pinagmulan na pin – pin na may tumaas na "tolerance" sa pag-load

IO
H, Mataas – sa Vcc pin
L, Mababa – sa Vss pin
Mataas na Impedance, Hi-Z, lumulutang – walang nakalagay sa pin, “high resistance”, ito ay halos hindi nakikita sa labas ng mundo.
mahinang pull up, mahinang hilahin pababa – built-in na pull-up/pull-down na risistor, humigit-kumulang katumbas ng 50 kOhm (tingnan ang datasheet). Ito ay ginagamit, halimbawa, upang pigilan ang input pin na nakalawit sa hangin, na nagiging sanhi ng mga maling positibo. Mahina - dahil madaling "istorbohin" siya.
tulak hila – pin output mode, kung saan nagpapalipat-lipat ito Mataas и Mababa – regular na OUTPUT mula sa Arduino.
bukas na alisan ng tubig – pagtatalaga ng output mode kung saan ang pin ay maaaring alinman MababaO Mataas na Impedance/Lumulutang. Bukod dito, halos palaging hindi ito isang "tunay" na bukas na alisan ng tubig; mayroong mga proteksiyon na diode, resistors, at kung ano pa. Ito ay simpleng pagtatalaga para sa ground/none mode.
totoong open drain - ngunit ito ay isang tunay na bukas na alisan ng tubig: ang pin ay direktang humahantong sa lupa kung ito ay bukas, o nananatili sa limbo kung ito ay sarado. Nangangahulugan ito na, kung kinakailangan, ang isang boltahe na mas malaki kaysa sa Vcc ay maaaring maipasa dito, ngunit ang maximum ay tinukoy pa rin sa datasheet sa seksyon. Ganap na Pinakamataas na Mga Rating/Voltage.

Interface
sa serye - konektado sa serye
sa kadena – mag-assemble ng mga chips sa isang chain gamit ang serial connection, na nagdaragdag ng bilang ng mga output.
ilipat – shift, kadalasang nagsasaad ng kaunting paglilipat. Kaugnay nito, para lumipat и upang lumipat sa labas – tumanggap at magpadala ng data nang paunti-unti.
aldaba – isang trangka na sumasaklaw sa buffer habang ang mga bit ay inililipat dito. Kapag ang paglipat ay nakumpleto, ang balbula ay bubukas at ang mga bit ay nagsimulang gumana.
para mag-clock in – magsagawa ng bit-by-bit na paglipat, ilipat ang lahat ng mga piraso sa tamang lugar.
dobleng buffer, rehistro ng anino, rehistro ng preload – mga pagtatalaga sa kasaysayan, kapag ang rehistro ay dapat na makatanggap ng bagong data, ngunit hawakan ito hanggang sa ilang punto. Halimbawa, para gumana nang tama ang PWM, hindi dapat magbago ang mga parameter nito (duty cycle, frequency) hanggang sa matapos ang kasalukuyang cycle, ngunit maaari nang ilipat ang mga bagong parameter. Alinsunod dito, ang mga kasalukuyang ay pinananatili sa rehistro ng anino, at nahuhulog ang mga bago rehistro ng preload, na isinusulat sa kaukulang rehistro ng chip.

Lahat ng uri ng mga bagay
prescaler – frequency prescaler
upang magtakda ng kaunti - itakda ang bit sa 1
upang i-clear/i-reset nang kaunti - i-reset ang bit sa 0 (i-reset ang - tampok na STM datasheet)

kung ano ang susunod

Sa pangkalahatan, isang praktikal na bahagi ang binalak dito na may isang pagpapakita ng tatlong proyekto sa STM32 at STM8, na partikular na ginawa para sa artikulong ito gamit ang mga datasheet, na may mga bombilya, SPI, timer, PWM at mga interrupt:

Paano at bakit magbasa ng mga datasheet kung ang mga microcontroller ay iyong libangan

Ngunit mayroong maraming teksto, kaya ang mga proyekto ay ipinadala sa ikalawang bahagi.

Ang kasanayan sa pagbabasa ng mga datasheet ay makakatulong sa iyong libangan, ngunit malamang na hindi mapapalitan ang live na komunikasyon sa mga kapwa hobbyist sa mga forum at chat. Para sa layuning ito, kailangan mo pa ring pagbutihin ang iyong Ingles una sa lahat. Samakatuwid, ang mga nakatapos ng pagbabasa ay makakatanggap ng isang espesyal na premyo: dalawang libreng aralin sa Skyeng sa unang pagbabayad gamit ang code HABR2.

Pinagmulan: www.habr.com

Magdagdag ng komento