Witam,
Od jakiegoś czasu Atmel/Microchip wprowadził do oferty nowe układy ATMEGA i TTINY z nowych serii określanych jako 0-series 1-series.
Ponieważ zacząłem wykorzystywać układy z tych serii postanowiłem napisać do nich własny bootloader z szyfrowaniem danych algorytmem AES.
Założeniem było aby go zmieścić w 768 bajtach kodu (mocno zoptymalizowany kod)
Pewnie niedługo zaprezentuję go na forum.
Jednak podczas pisania bootloadera, a dokładnie procedury szyfrowania AES128, natrafiłem na problem, że procedury poprawnie działały na "starych AVR", a na nowym ATTINY817 nie.
Jednym z elementów algorytmu szyfrowania AES jest przesuwanie wierszy w dwuwymiarowej tablicy, aby zrealizować to szybko i z minimalnym użyciem pamięci kodu. Tablica została umieszczona w pierwszych 16 rejestrach R0-R15,
co pozwoliło na wykorzystanie instrukcji MOV Rd,Rs.
Pozostałe operacje na tablicy były wykonywane przy użyciu instrukcji LD/ST/LDD/STD i rejestrów X/Y jako wskaźników.
W "starych AVRach" działało to poprawnie, bo dostęp do rejestrów R0-R31 jet możliwy poprzez adresację w pamięci RAM, R0 to po prostu komórka 0.
I tutaj pojawia się jedna z ważnych różnic pomiędzy "starymi AVR" a nowymi 0-series,1-series.
W nowych rejestry R0-R31 zostały usunięte z przestrzeni adresowej RAM. Nie można się do nich dostać poprzez rozkazy LD/ST/LDD/STD/LDS/STS.
Piszę o tym, bo inne różnice są mocniej zaznaczone w kartach katalogowych, a o tej jest tylko jedno zdanie, które łatwo przeoczyć o czym przekonałem się sam.
Jeżeli ktoś ma uwagi i doświadczenia związane z nowymi AVR to zachęcam do podzielenia się nimi z innymi.
Pozdrawiam
JarekC
Od jakiegoś czasu Atmel/Microchip wprowadził do oferty nowe układy ATMEGA i TTINY z nowych serii określanych jako 0-series 1-series.
Ponieważ zacząłem wykorzystywać układy z tych serii postanowiłem napisać do nich własny bootloader z szyfrowaniem danych algorytmem AES.
Założeniem było aby go zmieścić w 768 bajtach kodu (mocno zoptymalizowany kod)
Pewnie niedługo zaprezentuję go na forum.
Jednak podczas pisania bootloadera, a dokładnie procedury szyfrowania AES128, natrafiłem na problem, że procedury poprawnie działały na "starych AVR", a na nowym ATTINY817 nie.
Jednym z elementów algorytmu szyfrowania AES jest przesuwanie wierszy w dwuwymiarowej tablicy, aby zrealizować to szybko i z minimalnym użyciem pamięci kodu. Tablica została umieszczona w pierwszych 16 rejestrach R0-R15,
co pozwoliło na wykorzystanie instrukcji MOV Rd,Rs.
Pozostałe operacje na tablicy były wykonywane przy użyciu instrukcji LD/ST/LDD/STD i rejestrów X/Y jako wskaźników.
W "starych AVRach" działało to poprawnie, bo dostęp do rejestrów R0-R31 jet możliwy poprzez adresację w pamięci RAM, R0 to po prostu komórka 0.
I tutaj pojawia się jedna z ważnych różnic pomiędzy "starymi AVR" a nowymi 0-series,1-series.
W nowych rejestry R0-R31 zostały usunięte z przestrzeni adresowej RAM. Nie można się do nich dostać poprzez rozkazy LD/ST/LDD/STD/LDS/STS.
Piszę o tym, bo inne różnice są mocniej zaznaczone w kartach katalogowych, a o tej jest tylko jedno zdanie, które łatwo przeoczyć o czym przekonałem się sam.
Cytat:The register file is located in a separate address space and is therefore not accessible trough instructions operation on data memory.
Jeżeli ktoś ma uwagi i doświadczenia związane z nowymi AVR to zachęcam do podzielenia się nimi z innymi.
Pozdrawiam
JarekC