ub's #20

ub's Space at the End of the Universe

Ako ub sdrive upgradoval

2017-10-28
Na jednom nemenovanom OC fore som sa nedavno docital, ze existuje sdrive-ng, ktore je schemou/suciastkami takmer totozne s povodnym sdrive. Jediny rozdiel medzi tymito dvomi projektmi je pouzite mcu, kde je v sdrive pouzita atmega8 a v sdrive-ng pinoutovo kompatibilna atmega328p.

Teda, nie zeby som bol atarista, ale atari800xe vlastnim a pred niekolkymi rokmi som si k nemu postavil aj sdrive. Nebolo to nic zlozite, kedze si vystaci s jednostrannou doskou, ktora by sa tym padom dala vyrobit aj v pohodli domova, ale kedze bola k dispozicii doska uz vyrobena (krupkaj vtedy daval vyrobit niekolko dosiek a nestihli sa mu vsetky rozchytat, za co mu este raz dakujem ;]), takze som sa nemusel zaoberat ani vyrobou dosky. Priznam sa, bol som aj rad, lebo sice je doska jednostranna a tak by sa dala hravo nazehlit, horsie to u mna ale je s vrtanim.. ani oci uz nemam co som mal kedysi a aj ruky sa viac trasu.. holt .. starneme uz od narodenia ;].

Nuz a ako som uz spominal, nedavno som sa docital ze existuje jednoduchy upgrade sdrive na sdrive-ng, vdaka comu clovek ziska moznost pouzivat fat32, alebo vytvarat prazdne diskety priamo na atari ci mat moznost v buducnosti upgradovat firmware jednoduchym nahratim novej verzie na sd kartu a zapnutim atari. Opat, nie zeby som mal atari pustene kazdy den, alebo kazdy tyzden, alebo ... to je jedno, upgrade je vsak jednoduchy, tak preco ho nespravit?

A tak som navstivil elektro obchod, zakupil par atmega328p (pre istotu, keby slo nieco velmi zlym smerom ;]). Ked som prisiel z obchodu, hned som vytiahol usbasp programator, ktorym som onehda programoval aj povodne sdrive, preskumal zapojenie kabla do pinov na sdrive (predsalen to uz je nejaky piatok), pri potrebe zapojenia +5V si spomenul na to, ze sdrive tento pin na programovacej liste vyvedene nema a tak som patral, kde ho zohnat. I nasiel som, vsak samotne sdrive musi byt tiez napajane a skadial inakadial ako zo sio konektora?

Teraz uz malo mat vsetko rychly spad. Rozbalil som balik sdrive-ng-1.4-bin.zip, nasiel v nom subor bootloader-m328.hex a zistil ako maju byt nastavene fuse bity. Ked som mal toto vsetko pripravene, pripojil som usbasp k PC a... a nic sa nestalo.

lsusb sa tvaril, ze ziadne nove usb zariadenie k pocitacu pripojene nebolo a tvrdil to tak nastojcivo, ze som bol nuteny pozriet dmesg. z jeho vystupu som sa dozvedel velmi nemilu vec. kernel sa tvaril, ze so zariadenim nevie komunikovat:


To ma velmi zarazilo, vsak kedysi som tymto programatorom naprogramoval niekolko atmega mcu, aj samotny programator, kdeze je postaveny na atmega8... Stale mi to neslo do hlavy a tak som pustil notebook, ci sa stastie neusmeje a na nom nebude situacia ina. Nebola... Vo velmi slabej chvili som pustil estestarsi notebook, na ktorom su este XPcka (a ktoreho pustanie je u mna sprevadzane vyhlasenim statneho smutku), len aby som zistil ze G540 nepozna atmega328p (minimalne ho nema v zozname zariadeni). Vsetky notebooky som povypinal a rezignoval som, s tym, ze vsak hadam sa to podari vyriesit na najblizsom sindikate.


Rezignacia vsak netrvala dlho. Solaris ma sice nabadal aby som pod XPckami rozbehal usbasp a skusil to tak. Ale ja som sa nedal ;]. Napadlo mi, ci to nemoze byt "prilis novym" kernelom. Predsalen, dnes uz mam skoro vsade 4.x kernely a ked som si sdrive staval boli k dispozicii asi len 3.x. A tak som oprasil eeepc701, na ktorom mam este kernel 3.16.. Po pripojeni usbasp a napisani lsusb som konecne zhliadol vytuzenu spravu..


