
Чипүүд хоорондоо хэрхэн ярьдаг вэ? UART, I2C, SPI протоколуудын тухай

Э. Бумбаяр
Багш


Э. Бумбаяр
Багш
Таны гар утас, ухаалаг цаг эсвэл робот дотор олон арван жижиг чипүүд хоорондоо ямар нэгэн байдлаар мэдээлэл солилцож байдаг. Нэг хавтан дээрх чипүүд, мэдрэгч болон дэлгэцүүд голдуу UART, I2C, SPI гэсэн гурван үндсэн хэлээр ярилцдаг. Энэ гурван протоколыг ойлгосноор ямар ч микроконтроллер (microcontroller) дээр дурын модулийг холбож ажиллах боломжтой болно.
Компьютер доторх мэдээлэл бүхэлдээ 0 болон 1 битээс (логик элементүүдийн HIGH ба LOW хүчдэл) бүрддэг.
Parallel арга: 8 битийг 8 тусдаа утсаар нэгэн зэрэг илгээдэг.
Serial арга: Битүүдийг нэг утсаар ар араас нь цувуулан явуулдаг. Өргөн хаалгаар 8 хүн зэрэг орохын оронд нарийн коридороор нэг нэгээрээ цувж орохтой адил юм. Жижиг чипэнд зүү (pin) бүр үнэтэй тул орчин үеийн бараг бүх холболт serial хэлбэрээр ажилладаг.
Asynchronous (Цаггүй): Хоёр тал нийтлэг цагны дохиогүй, хурдаа урьдчилан тохиролцдог. UART ийм зарчмаар ажилладаг.
Synchronous (Цагтай): Нэг тал нь тусдаа утсаар цагны дохио (clock) өгч, «одоо бит унш» гэсэн хэмнэл барьдаг. I2C болон SPI ийм зарчимтай.

UART (Universal Asynchronous Receiver-Transmitter) бол хамгийн эртний бөгөөд энгийн протокол юм.
Холболт: Ердөө хоёрхон утастай. Нэг талын TX (илгээх - Transmitter) нөгөө талын RX (хүлээн авах - Receiver) рүү солбиж холбогдоно.
Ажиллах зарчим: Цагны утас байхгүй тул хоёр тал «секундэд хэдэн бит шилжүүлэх вэ» гэдгээ буюу baud rate-ийг урьдчилан тохиролцсон байх ёстой (хамгийн түгээмэл нь 9600 эсвэл 115200 bit/s). Хэрэв нэг тал нь 9600, нөгөө нь 115200 гэж буруу тохируулбал дэлгэцэнд утгагүй тэмдэгтүүд л гарч ирнэ.
Хэрэглээ: Arduino Serial Monitor, GPS модуль, Bluetooth модуль болон USB-serial адаптерууд бүгд UART ашигладаг.
Сул тал: Нэг UART шугаманд зөвхөн хоёр л төхөөрөмж хоорондоо ярьж чадна.

Мэдрэгч бүрт тусдаа утас зарцуулбал микроконтроллерийн оролт/гаралтын зүү (pin) маш хурдан дуусна. Энэ асуудлыг шийдэхээр 1980 онд Philips компани I2C (Inter-Integrated Circuit) протоколыг бүтээжээ.
Холболт: Өгөгдлийн SDA (Serial Data) болон цагны SCL (Serial Clock) гэсэн ердөө хоёрхон утсанд олон төхөөрөмжийг зэрэг залгаж болдог.
Хаяглалтын систем: Үүнийг ангийн хичээлтэй зүйрлэж болно. Багш (controller) ганцаараа цагийг барьж ярьдаг бол сурагч бүр (target) өөрийн гэсэн 7 битийн давхардалгүй дугаартай (хаягтай) байдаг. Багш «23-р дугаартай мэдрэгч ээ, температураа хэл» гэж дуудахад зөвхөн тэр мэдрэгч л хариулж, бусад нь чимээгүй сонсдог. 7 бит нь 128 хүртэлх хаяг үүсгэх ба нэг хос утсанд 100 гаруй төхөөрөмж зэрэг багтах боломжтой.
Хурд ба хэрэглээ: Стандарт хурд нь 100 kbit/s, fast mode нь 400 kbit/s байдаг ба сүүлийн хувилбарууд 3.4 Mbit/s хүртэл хурдтай байдаг. Температур, даралт мэдрэгч, OLED жижиг дэлгэц, цагийн чип (RTC) зэрэг Arduino kit-ийн ихэнх модуль I2C-ээр холбогддог.

