Úvod aneb princip víceprocesorové komunikace
Mikroprocesor AT89C2051 je vybaven jedním sériovým kanálem, který je schopen
pracovat v plném duplexním režimu. Elektrické vlastnosti výstupního kanálu
(otevřený kolektor) umožňují sběrnicové uspořádání vodičů. Této
vlastnosti se maximálně využívá v klasické multiprocesorové konfiguraci
(Maste-Slave). Sériový kanál je však nutné nastavit do módu 2 nebo 3, kde
se přijímá devět datových bitů, z nichž devátý bit se ukládá do
řídícího registru sériového kanálu (SCON). Sériový
kanál je možné naprogramovat s pomocí bitu SM2 tak, aby se při přijmu stop bitu aktivovalo
přerušení od sériového kanálu jen tehdy, je-li devátý
přenosový bit roven jedné. Je-li přenos devíti bitů chápán jako adresa
podřízeného mP, pak při přenosu 8-mi bitových informací bude
příjem těchto dat aktivován jen u toho podřízeného mP,
který byl v prvním 9-ti bitovém slově správně naadresován a proběhla nová
inicializace sériového kanálu v modu 1 na přenos 8-mi bitů. Po ukončení přenosu dat je
nutné opětovně inicializovat sériový kanál na přenos 9-ti bitů. Tento princip lze
použít všude tam, kde lze lehce nastavit devítibitovou komunikaci na sériové
lince. Pokud použijeme klasické PC jako řídící počítač, což v praxi často
bývá, vzniká problém realizace tohoto 9-ti bitového přenosu. Běžně
používané UARTy v PC totiž nedokáží přímý 9-ti bitový přenos a
proto není možné výhody tohoto principu přenosu pro multiprocesorové
řízení použít.
Na obrázku je naznačen princip multiprocesorové komunikace, který nevyužívá devátého bitu jako adresy. Veškerý přenos je uskutečněn jen v módu 1 (8 bitů). Chce-li nadřízený procesor (master) přenášet data do jednoho z podřízených procesorů (slave) vyšle blok dat, který je opatřen jednoznačnou adresou, která stanoví, komu jsou data určena. Všechny podřízené procesory (slave) blok dat přijmou, ale zpracovávat tato data bude jen ten procesor, u kterého souhlasí vyslaná adresa s adresou vlastní. Ostatní podřízené procesory vyslaná data nezpracovávají. Pro případ vysílání dat z podřízených procesorů (slave) k procesoru nadřízenému (master) je nutné zabezpečit takový režim na sběrnici, aby byla vysílána data pouze z jednoho podřízeného procesoru (slave).
Pro zajištění bezchybné komunikace na lince RS-232 je nutné, použít takový komunikační protokol, který jednoznačně určí komu je zpráva zasílána. V 9-ti bitové komunikaci byla adresa dána jedničkou v devátém bitu, tento stav v osmibitové komunikaci chybí, je proto nutné “rozdělit” tabulku ASCII znaků na znaky určené pro adresy, znaky určené pro přenos dat a případně jiné (pomocné) znaky. V praxi se již několikrát osvědčil předkládaný komunikační protokol, který vychází ze základní myšlenky tj. vše co jde po sběrnici RS-232 lze jednoduše monitorovat jako běžné “tisknutelné” znaky z ASCII tabulky. Proto se pro přenos dat používají běžné hexaznaky (0 až 9, A až F). Těmito znaky je možné přenést jakoukoliv informaci z nadřízeného mP (tedy i PC) do podřízeného mP, samozřejmě za cenu vysílání 2x více bytů.
Pro volbu režimu činnosti podřízeného mP byly zvoleny znaky pokračující v abecedě za F tj. G až Z. Takto máme k dispozici 20 režimů činnosti, což je v praxi více než dostačující.
A nyní k volbě adresy podřízeného mP. Zde nám velmi
dobře poslouží malá písmena celé abecedy tedy a až z (celkem 26 znaků).
Teoreticky lze připojit až 26 podřízených mikroprocesorů, přičemž i toto číslo je pro praxi
dostačující. Pokud by to někomu nestačilo je v ASCII tabulce k dispozici ještě celá
horní polovina. Pro zajištění spolehlivého přenosu adresy se tato adresa na
počátku vysílání zprávy dvakrát zopakuje.
Popis komunikačního protokolu
V tab. 1. je uveden tvar vysílané zprávy z nadřízeného mP (PC) k podřízenému. První dva znaky obsahují adresu
podřízeného mP, tak je zajištěno, že na další znaky ve
zprávě bude reagovat jen jeden podřízený mP. Třetím znakem je
znak volby režimu činnosti podřízeného mP a od 4 znaku jdou data v podobě
dvojic ASCII hexa znaků. Ve zvoleném příkladu jde o 4 znaky, tedy o přenos 16-ti bitového
čísla. Posledním znakem přenosového protokolu je zvolený koncový znak, v
našem případě je to kód 0DH tj. “CR” tedy přesun na nový řádek /
linku. Na monitoru sériové linky nebo i ve vytvořeném programu (Pascal, C ...) tento znak
způsobí odřádkování. Pokud by vysílaná zpráva měla být
delší, a pokud bychom chtěli zvětšit i spolehlivost přenosu dat, lze před koncový znak
“CR” vložit i jednobytový CRC součet. Z praxe však mohu konstatovat, že je to zcela
zbytečné, neboť přenos je dostatečně spolehlivý i při relativně velkém rušení.
tab. 1. Tvar komunikačního protokolu pro přenos dat od PC k podřízeným mP
adresa podřízeného mP | Modul "a" až "z" | ||||
adresa podřízeného mP | Modul "a" až "z" | ||||
nastavení režimu podřízeného mP | Příkaz "G" až "Z" | ||||
přenos 16-ti bitového | "0" až "F" hexadecimálně | ||||
slova v hexadecimální | "0" až "F" hexadecimálně | ||||
podobě jako ASCII | "0" až "F" hexadecimálně | ||||
znaky | "0" až "F" hexadecimálně | ||||
koncový znak přenosu CR | ! je povinný ! |
V tab. 2. je uveden tvar vysílané zprávy z podřízeného mP (tedy odpovědi na dotaz). Je vhodné aby zpráva zase začínala dvěma znaky adresy a jedním znakem režimu činnosti. Tím se totiž dostatečně potvrdí přenesený režim činnosti. Od 4 znaku jsou vysílána data opět v ASCII hexakódu. Posledním znakem je povinný koncový znak “CR”.
tab. 2. Tvar komunikačního protokolu pro přenos dat z podřízeného mP k PC
Poznámka | |||||
adresa podřízeného mP | Modul "a" až "z" | ||||
adresa podřízeného mP | Modul "a" až "z" | ||||
nastavený režim podřízeného mP | Příkaz "G" až "Z" | ||||
Přenos 16-ti bitového čísla | ASCII znaky | ||||
nebo běžného textu jako | ASCII znaky | ||||
ASCII znaky | ASCII znaky | ||||
ASCII znaky | |||||
ASCII znaky | |||||
koncový znak přenosu CR | ! je povinný ! |
Postřehy z praktického používání:
Uvedený komunikační protokol byl je již delší dobu používán na několika aplikacích k plné spokojenosti uživatelů a bez výskytu chyb. Lze tedy konstatovat jeho dostatečnou spolehlivost a především jednoduchost, zvláště když řídícím mP je klasické PC a sériové rozhraní RS-232. Jednoznačnou adresou a definovaným režimem činnosti je osloven jediný podřízený procesor k akci a případně k odezvě na sběrnici. Nemůže tedy dojít k již zmíněné kolizi ve vysílání.
Pokud podřízený mP nemá na zvolený režim činnosti reagovat odpovědí, lze nadefinovat “společnou” adresu a přes tuto adresu zadávat úkoly všem podřízeným mP najednou (např. uvedení do počátečního stavu, změna komunikační rychlosti, přechod do sleep režimu atd.).
Nesmírnou výhodou takto zavedené komunikace je skutečnost, že lze sériovou linku monitorovat jednoduchým prográmkem ( např. TTY nebo PPP) a vše co tam běží je jasně čitelné na obrazovce.
Další nespornou výhodou této komunikace je skutečnost, že je možné jednu
stranu (přijímací nebo vysílací) nahradit tímto monitorem a tak postupně
odlaďovat programy pro vysílání nebo příjem zprávy.