AVR a lockbity pri rušení EMI

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Ivan_Ryger
Příspěvky: 1368
Registrován: 02 bře 2005, 00:00
Bydliště: Jára Cimrman- "Uppsala, Uppsala,... tam jsem taky nebyl"

AVR a lockbity pri rušení EMI

#1 Příspěvek od Ivan_Ryger »

Dobrý deň páni, mám nasledovnú otázku. Budem mať mikrokontrolér s programom bežiacim v EMI zarušenom prostredí. Trocha sa obávam, aby pri nejakom náhodnom impulze na napájacej vetve sa nepremazal program vo FLASH pamäti. Pomôže tomu aktivovať v mikrokontroléry lockbit pre zákaz zápisu do pamäti?
Ďalšia otázka je, či pri aktivovaní lockbitu pre zákaz čítania programovej pamäti a ponechaní neaktívneho lockbitu zákazu zápisu do prog. pamäti sa bude dať verifikovať nahratý program?

Ďakujem.
Ivan.
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#2 Příspěvek od ZdenekHQ »

Puls, kterej teoreticky přepíše FLASH je už určitě za hranicí provozních podmínek, takže v prvé řadě ošetřit všechny ohrožené vstupy filtry (odpory,zenerkami atd.) a napájení transily (stačí běžnej 5V8).
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Uživatelský avatar
Ivan_Ryger
Příspěvky: 1368
Registrován: 02 bře 2005, 00:00
Bydliště: Jára Cimrman- "Uppsala, Uppsala,... tam jsem taky nebyl"

#3 Příspěvek od Ivan_Ryger »

Zdeňku, s tým som už počítal, takže nemusím zatiaľ riešiť ochranu proti prepisu.
Otázkou zostáva, či sa po zapísaní lockbitu na čítanie bude dať verifikovať prepísaný obsah FLASH.
Uživatelský avatar
Panda38
Příspěvky: 725
Registrován: 21 lis 2012, 00:00
Bydliště: Most, Praha, Lanžhot
Kontaktovat uživatele:

#4 Příspěvek od Panda38 »

Nebude. Verifikace znamená možnost zpětného čtení, což při lockbitu nelze. Tedy - samozřejmě při programování lze, protože lockbit se nahodí až po ukončení verifikace, ale později už nelze.
Uživatelský avatar
Ivan_Ryger
Příspěvky: 1368
Registrován: 02 bře 2005, 00:00
Bydliště: Jára Cimrman- "Uppsala, Uppsala,... tam jsem taky nebyl"

#5 Příspěvek od Ivan_Ryger »

Ďakujem, toto som potreboval počuť. Pre mňa to teda znamená, že sa procesor síce bude dať naprogramovať ale spätná verifikácia sa už nebude dať uskutočniť.
Uživatelský avatar
Panda38
Příspěvky: 725
Registrován: 21 lis 2012, 00:00
Bydliště: Most, Praha, Lanžhot
Kontaktovat uživatele:

#6 Příspěvek od Panda38 »

Program by měl umět hlásit zpět svou verzi a kontrolovat CRC kódu v paměti (po zapnutí a příp. i občas za provozu) - a při chybě se zablokovat.
Uživatelský avatar
Ivan_Ryger
Příspěvky: 1368
Registrován: 02 bře 2005, 00:00
Bydliště: Jára Cimrman- "Uppsala, Uppsala,... tam jsem taky nebyl"

#7 Příspěvek od Ivan_Ryger »

Toto je výborný nápad, no neviem zatiaľ, ako zrealizovať kontrolu CRC.
Uživatelský avatar
Panda38
Příspěvky: 725
Registrován: 21 lis 2012, 00:00
Bydliště: Most, Praha, Lanžhot
Kontaktovat uživatele:

#8 Příspěvek od Panda38 »

Pro výpočet je dobrý 16-bitový CRC-CCITT (např. XModem varianta), protože na něj je známý dostatečně rychlý výpočet bez nutnosti tabulky a je poměrně dost spolehlivý:

Kód: Vybrat vše

u16 crcCCITT1(u16 crc, u8 data)
{
   crc = (crc >> 8) | (crc << 8);
   crc ^= data;
   crc ^= (crc & 0xff) >> 4;
   crc ^= crc << 12;
   crc ^= (crc & 0xff) << 5;
   return crc;
}

#define CRCCCITT_XMODEM_INIT 0

u16 crcCCITT_XModem(const void* buf, int len)
{
   u16 crc = CRCCCITT_XMODEM_INIT;
   const u8* s = (const u8*)buf;

   for (; len > 0; len--)
   {
      crc = crcCCITT1(crc, *s++);
   }
   return crc;
}

Úplně na konec programu (jako poslední položku v datových konstantách) doplnit konstantu pro uložení CRC, ukazatel na ni uložit za tabulku vektorů. Pro výpočet CRC si napsat konzolovou utilitku, která po překladu vezme binár, přečte si z něj offset CRC a vypočítá CRC bináru po tento offset, CRC na tu pozici zapíše. Program v MCU obdobně vypočítá CRC (opět po CRC) a zkontroluje CRC, když se neshoduje, tak se sekne (příp. bude někde indikovat chybu).
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#9 Příspěvek od ZdenekHQ »

Já jsem před časem navrhoval mašinu, kde při oživování dostávaly procesory pěkně zabrat, kolem samá silovka a jiskry ( :D ) , programy se kousaly jedna radost (testoval jsem bez WD), ale nikdy se mě nepodařilo sejmout FLASH.

Nejhorší jsou zemní smyčky, pokud se všechno oddělí a rozdělí, dá se v klidu spát.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Uživatelský avatar
Ivan_Ryger
Příspěvky: 1368
Registrován: 02 bře 2005, 00:00
Bydliště: Jára Cimrman- "Uppsala, Uppsala,... tam jsem taky nebyl"

#10 Příspěvek od Ivan_Ryger »

Zdeňku, ďakujem.

Panda38: ak som tomu správne pochopil, na konci hexadecimálneho súboru dva byte mám rezervovať pre CRC16?
V programovej pamäti AVR bude teda rutina, ktorá prejde celý obsah programovej pamäti až po adresu danú pointerom na CRC, spočíta byte po byte CRC tohoto obsahu a následne porovná s hodnotou uloženou na adrese pointeru.

Pravdu povediac, nikdy pred tým som sa nezaoberal detekčnými a samoopravnými kódmi.
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#11 Příspěvek od ZdenekHQ »

Není na to náhodou nějakej "unifikovanej" algoritmus ? Mě to totiž nabízí samotný programátor, že mě vygeneruje CRC a uloží na konec paměti.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“