Hura! Hydrometeority! Nie, nebola to Halucinace ;].

Cely nateseny som do eeepc uploadol subor na flashnutie a hned som sa ponahlal pustat avrdude. Najskor vsak fuse bity:


avrdude vsak zahlasilo ze nevie s mcu komunikovat, ze mu neodpoveda a mna opatovne zacala chytat rezignacia. Potom som si ale v scheme usbasp vsimol jumper "slow sck". Ten ma sluzit na komunikaciu s pomalsimi mcu. V sdrive je sice krystal 14+MHz, ale vsak preco to neskusit.

Pomohlo. Zapis aj verifikacia fuse bitov tentokrat dopadli uspesne a tak som rychlo modifikoval prikaz na:


Tu to vsak zasa zaskripalo.. zapis prebehol ale po verifikacii mi avrdude zahlasilo nieco ako "pocas flashovania sa zmenili fuse bity, chces ich zmenit naspat?". V prvom momente som nevedel co sa deje a tak som to iba brejkol. Potom mi ale doslo, ze break asi nebola najlepsia volba. Totiz, odvtedy mi avrdude hlasilo, ze target neodpoveda a nedali sa ani znovu prepisat fuse (nehovoriac o nemoznosti prepisania flash). Nuz.. co uz, v zalohe som mal este par mcu, takze az tak velku hlavu som si z toho nerobil. Vymena mcu v sdrive a opatovne pustenie zapisu fuse opat zbehlo v pohode aj s verifikaciou, avsak zapis bootloadera koncil rovnakou otazkou ako v predchadzajucom pripade. Tentokrat som vsak potvrdil vratenie fuse bitov a ... a nestalo sa nic, avrdude "zamrzlo" - nevypisovalo nic nove a ani nekoncilo. Po niekolkych minutach cakania som to vzdal a opat stlacil Ctrl+C.

Vypadalo to, ze som brickol dva svaby ale zvedavost mi nedala a tak som siel sdrive vyskusat, predsalen sa avrdude tvarilo ze zapis prebehol a iba pri/po verifikacii to nejako vytuhlo, mozno ze je mcu naprogramovane dobre. A tak som na sd kartu nahral SDrive-m328.bin (pre istotu aj s tymto nazvom, aj so zmenenym nazvom SDrive.bin, zatial som neskumal ake presne meno ma mat) a pustil atari. Sdrive-ng nefungovalo. Atari bootlo do basicu a ziadne sdrive UI sa nekonalo. Lenze az potom som si vsimol, ze diodky na sdrive preblikli a vtedy mi to doslo. V sdrive bol totiz iba bootloader a ten najskor musi nacitat SDrive.bin a ulozit ho do flash sdrive a az potom moze sdrive fungovat. A tak som pouzil ono povestne 'Turn it off and on again' a UI konecne nabehlo.

Hura2!

Este som samotne sdrive-ng moc netestoval (ani si neviem velmi dobre predstavit co to znamena ho "moc otestovat" ;]), ale vsimol som si jednu vec. Totiz, zapis configu na sdkartu sice prebehne uspesne a po vypnuti a zapnuti pocitaca sa config uspesne nahra avsak nenastavia sa diskety v mechanikach tak, ako boli pri zapise configu. Vsetky mechaniky su vzdy po zapnuti pocitaca prazdne. Pre istotu som vratil spat atmega8 a otestoval ze na starom sdrive to naozaj fungovalo a mechaniky sa obnovili. Konzultoval som tuto vec so solarisom aj s krupkajom, ale ani jeden z nich zatial sdrive-ng velmi neskusal, takze mi poradit nevedeli. Zamyslal som sa aj nad tym, ci to predsalen nemoze byt sposobene nedokoncenim flashovacieho procesu az po vypis hlasky "avrdude done. Thank you.", ze ci mi tam napriklad kusok programu nechyba a preto mi to mechaniky nenastavuje.. ale potom som si vsimol, ze za podprogramom, ktory cita config su este texty, ktore sa mi vypisuju spravne, tak predpokladam ze aj samotna rutina citania konfigu je ok. A tak som to zatial odlozil, ze sa na to este pozriem neskor.


