Arduino Due |
O Arduinu jsem publikoval serii postů v r. 2010. Poté jsem zjistil, že ty nejzajímavější věci, které se s ním dají dělat, spadají pod tzv. hackerský paragraf trestního zákoníku, a uchýlil se proto s vývojem a jeho výsledky do ústraní, resp. mimo prostor tohoto blogu.
Nyní nadešla správná chvíle, abych něco o svých pokrocích přece jen zveřejnil.
K prvnímu Arduinu Mega jsem si především pořídil dvě další, s procesorem ARM. Jak jsem totiž zjistil, v současné době jsou už ceny těchto procesorů na stejné úrovni, na které se před třemi lety pohybovaly osmibitové mikrořadiče, a problémem přestává být i SMD provedení ARM procesorů, které vývoj v prototypové fasi komplikuje, resp. prodražuje: např. Philips (NXP) nabízí tento třicetimegahertzový ARM procesor v pouzdře DIP-8.
Arduino Due je osazeno procesorem ATMEL AT91SAM3X8E, s maximální frekvencí 84 MHz, menší Netduino Mini používá koncepčně starší, avšak velmi levný ATMEL AT91SAM7X512, který může pracovat na frekvenci max. 48 MHz.
K čemu mikrokontrolery ARM potřebuji? Jako první aplikaci si pro ně vyvinu emulátor Mifare karet.
Ten jsem nejprve vytvořil pro Atmel AVR. S touto technologií, která je obecně pokládána pro emulaci karet v normě ISO/IEC 14443 za nedostatečnou, jsem dokázal kompletně naemulovat karty Mifare Ultralight a Mifare Classic, a díky tomu, že jsem programoval v assembleru, jsem dosáhl i při relativně nízké frekvenci krystalu 13,56 MHz uspokojivé rychlosti softwarové implementace algorithmu Crypto-1: prodleva v authentisační sekvenci je cca 1,1 ms, a bylo by možné dále ji zkrátit zrušením rigorosní kontroly paketu ze čtečky (pro zajímavost, takto vypadá Crypto-1 v assembleru pro AVR: [1], [2]).
Netduino Mini |
Nicméně když jsem začal implementovat kartu Mifare DESFire, zjistil jsem, že s takto pomalým procesorem nemohu emulovat všechny čtyři přenosové rychlosti, které karty podle ISO/IEC 14443-4 podporují. U nejvyšší rychlosti připadá na jeden bitový slot pouze 16 cyklů procesoru, a to je proklatě málo.
Kromě toho se objevují potíže i s tím, že procesor musí mít vlastní krystal a nemůže využívat pole čtečky pro externí hodiny, protože specifikace AVR nedovoluje nerovnoměrnou frekvenci externích hodin, a aby byl emulátor kompatibilní i se čtečkami využívajícími méně přesné krystaly, musel by se krystalový oscilátor podle čtečky synchronisovat – což znamená připojit ke krystalu další zbytečný hardware. Překvapivě, algorithmy DES a AES (pro DESFire EV-1) se na AVR ukázaly bezproblémovými (prosím, nekamenovat, vím, že permutace v DESu lze optimalisovat XORy, jen jsem to s ohledem na nízký časový zisk nepokládal za nezbytné).
Jedním řešením by bylo využít řadu Atmel XMEGA, jak to udělali např. Timo Kasper a jeho kolegové. S jistým překvapením jsem ale zjistil, že tyto procesory jsou v současné době už dražší než daleko výkonnější řada Atmel ARM, která masovým nasazením konkurenci doslova převálcovala nejen v tabletech, ale, zdá se, už i v oblasti mikrořadičů.
Vývoj pro AVR nezahazuji (je to ostatně přes 5000 řádků kodu), ale protože chci mít emulátor skutečně výkonný a universální, použiji pro něj ARM procesor.
O dalším průběhu, technickém i právním, budu na tomto blogu, případně na motácích, přiměřeně informovat.
Komentáře
RSS kanál komentářů k tomuto článku