Дэлгэцийн зураг эсвэл SD карт дээрх файл шиг их хэмжээний өгөгдлийг I2C-ийн хурдаар дамжуулбал хэт удааширна. 1980-аад оны эхээр Motorola компанийн гаргасан SPI (Serial Peripheral Interface) нь хурдыг нэгдүгээрт тавьсан протокол юм.
Холболт: Нийт 4 үндсэн утастай.
SCLK: Цагны дохио (Clock).
MOSI: Controller-оос Target руу өгөгдөл явах утас (Master Out Slave In).
MISO: Target-аас Controller руу өгөгдөл буцах утас (Master In Slave Out).
CS (Chip Select): Аль төхөөрөмжтэй ярихыг сонгох утас.
Ажиллах зарчим: SPI-д хаяг байдаггүй. Оронд нь төхөөрөмж бүрт тусдаа CS утас татаж, controller тухайн төхөөрөмжийн CS утсыг доош татан «одоо чамтай ярина» гэж мэдэгддэг. Цагны дохио бүрт MOSI болон MISO утсаар өгөгдөл хоёр тийшээ зэрэг зөөвөрлөгддөг тул жинхэнэ full duplex горимд ажилладаг.
Хурд ба хэрэглээ: Маш энгийн бөгөөд ямар нэгэн ACK (баталгаажуулалт) байхгүй тул маш хурдан ажилладаг. Практикт хэдэн арван MHz хурдтайгаар (flash санах ойн чипүүд 20–66 MHz хүртэл) өгөгдөл дамжуулдаг. SD карт, өнгөт TFT дэлгэц, Wi-Fi модулиуд SPI-г түгээмэл сонгодог.

Гурван протоколын гол ялгааг нэг хүснэгтэд харьцуулбал:

Гурвуулаа богино зайны холболт: нэг самбар эсвэл хэдэн метрийн дотор ажиллана. Урт зайнд автомашины CAN bus, үйлдвэрийн PLC-ийн хэрэглэдэг RS-485, Ethernet шиг өөр хэл хэрэгтэй болдог.

Arduino IDE-д гурван хэлэнд бэлэн сан бий: UART-д Serial, I2C-д Wire, SPI-д SPI. Бяцхан XIAO шиг ямар ч микроконтроллер дээр туршиж болно.
UART чат: хоёр самбарын TX-ийг нөгөөгийн RX-тэй солбиж, GND-г холбоод нэг самбарын Serial Monitor дээр бичсэн үсгээр нөгөөгийн LED-ийг асаа. Baud rate-ийг санаатай зөрүүлж юу болохыг ажигла.
I2C цаг агаарын станц: температур, чийгшлийн мэдрэгч ба OLED дэлгэцийг нэг SDA/SCL хосонд залгаж, утгыг дэлгэцэнд үзүүл.
SPI data logger: SD карт модульд мэдрэгчийн утгыг секунд тутамд файлд бичиж, дараа нь компьютер дээр график зур.
UART, I2C, SPI протоколууд үүсээд 40 гаруй жил өнгөрсөн ч өнөөдрийн ухаалаг төхөөрөмж бүрийн дотор амжилттай ажилласаар байна. UART нь хоёр төхөөрөмжийн хувийн яриа, I2C нь олон мэдрэгчийг холбох хаягтай анги, харин SPI нь дэлгэц болон санах ойн өндөр хурдны зам юм. Энэ гурвыг ялгаж сурснаар та ямар ч модулийн datasheet-ийг хараад хэрхэн холбохоо шууд ойлгох чадвартай болох юм.