No description
Find a file
2025-01-30 19:27:19 +01:00
V003 reorganization 2024-05-07 11:46:49 +02:00
V203 remove led from cdc 2025-01-10 15:52:27 +01:00
V203F6P6 add gsm 2025-01-30 19:27:19 +01:00
.gitignore reorganize 2025-01-25 12:21:08 +01:00
LICENSE Initial commit 2024-02-29 10:34:30 +01:00
README.md add gsm 2024-05-08 12:54:33 +02:00

RISC-V

Po 32-bit jednočipech založených na jádru Cortex-Mx nastal čas vyzkoušet něco nového. CH32V003 od čínské firmy WCH se zdá být dobrá volba. Je to levné, malé, má to podporu open source a snese to 5V napájení.

Základem je projekt https://github.com/cnlohr/ch32v003fun. Pokusil jsem se z toho vybrat jen to, co je nezbytně nutné a přepsat to do C++. Je potřeba prográmek minichlink, který umí flashnout firmware a GDB server.

V003

Původní adresář, ve kterém jsou následující projekty pouze pro CH32V003.

hello

Základní program, používá GPIO a SysTick v režimu přerušení pro blikání LEDkou.

pwm, adc, serial

DEMO pro základní seznámení s periferiemi.

hdo

Tohle je trochu komplexnější příklad.

Na vstup PC4 přivádíme ze síťového transformátoru napětí cca 0.7-1 V efektivního napětí. Vstup musí být tedy připojen na odporový dělič 1:1, zapojený mezi VCC a GND a trafo k tomuto bodu připojíme přes vhodný kondenzátor, tak, aby střídavé napětí nebylo limitováno.

Firmware z toho Goertzelovým algoritmem vytáhne signál HDO (zde 216.6 Hz) a vyhodnotí jednotlivé pulsy. Velikost pulsu je vypisována na sériový port (115200 Bd) a pokud překročí hodnotu trigger, rozsvítí LED na PD2 (aktivní v L). Dále je pak z pulsů sestaven telegram, opět vypsán sériový port, a pokud se shoduje s povelem uvedeným v konstruktoru Hdo, sepne / rozepne relé na portu PD4 (aktivní v H) podle vysílaného signálu. Celé se to vejde do 3.5 KiB flash a 1 KiB RAM, i v takto malém procesoru tedy zbývá poměrně dost místa na jiné kraviny.

Tvar výpisů je tento:
A1---B---4---- DP: VVZZ ZZZV ZZZZ VVZV
A--3-B--34---- DP: --VV Z-V- -V-V ----
A1---B-------8 DP: VVVZ VZVV ZZZV -VZV
A1---B---45678 DP: ---Z -Z-V Z-Z- -VZV

midi

Funguje to podobně jako na STM32F051, jen to má omezení dané asi především tím, že tohle nemá hardwarovou násobičku. Tedy jen 4 generátory. Na hračky typu melodický zvonek, piánko atd. to stačí. Výhoda je, že piny vydrží 20mA, je možné připojit 30 Ohm sluchátka (do série) plus sériový odpor 100 Ohm mezi piny PD0 a PD2 a hraje to s dostatečnou hlasitostí a docela čistě.

debug

Debug přes jednodrátové rozhraní WCH Link. Je to pomalé a divné, ale funguje to. Sice nevím jak, ale je to celkem jedno. Fakticky je to kompletně převzato z https://github.com/cnlohr/ch32v003fun.

V203

Adresář pro projekty s procesorem CH32V203. Jak se ukázalo, něco se už do 003 prostě nevejde nebo nestíhá. Hlavně jádro zde má násobičku, není tak ořezané, takže lze pro překlad použít clang. Komprimaci instrukcí zřejmě se řeší až ve finálním linkování projektu. Cena také není nijak vysoká, proti podobnému Cortex-M3 celkem zajímavá.

test

Jen základní test.

gsm

A tohle je právě důvod použití ch32v203. Do té v003 se tohle prostě nevejde. A ani není jasné proč. Pravda, flash obsahuje hodně dat, ale ta by šla umístit do nějaké SPI. Samotný kód se vejde, RAM to žere cca 3KiB, takže kde je problém. Ukazuje se, že na zásobníku. Ta gsm knihovna toho sežere asi moc. Nebo, a to je pravděpodobnější, překladač u tohoto ořezaného jádra neumí se zásobníkem správně pracovat. To se ukazuje i v jiných přikladech (viz pwm). Prostě ta v003 je divná, podivně funguje i optimalizace LTO, vynechává některé potřebné funkce.