Sistemele proiectate cu Flash se bazează pe microcontrolere care pot fi up-gradate (dezvoltate) în teren după instalare, furnizând un avantaj substanţial în zona pieţei. Caracteristicile pot fi adăugate şi pot deveni disponibile fără cheltuieli sau la un cost mic la utilizator, iar întreţinerea funcţiilor poate fi realizată de la distanţă. Memoria Flash poate fi utilizată la up-gradarea sau rularea diagnozelor (sintomelor) pe o reţea cu arie controlată (CAN) pe subsisteme automobile, aplicaţii casnice şi echipamente industriale, ca să nominalizăm câteva domenii de aplicare.
De exemplu, când un procesor principal într-o maşină de spălat este bazat pe Flash, maşina nu numai că poate fi reprogramată de un om de service, dar ea poate fi de asemenea programată sau diagnosticată prin Internet printr-o reţea CAN.
Într-o lume industrială nodurile traductoare rulează pe o reţea CAN care poate fi reconfigurată individual sau cu alocarea de caracteristici prin descărcarea de noi algoritmi la acel nod.
Tehnologia Flash permite reprogramări frecvente.
Tehnologia Flash, spre deosebire de tehnologia EPROM, permite reprogramarea unui dispozitiv astfel încât anduranţa memoriei program să o accepte. Parametrul anduranţă al memoriei program indică de câte ori o memorie program poate fi ştearsă şi scrisă, exprimat ca secvenţele ERASE / WRITE. Un microcontroler Flash de 8 biţi tipic, de exemplu, suportă 100.000 cicluri ERASE/WRITE pentru memoria program şi 1.000.000 cicluri ERASE/WRITE pentru memoria de date.
Alt parametru important pentru reprogramabilitate este timpul de scriere per bit, prin care se menţionează cât timp este cerut la programarea unei celule sau block de memorie program.
Timpul de scriere mai lung se întâlneşte la programarea unei noi secvenţe în dispozitiv. Astăzi un timp de scriere tipic pentru o celulă de memorie program este de o milisecundă. Permiterea dezvoltării de la distanţă prin memoria Flash este simplă, şi procedurile sunt similare pentru oricare producător de microcontrolere Flash. Mai întâi o sarcină de referinţă (boot) este destinată pentru Flash-ul de bază al microcontrolerului.
Aceasta permite programelor sau segmentelor de program să fie descărcate printr-un bus CAN în memoria program a microcontrolerului folosind mecanismul propriu de programare. Programul este transmis ca un flux de biţi în memoria FIFO de program a microcontrolerului înainte de memorarea lui în Flash. Sarcina de referinţă multiplexează între FIFO, propria programare şi software.
Microcontrolerul programat
Modul bus CAN trebuie setat în avans să recepţioneze identificatorul care anunţă pornirea procesului de dezvoltare. Pentru upgradare doi identificatori sunt importanţi. Identificatorul 0x300 indică procesul de dezvoltare că este pornit şi urmează mesajul care conţine informaţii de dezvoltare. Sfârşitul identificatorului de upgradare anunţă că dezvoltarea s-a efectuat cu succes de microcontroler. Organigrama pentru program este arătată în figura 1.
Sfârşitul transmiterii biţilor de date este indicat de un caracter NULL. Ultima informaţie transmisă de către nodul master este o sumă de control. Dacă ele sunt egale, procesul de dezvoltare s-a efectuat cu succes. Dacă nu, dezvoltarea nu s-a îndeplinit. Depinzând care caz s-a realizat, un identificator cu “Succes” sau “Cădere” este trimis înapoi la master. În cazul de “Cădere” procesul de dezvoltare fie este repetat fie apare un mesaj de eroare comunicat la staţia de service.
Bus-ul CAN
Versiunea CAN 2.0B este un protocol de comunicaţie serială ce suportă controale distribuite în timp real cu un nivel foarte ridicat al robusteţii. CAN utilizează o configurare bus master multiplă pentru transferul obiectivelor comunicării între nodurile reţelei.
Aplicaţii pentru gama CAN de la reţele de înaltă viteză la cablare multiplex de cost scăzut. De exemplu, CAN permite un cost efectiv de înlocuire a formelor de cablu în automobil. Echipamente ca unităţi de control motor, traductori, şi sisteme anti – frână sunt conectate folosind CAN cu rata biţilor până la 1 Mbiţi/sec. Robusteţea magistralei în medii cu zgomot şi abilitatea să detecteze şi să-şi revină din condiţii de defect de asemenea face bus-ul potrivit pentru aplicaţii de control industiale ca DeviceNet, SDS şi alte domenii de protocoale de magistrală.
CAN este un sistem de bus serial asincron cu o linie logică de bus. Ea are o structură de magistrală liniară, deschisă cu două sau mai multe noduri de bus egale. Numărul de noduri pe bus pot fi schimbate dinamic fără perturbarea comunicaţiei celorlalte noduri. Aceasta permite uşoare conectări şi deconectări ale nodurilor de bus pentru adăugarea de funcţii sistemului, recunoaşterea erorilor, sau monitorizarea bus-ului.
Logica magistralei corespunde la mecanismul “ŞI Cablat”. Biţii regresivi, uzual echivalent la logica 1, sunt înlocuiţi de biţii dominanţi, uzual de nivel logic 0. Cât timp nici un nod nu trimite un bit dominant, linia de bus este în regim regresiv, dar un bit dominant de la oricare nod generează starea de magistrală dominantă. Aşadar, un mediu pentru linia de bus CAN trebuie să fie ales astfel încât să fie capabil să transmită doi posibili biţi de stare (dominant şi regresiv). Unul dintre cele mai comune şi ieftine medii este perechea de fire torsadate. Liniile de bus sunt atunci numite “CANH” (sus) şi “CANL” (jos), şi pot fi conectate fie direct la noduri, fie printr-un conector. Nu există standard de definire CAN referitor la conectorul recomandat. Perechea de fire torsadate este terminată printr-un rezistor final la fiecare capăt al liniei de bus.
Viteza maximă pe bus este de 1Mbit pentru lungimi de bus de până la 10m. Pentru mai mult 10m viteza bus-ului trebuie redusă. De exemplu, o magistrală de 1.000m poate fi realizată cu o viteză a bus-ului de 10Kbit. Drivere speciale ar fi necesare pentru magistrale de lungimi peste 1.000m. Cel puţin 20 de noduri pot fi conectate fără echipament suplimentar.
Datorită naturii diferenţiale a transmisiei, CAN este insensibil la interferenţe electromagnetice din cauză că ambele linii de bus sunt afectate în acelaşi fel, lăsând semnalul diferenţial neafectat. Liniile de bus de asemenea pot fi ecranate ca să reducă emisia electromagnetică a magistralei însăşi, în special la rate de transmisie ridicate.
Datele binare sunt codate corespunzător codului Non-Return to Zero(NRZ) (Ne-Revenirea la Zero): nivel jos – starea dominantă; nivel sus – starea regresivă. Spre a asigura sincronizarea de ceas a tuturor nodurilor, este folosit bitul de umplutură. Aceasta înseamnă că pe durata transmisiei unui mesaj maxim cinci biţi consecutivi pot avea aceiaşi polaritate. Oricând cinci biţi consecutivi de aceiaşi polaritate au fost transmişi, emiţătorul va însera un bit adiţional în fluxul de biţi înaintea transmisiei biţilor suplimentari. Receptorul de asemenea verifică numărul de biţi cu aceiaşi polaritate şi îndepărtează biţii de umplutură din fluxul de biţi (decodarea).
În protocolul CAN nodurile de magistrală nu sunt adresate; informaţia de adresă este conţinută în mesajul care este transmis. Aceasta este făcută printr-un identificator care recunoaşte conţinutul precum viteza motorului, temperatura uleiului, etc. Identificatorul adiţional indică prioritatea mesajului. Valoarea binară mai scăzută a identificatorului arată mesaj de prioritate mai ridicată.
Pentru arbitrarea magistralei, este folosită Purtătoare Orientată cu Acces Multiplu / Detecţia Colizunilor (CSMA / CD) cu Arbitrare Ne-Distructivă (NDA). Dacă nodul A al magistralei trebuie să transmită un mesaj peste reţea, el mai întâi verifică dacă bus-ul este în starea de repaus folosind Purtătoare Orientată.
Dacă nici un nod nu este în starea de transmisie şi nici un alt nod nu doreşte să pornească transmisia în acelaşi moment, nodul A devine stăpânul magistralei şi trimite mesajul său. Toate celelalte noduri comută în modul de recepţie pe durata primului bit transmis (bitul Start Cadru). Fiecare nod al magistralei recunoaşte recepţia mesajului, verifică identificatorul mesajului şi-l memorează, dacă s-a cerut. Altfel, mesajul este înlăturat.
Dacă două sau mai multe noduri pornesc transmisia lor la acelaşi moment de timp (Acces Multiplu), coliziunea mesajelor este evitată prin arbitrarea de “bitul înţelept” folosind Detecţia Coliziunii / Arbitrare Ne-Distructivă, împreună cu mecanismul “ŞI Cablat” (biţii dominanţi înlocuiesc biţii regresivi). Fiecare nod trimite biţii de identificare a mesajului său şi monitorizează nivelul magistralei.
Un nod care a trimis un bit de identificare regresiv, dar citeşte înapoi unul dominant, pierde arbitrarea magistralei şi comută în regimul de recepţie. Această condiţie se realizează când identificatorul mesajului unui nod competitor are o valoare binară mai mică (starea dominantă = logică 0), care înseamnă că nodul competitor a transmis un mesaj cu o prioritate mai mare. Deci, nodul magistralei cu prioritatea mesajului mai ridicată câştigă arbitrarea fără să piardă timp prin repetarea mesajului.
Toate celelalte noduri încearcă să repete transmisia sa o dată ce bus-ul revine în starea de repaus.
Diferitelor noduri nu le este permis să trimită mesaje cu acelaşi identificator din cauză că arbitrarea ar cădea, şi ar conduce la coliziuni şi erori mai târziu în mesaj.
Specificaţiile CAN-ului original (Versiunile 1.0, 1.2 şi 2.0A) definesc identificatorul mesajului ca având lungimea de 11 biţi, care dă 2048 posibili identificatori de mesaje.
Versiunea 2.0B a fost actualizată să înlăture această limitare, care permite să fi utilizate lungimi ale identificatorului mesajului de 11 şi / sau 29 de biţi. Un identificator de lungime de 29 de biţi permite peste 536 milioane de identificatori de mesaje. Versiunea 2.0B a CAN este de asemenea menţionată ca fiind “CAN Extins”; Versiunile 1.0, 1.2 şi 2.0A sunt menţionate drept “CAN Standard”.
Un exemplu de implementare
Figura 2 arată o magistrală de reţea CAN într-un automobil care constă dintr-un nod principal şi o serie de noduri secundare. Masterul în acest exemplu este corpul principal al controlerului maşinii. Nodurile secundare au diferite funcţii precum controlul instrumentelor de bord şi citirea valorilor senzorilor.
O implementare tipică ar fi dezvoltarea nodului bateriei cu un nou algoritm de încărcare. Microcontrolerul Flash PIC18F258 cu 28 terminale cu placă de interfaţă CAN supervizează procesul de încărcare al bateriei maşinii. Nodul de asemenea comunică starea bateriei (încărcată, descărcată, tensiunea, atenţionare baterie descărcată) la nodul master. Un nou algoritm trebuie transferat de la o staţie de service (un PC conectat la corpul controler-ului) la microcontrolerul PIC18F258 pe nodul baterie. Pentru a îndeplini aceasta, staţia service încarcă algoritmul (în format binar) în corpul controlerului, care memorează algoritmul şi îl trimite pe bus-ul CAN la PIC18F258 pe nodul baterie. În acel moment PIC18F258 actualizează memoria sa de program. Acest lucru pare simplu, dar se cere o administrare a reţelei.
Pe o magistrală de reţea CAN pot fi o varietate de noduri CAN de la diferiţi producători de semiconductoare, fiecare dintre aceştia având diferite coduri de funcţionare (coduri OP) pentru instrucţiunile lor. Aceasta înseamnă că un cod OP diferit trebuie descărcat pentru fiecare nod.
Lucrul aceasta poate fi realizat fie prin desemnarea unui identificator la fiecare nod CAN, fie prin desemnarea unui identificator pentru procesul de actualizare (de exemplu, ID 0x300 înseamnă actualizarea cu noul algoritm) şi codare a informaţiei pentru nodul destinatar în primul bit de date.
Corpul controlerului porneşte secvenţa actualizării sale prin emisia identificatorului 0x300. Acesta indică un nou cod de program şi 0x01 în primul bit de date.
Pentru un procesor diferit în nodul de bază, de exemplu, primul bit de date ar fi codat ca 0x02. Fiecare microcontroler de pe reţea ar fi primul care recepţionează ID-ul 0x300 care anunţă că o procedură de actualizare este pornită. După ce ID-ul este recepţionat fiecare microcontroler din reţea ar decoda primul bit de date, care în acest caz are valoarea 0x01. Toate nodurile care nu ar fi actualizate ar interpreta această dată că el poate ignora tot ceea ce urmează mesajului 0x300 până când se recepţioneză un identificator care indică că procesul de actualizare a fost complet şi safisfăcător pentru microcontroler. Corpul controlerului va aştepta un anumit timp pentru acest ID. Dacă nu recepţionează ID-ul în timpul specificat el va indica o defectare a programului la staţia service. De acolo procesul de actualizare fie poate fi oprit pentru diagnosticare fie poate fi repetat.
Deoarece primul bit de date era 0x01, numai PIC18F258 ar recepţiona că urmează ID-ul cu 0x300 şi să memoreze datele. Toate celelalte microcontrolere din reţea ar ignora al doilea mesaj şi ce urmează mesajelor 0x300.
Folosirea memorie Flash furnizează abilitatea de actualizare a numeroaselor sisteme deja instalate în exploatare. Costurile asociate economisite prin adăugarea de noi caracteristici sau diagnosticarea completă pe sisteme instalate în exploatare furnizează avantaje complet competitive pentru orice aplicaţie.
Thomas Schmidt
Senior Automotive Application Engineer
Microchip Technology Inc.
www.microchip.com