ARM44: Netikras flešiukas

Norim imituoti USB Flash diskelį? Jokių problemų su STM32F103.
STM CubeMX programoje pasirenkam turimą procesoriuką, įjungiam USB DeviceFS, middleware sekcijoje pasirenkam USB-DEVICE-Mass Storage Class. Sugeneruojam kodą.

Eima į aplanką “\USB_DEVICE\App” ir redaguojam failą “usbd_storage_if.c”:


#define STORAGE_LUN_NBR 1
#define STORAGE_BLK_NBR 0x28000 / 0x200 //Čia mūsų disko dydis padalintas iš sektorių dydžio. Tai mažas diskelis.
#define STORAGE_BLK_SIZ 0x200 //Čia sektoriaus dydis, 512 baitų

kiek žemiau ieškom skaitymo iš disko procedūros:

int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
/* USER CODE BEGIN 6 */
memcpy(buf, disk + blk_addr * STORAGE_BLK_SIZ, blk_len * STORAGE_BLK_SIZ);
return (USBD_OK);
/* USER CODE END 6 */
}

Tai netikras diskas, todėl skaitysim iš MCU flash atminties, o rašymus į diską ignoruosim. Šioje vietoje paprasčiausiai “memcopy” iš flaš atminties į skaitymo buferį. Atmintis adresuojama baitais, o procedūra užklausinėja sektoriais (blokais). Todėl reikia dauginti iš bloko dydžio.

Toliau reikia sugeneruoti 8″ disketės image. Kodėl? Todėl, kad ji maža ir jos imidžo generatorių galima lengvai rasti internete. Kadangi nemoku su linkeriu prijungti tiesiogiai binarinių failų, tai su savo programa skirta šriftams sugeneruojam C kodą su imidžu.
Diskas tikrai netilps į mažo MCU atmintį, tai reikia kiek pataisyti:


const unsigned char disk[163840]={
0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x57, 0x49, 0x4E, // 00
0x34, 0x2E, 0x31, 0x00, 0x02, 0x01, 0x01, 0x00, // 01
0x02, 0x40, 0x00, 0x40, 0x01, 0xFE, 0x01, 0x00, // 02
...

Sukompiliuojam, supumpuojam į procesoriuką ir:

usb flash disk on STM32F103
Gaunam “Read Only” USB diską. Visus rašymus diskas ignoruoja, todėl Windows per daug nepyksta, nes jai vaidenasi, kad viskas OK. Netgi matom, kad “System Volume Information” susikūrė.

Visas source code (su įžymiuoju penis.jpg):STM32F103 source code for USB mass storage (flash disk)

Kam visą tai naudingą? Ogi, galima prijungti SD diskelį ar SPI flash mikroschemą. Kokius nors duomenis loginti per fatfs į mikroschemą, o kai prisijungiam prie kompo per USB, visi duomenys matosi kaip failai.
O jei mokate gerai programuoti, galima “on the fly” generuoti FAT failų sistemą ir skaityti ar rašyti informaciją. Nereikia jokio softo hoste- visi duomenys matosi kaip virtualūs failai.

Griekas 2

Buvo straipsnis apie Grieką.

Dabar naujas, didesnės rezoliucijos…
Pekino antis griekas

Receptas: viena pekino antis, viena elektrinė orkaitė, viena moteris kuri aptrina prieskoniais tą antį.

Kepimas: Tai riebi antis. Todėl kepti reikia ilgiau. Antis sukišama į kepimo rankovę jau apiprieskoniuota. Ir papūdoma šaldytuve 24…48 valandas. Orkaitė įkaitinama iki 200…220℃ temperatūros. Antis kišama į karštą orkaitę ir kepama apie valandą laiko (skaičiuojant nuo inkišimo). Jei tai maža šaldyta antis, šis etapas kiek trumpesnis. Šio etapo metu nutirpdomi riebalai ir pageltoninama škūra.
Toliau sumažinam temperatūra iki 150…120℃ ir kepama dar apie valandą (mažesnėm trumpiau). Jau galima valgyti, bet kol visi maisto valgytojai susirinks, antį palikti orkaitėje ir kaitinti iki 100℃ (70℃) temperatūroje (hipsterinis lėtas kepimas).
Kol antis kepa, rekomenduojama pakeisti virtuvės čiaupą ir kanalizacijos vamzdžius. Taip greičiau praeis laikas.

Kai susirenka visi prie stalo, ir ypač tie, kurie vėluoja, tada išimam blėką su antim ir atsargiai išimam antį iš kepimo maišelio. Kodėl atsargiai- nes antis linkus subyrėti į gabalėlius. Valgyti karštą ir su mažiau balasto (daržovių).

Rekomenduoja kepti antį krutine į apačią- taip krutinėlė gausis minkšta. Visus riebalus gali išsaugoti ir kepti ant jų visokias bulvytes. O galima ir išpilti į krosnį ir sudeginti.

Mėsai valgyti nereikia peilio- visos dalys išsiardo pačios.

ARM43: Parduoto gyvenimo laikrodis

Bevaikščiojant po …lobyną, pamačiau nerusišką matuoklį. Kodėl jis “nerusiškas”? Ogi todėl, kad jis elegantiškas, gražus, matuoja velniai žino ką ir yra ne rūsiškas. 🙂

Skalė matuoja kažką nuo nulio iki dėvynių. Benešant iš sandėlio kilo mintis. Besidalinant mintimis su žmonėm vienas netgi iškarto pasakė- padarai, perku už 100€. Bet ir pačiam mintis patiko.
9h laikrodis
Tai parduoto gyvenimo laikrodis. Kiekvieną rytą, darbo metu jis rodo nuo 9 ir po truputi mažėja iki nulio. Lygiai penktą valandą po pietų, matuoklio rodyklė priartėja prie nulio ir daugiau nekruta iki kito ryto. Nuotraukoje jis toks nučiupinėtas, nes ką tik pagamintas ir nenuvalytas.
Continue reading →

Oro slėgis- jie tai gali!

Daugelis, kai skraidė lėktuvėliais, pastebėjo oro slėgio kitimą kabinoje kylant ir leidžiantis. Tai kiek susiję su aliumininės dešrelės standumu (erekcija)- reikia palaikyti kažkokį oro slėgio skirtumą, kad palaikyti lėktuvo konstrukcijos stiprumą ir kartu, kad lėktuvo keleiviai neišmirtu. Šią savaitę teko atlikti keturis skrydžius nedideliais atstumais su to pačio modelio lėktuvėliu. Ir trečiasis skydis vos vos neužmušė. Leidimosi metu, po kaip ir įprasto oro slėgio pokyčio, netikėtai pradėjo skaudėti galvą (taip, kad liesti kaktos negalima). Net dabar, po dviejų parų kiek tai skauda. Skaudėjimo metu susiprotėjau pažiūrėti oro slėgį…
barometras
Aišku neištraukiau iš kišenės tokio… Bet pasinaudojau telefono barometru, kuris gal nėra labai tikslus ar kalibruotas. Kalibraciją galima atlikti ir vėliau:
barometrai
963 vs 990 hPa. Tas kairėje kažkada netgi turėjo kalibraciją. Taigis, oro slėgis kabinoje, kai pradėjo skaudėti galvą buvo nežinomas, bet kai skausmas kiek atlygo, tai telefonas parodė 880hPa. Nusileidus ant žemės, oro slėgis buvo 998hPa. Po valandos, jau kito skrydžio metu, aš monitorinau slėgį pilnai… Ir jokio pokyčio nebuvo! Ir ausys lygiai tą patį pasakė. Nuo 998 pripūtė iki 1012 ir leidžiantis išleido iki 1002hPa! Oro slėgis aerouoste buvo 999hPa.
Vadinasi, svoločiai, gali teisingai reguliuoti kabinos slėgį! O ne daryti kabinos išhermetizavimą 1…1.5km aukštyje. O kita mintis- manau mano galva sprogtu, jei įvyktu avarinis išhermetizavimas… nes su amžiumi labai pradėjau jausti žemą slėgį prieš audras. Ne veltui, tiek barometrų turiu.

Ne emuliatorius!

Čia tikrai ne emuliatorius, o multifunkcinis vienetinis instrumentas….
Kažkada rašiau apie Z80 plokštę ir pramoninį kompiuterį. O dabar neturėjau ką veikti ir ištraukiau seną “toolsą”, kiek ji patobulinau ir pademonstruosiu. Tai tikrai ne ZX spectrum emuliatorius, nors jis tai gali daryti:
multifunkcinis Z80 daiGtas: ZX spectrum mode
Aišku taimingai neteisingi, kokios nors prigulnybės nepadarytos. Bet čia ne ZX emuliatorius, o Z80 debug įrankis. Nuo randomu internete jis skiriasi tuom, kad bet kuriu momentu galima bet ką sugadinti- perrašyti procesoriaus registrus, pakeisti RAM turinį (ar ROM), peršokti iš vieno procesoriaus emuliatoriaus į kitą. Čia iš esmės yra du “procikai”: loginis- kuris gal labiau intelio, Zilog režime jis neparašytas iki galo, nes man to nereikėjo. Ir “C-sharp”, tai procikas kurį radau internete.
Continue reading →

Kalibratorius Siemens B1108

Labai retai, bet papuola, kai utilizuojama kokia nors laboratorija ir jos sandėliukas. Prieš kelias dienas tokis įvykis ir prasidėjo. Ir aš išgelbėjau du tokius prietaisiukus:
Siemens B1108
Tai Siemens B1108 termoporų, termorezistorių ir, kas labiau įdomu- ommetrų, voltmetrų ir ampermetrų kalibratorius. Gaila, kad AC įtampą išduoda tik stačiakampę, tai mano “true RMS” volmetras rodo dar kažką, bet kiti tai ne.
Kodėl išmestas? Ogi todėl, kad keturi guminiai mygtukai neveikė dėl senatvės. Išardžiau, nuploviau su spiritu ir veikia.
Turiu du vienetus, todėl vieną, su mechaniniu defektu (nulaužtas, bet nepamestas geltonas žiedas) galiu kam nors padovanoti už kokia nors dovaną. 🙂
Galėsit pasitikrinti savo testerius arba atidaryti termoporų testavimo biznį.

Kad neuždidinti straipsnio, mano testerio testavimas 🙂 komentaruose.

A2000- didžiausias mano konstruktorius

Yra toks vienas kompiuteris, A2000, kuris turi nelaimingą NiCd batareiką. Ši baterija yra pakraunama ir dažnai išteka. O ten išteka toks piktas elektrolitas kuris labai ėda varį ir dar mėgsta patekti į patį PCB substratą. T.y. ne tik nugriaužia takelius ar tarpsluoksninius VIA, bet dar ir sujungia ką nors paslapčia.
Todėl net kelios A2000 motininės kurias radau ir pirkau, visiškai neveikia. Visas bandžiau remontuoti, tačiau tik viena kelis kartus parodė vaizdą ir toliau neveikė.
Tai žinoma bėda ir senų kompiuterių entuziastai nukopijavo paskutinės versijos PCB ir paviešino gerberius.

A2000 PCB
Continue reading →

ZX klonų CP/M diskų žiūreklis

Atnešė diskelių kurie buvo rašyti su ZX klonu. Juos nuskaitėm su Greaseweazle, bet joks emuliatorius neleido paleisti CP/M iš disko kopijų. O ir šiaip, labai norėjosi ištraukti failus. Tačiau, nei vienas CP/M diskų analizatorius nematė failų- paprasčiausiai, mūsų “hakeriai” kai konstravo tą kastruotą CP/M kažką kitaip padarė. O “viešos” programos neleido modifikuoti disko sektorių struktūros.

Todėl teko pasirašyti nepilnai veikiančią programą:
CP/M ZX disk image browser
Diskai tai HD (80 takelių)*, 5 sektoriai takelyje (cilindre) ir 1024 baitai sektoriuje. Tačiau CP/M blokas yra 2048 baitų.

Dabartinė programa gali eksportuoti failus, tačiau kol kas nesugalvojau, kaip eksportuoti failus kurie surašyti kaip keli įrašai direktorijoje (failai didesnis nei 8*2048 baitai). Direktorija- 20 ir 21 sektorius.
Rodos pagal CP/M specifikacijas failo dydis aprašomas vienaip, tačiau mūsų “santakistai” kažkaip ignoravo tuos laukelius ir ten visur nuliai (arba aš dar nesupratau kaip). Taip pat kiek neaišku su failo ilgiu- CP/M rašo 128 baitų blokais, tačiau failai ne visada būna kartotini 128 baitams.
Svarbu, kad didžioji dalis unikalių failų išsitraukė.

Tačiau! Kitas žmogus atnešė irgi “santakos diskelių” su CP/M ir jie vėl kitokie! Gal vėliau išgaminsim ir jiems programą ir patobulinsim šią. Tačiau kiek pavargom, gal net keturis vakarus rašėm softą.

Nelabai tikiu, kad kam nors to reikia, bet programą CPMD galima nusikrauti.

*) Rašė kaip HD, bet dėl ubagystės dažnai naudojo DD diskelius. Todėl dabar jie sunkiai nusiskaito.

P.S.
Kai parašiau programą, atsiliepė vienas iš “ten” ir paaiškino kaip sukonfiguruoti jo programą darbui su šiais diskais. Programa vadinasi “Steinblume”.