Dnes som vstaval s myslienkou, zeby som mohol na notebooku (na tom, kde mam kernel 4.x) skusit, ci instalacia kernelu 3.16 (z debianu 8 Jessie, momentalne oldstable) nevyriesi problemy s pouzivanim usbasp. Predsalen, eeepc uz ma svoj vek a odchod do kremikoveho neba nemozno vylucit (aj ked sa zatial netvari zeby bol na to nabeh.. klop-klop). Pridal som oldstable repozitar do sources.list a pustil aptitude. kernel 3.16 sa uspesne nainstaloval a tak som rebootol. Na moje sklamanie to vsak nepomohlo. Kedze ale "downgrade" kernelu nepomohol (je sice pravda ze na eeepc mam starsiu verziu 3.16 kernelu, ale aj tak) zacal som upodozrievat niektory iny z balikov, ktory by to mohol mat na svedomi. Nieco s usb a podobne. Rozmyslal som, pri ktorom baliku zacat ale myslienka downgrade celeho systemu sa mi velmi nepozdavala.

Ale potom som dostal iny napad. Co tak skusit pouzit usb hub. Kedysi som presviedcal virtualbox, aby pracoval s usb2 klucom pripojenym do usb3 konektora. Nepouzivam vbox proprietarne rozsirenia a tak mam vo vboxe pristupne len usb1 zariadenia no a vypada to, ze usb3 sa mi automaticky do usb1 modu nepreplo. Mozno to vtedy bol bug virtualboxu, ze v nom neslo pouzivat usb2 zariadenia pripojene do usb3 konektora, dnes som to neskusal, co mi vtedy ale pomohlo bolo, pripojit do usb3 konektora usb2 hub a usbkluc zapojit az do hubu. S usbasp vsak bola situacia ina. Nepripajal som ho do usb3 ale do usb2 a ani som ho nepouzival vo virtualboxe ale priamo v host systeme. Kazdopadne, som si povedal, ze za skusku nic nedam a pripojil som usb2 hub a mile usbasp az donho. A ono to naozaj funguje! Je to sice workaround a predpokladam, ze casom sa aj usb2 huby prestanu vyrabat a tak to nepotrva vecne, kazdopadne na nejaku dobu som safe ;] (kym sa to mozno nevyriesi inak).

A tak som si povedal, ze skusim sdrive-ng naprogramovat este raz, mozno sa mu to na PC podari aj s verifikaciou (predsalen, na novsom systeme mozu veci fungovat lepsie)... nuz a tu je vysledok:


Ani zmienka o zmene fuse bitov, takze uspech. Takto znovu naprogramovane sdrive-ng som hned bezal otestovat na atari, ci sa aj nacitanie obsahu mechanik zazracne nerozbehne... tu som uz vsak stastie nemal. Sdrive-ng stale odmieta obnovit obsah mechanik. Update: pred kratkou dobou sa mi ozval solaris a potvrdil, ze ani jemu to diskety v mechanikach po zapise, vypnuti a zapnuti neobnovi, takze to uz zacina zavanat nejakym bugom alebo nejakou chybou konfiguracie...

UPDATE 4.11.2017:
Tak mi to nedalo a vyhladal som schemu zapojenia usbasp. Hned na prvy pohlad som si vsimol dve zenerove diody zapojene na datove piny usb konektora. Tieto dve diody som vsak na usbasp programatore nemal. Pamatam si, ze som ho staval nie podla originalnej stranky, ale podla ineho projektu, takeho, kde bola uz aj navrhnuta jednostranna doska. No a v tom projekte tie diody jednoducho nie su. Tak som dnes skocil do elektra a vratil som sa stadial s dvomi 3.3V zenerovymi diodami (v original scheme su sice 3.6V ale co som guglil, tak som vyguglil aj taky nazor ze na usb maju ist 3.3V a tak som pouzil take). Po naletovani diod v konfiguracii tzv. vrabcie hniezdo a zapojeni do PC sa programator bez mihnutia oka s kernelom dorozumel, a problemy, ktore mal minule tak pominuli. Aj lsusb vypisalo co malo. no a samozrejme, skusil som aj preprogramovat sdrive-ng mcu, co zbehlo hned na druhy pokus (prvy som skusil s rozpojenym "slow sck"). Druha vec, ktoru na update mam je, ze som komunikoval s autorom sdrive-ng a bug vo firmwari potvrdil. Chyba by mala byt odstranena v dalsej verzii firmwaru.

--