Рассказываю что необходимо установить на Mac, чтобы разрабатывать под микроконтроллер CH592
CH592
CH592 это микроконтроллер на RISC-V процессоре с 26KB SRAM (ОЗУ) и 512KB Flash (перезаписываемая ПЗУ) на борту. В довесок имеет full-speed USB который может работать как в режиме хоста так и девайса, а еще периферию в виде таймеров, ШИМ, и самое главно BLE5.4 Wireless. Все это открывает значительные перспективы для домашней автоматизации. Официальный сайт - тут можно почитать детали
Начало разработки
Для начала разработки нам понадобится установить три вещи:
- IDE - для редактирования кода;
- Toolchain - утилиты для преобразования кода на C++ в бинарники понятные для CH592;
- wchisp - утилита для прошивки этих самых бинарников в CH592;
Toolchain
Начнем с установки Toolchain: идем сюда, выбираем MacOS, скачиваем Toolchain (на момент написания статьи это был MRS_Toolchain_MAC_V192.zip), распаковываем ZIP-архив, в нем dmg-файл, устанавливаем его. После этого открываем консоль и в ней пишем:
cd /System/Volumes/Data/Users/Shared/MRS_Toolchain_MAC_V192
unzip xpack-riscv-none-elf-gcc-12.2.0-3.zip
unzip xpack-riscv-none-embed-gcc-8.2.0.zip
IDE
Далее для редактирования кода и сборки проектов нам понадобится IDE. Вообще для CH592 есть своя специально заточенная IDE - MounRiver, однако, она работает только на Windows и Linux, версии для MacOS я не нашел. Не беда, MounRiver основана на базе Eclipse который вообще-то работает на MacOS, поставим Eclipse.
Идем сюда находим Eclipse IDE for C/C++ Developers и скачиваем (в моем случае это macOS x86_64), устанавливаем, запускаем. Заходим в меню Help -> Eclipse Marketplace находим там Eclipse Embedded CDT (текущая вертсия на момент написания статьи 6.6.1), устанавливаем его.
Попробуем собрать демо-проект, его можно просто скачать в браузере по ссылке либо клонировать код проекта, выполнив в консоли команду:
git clone https://gitverse.ru/eam7/CH592.git
Откроем код проекта в редакторе, для этого запустим Eclipse, дале идем в меню File -> Open Projects From File System... и выбираем папку BLE_heartrate с примером из клонированного демо-проекта.
Чтобы Eclipse смог собрать проект ему нужно указать путь на диске до установленного на первом шаге Toolchain, для этого жмем правой кнопкой мыши слева на открытом проекте, во всплывающем меню выбираем пункт Properties (в самом низу), в появившемся диалоговом окне слева выбираем пункт MCU, в нем подпункт RISC-V Toolchains Paths и в Toolchain folder указываем /System/Volumes/Data/Users/Shared/MRS_Toolchain_MAC_V192/xpack-riscv-none-embed-gcc-8.2.0/bin путь будет зависеть от версии, но идея ясна. Теперь жмем кнопку Apply and Close, и снова правой кнопкой мыши на проекте, выбираем Build Project теперь все должно собраться без ошибок, у меня лог сборки выглядит так:
15:33:04 **** Build of configuration obj for project BLE_heartrate ****
Invoking: GNU RISC-V Cross C Linker
riscv-none-embed-gcc -march=rv32imac -mabi=ilp32 -mcmodel=medany -msmall-data-limit=8 -mno-save-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -T "/Users/admin/tmp/CH592/BLE_heartrate/SRC/Ld/Link.ld" -nostartfiles -Xlinker --gc-sections -L"../" -L"/Users/admin/tmp/CH592/BLE_heartrate/LIB" -L"/Users/admin/tmp/CH592/BLE_heartrate/SRC/StdPeriphDriver" -Xlinker --print-memory-usage -Wl,-Map,"BLE_heartrate.map" --specs=nano.specs -u _printf_float --specs=nosys.specs -o "BLE_heartrate.elf" ./SRC/StdPeriphDriver/CH59x_adc.o ./SRC/StdPeriphDriver/CH59x_clk.o ./SRC/StdPeriphDriver/CH59x_flash.o ./SRC/StdPeriphDriver/CH59x_gpio.o ./SRC/StdPeriphDriver/CH59x_i2c.o ./SRC/StdPeriphDriver/CH59x_lcd.o ./SRC/StdPeriphDriver/CH59x_pwm.o ./SRC/StdPeriphDriver/CH59x_pwr.o ./SRC/StdPeriphDriver/CH59x_spi0.o ./SRC/StdPeriphDriver/CH59x_sys.o ./SRC/StdPeriphDriver/CH59x_timer0.o ./SRC/StdPeriphDriver/CH59x_timer1.o ./SRC/StdPeriphDriver/CH59x_timer2.o ./SRC/StdPeriphDriver/CH59x_timer3.o ./SRC/StdPeriphDriver/CH59x_uart0.o ./SRC/StdPeriphDriver/CH59x_uart1.o ./SRC/StdPeriphDriver/CH59x_uart2.o ./SRC/StdPeriphDriver/CH59x_uart3.o ./SRC/StdPeriphDriver/CH59x_usbdev.o ./SRC/StdPeriphDriver/CH59x_usbhostBase.o ./SRC/StdPeriphDriver/CH59x_usbhostClass.o ./SRC/Startup/startup_CH592.o ./SRC/RVMSIS/core_riscv.o ./Profile/heartrateservice.o ./Profile/infraredreaderservice.o ./LIB/ble_task_scheduler.o ./HAL/KEY.o ./HAL/LED.o ./HAL/MCU.o ./HAL/RTC.o ./HAL/SLEEP.o ./APP/heartrate.o ./APP/heartrate_main.o ./APP/usb.o -lISP592 -lCH59xBLE -lm
Memory region Used Size Region Size %age Used
FLASH: 170364 B 188 KB 88.50%
RAM: 21084 B 26 KB 79.19%
Finished building target: BLE_heartrate.elf
Invoking: GNU RISC-V Cross Create Flash Image
riscv-none-embed-objcopy -O ihex "BLE_heartrate.elf" "BLE_heartrate.hex"
Invoking: GNU RISC-V Cross Create Listing
riscv-none-embed-objdump --source --all-headers --demangle --line-numbers --wide "BLE_heartrate.elf" > "BLE_heartrate.lst"
Invoking: GNU RISC-V Cross Print Size
riscv-none-embed-size --format=berkeley "BLE_heartrate.elf"
text data bss dec hex filename
169240 1120 9972 180332 2c06c BLE_heartrate.elf
Finished building: BLE_heartrate.hex
Finished building: BLE_heartrate.siz
Finished building: BLE_heartrate.lst
15:43:02 Build Finished. 0 errors, 8 warnings. (took 3s.597ms)
Как видно файл BLE_heartrate.elf сгенерировался, а вместе с ним и BLE_heartrate.hex (он то нам и нужен будет для установки на CH592). И главное, что нет ошибок:
Build Finished. 0 errors, 8 warnings.
wchisp
Запишем сгенерированный на предыдущем шаге файл BLE_heartrate.hex на CH592. Для этого нам понадобится утилита wchisp. Это утилита, умеет заливать HEX-файлы на CH592 через USB. Оригинальная wchisp есть только под Windows (взять можно тут). Но для Mac она не подходит, есть альтернатива. Для ее работа надо установить Rust (инструкция тут, идем и делаем). Выполняем все по инструкции, после этого так же будет установлена утилита Cargo, она то нам и нужная для установки wchisp, открываем консоль и пишем:
cargo install wchisp --force
brew install libusb
Проверяем что работает:
wchisp -h
Если все хорошо - видим:
A command-line implementation of WCHISPTool, for flashing ch32 MCUs
Usage: wchisp [OPTIONS] [COMMAND]
Commands:
probe Probe any connected devices
info Get info about current connected chip
reset Reset the target connected
erase Erase code flash
flash Download to code flash and reset
verify Verify code flash content
eeprom EEPROM(data flash) operations
config Config CFG register
help Print this message or the help of the given subcommand(s)
Options:
-v, --verbose Turn debugging information on
-u, --usb Use the USB transport layer
-s, --serial Use the Serial transport layer
-d, --device Optional USB device index to operate on
-p, --port Select the serial port
-b, --baudrate Select the serial baudrate [possible values: Baud115200, Baud1m, Baud2m]
-h, --help Print help
-V, --version Print version
Записываем бинарник на CH592
Чтобы записать бинарник на CH592 его надо
подключить к ПК в режиме загрузки.
Тут важно отметить что в данном режиме устройство будет находиться не долго может несколько секунд, точно не засекал,
но как только перевели лучше сразу делать загрузку,
другими словами переводить в режим загрузки имеет смысл прямо перед самой загрузкой.
Итак, чтобы перевести CH592 в режим загрузки надо:
- отключить устройство из USB если оно было подключено;
- нажать и удерживать кнопку Boot на устройстве;
- Подключить устройство к ПК через USB;
- отпустить кнопку Boot;
Для проверки того что устройство перешло в режим загрузки, выполним в терминале команду:
wchisp info
В случае если подключение произошло успешно, покажет что-то вроде:
15:47:44 [INFO] Opening USB device #0
15:47:44 [INFO] Chip: CH592[0x9222] (Code Flash: 448KiB, Data EEPROM: 32KiB)
15:47:44 [INFO] Chip UID: E1-36-4F-10-53-5C-83-A3
15:47:44 [INFO] BTVER(bootloader ver): 02.30
15:47:44 [INFO] Current config registers: ffffffffffffffff4d0fff4f00020300e1364f10535c83a3
RESERVED: 0xFFFFFFFF
WPROTECT: 0xFFFFFFFF
[0:0] NO_KEY_SERIAL_DOWNLOAD 0x1 (0b1)
`- Enable
[1:1] DOWNLOAD_CFG 0x1 (0b1)
`- PB22(Default set)
USER_CFG: 0x4FFF0F4D
[2:0] RESERVED 0x5 (0b101)
`- Default
[3:3] CFG_RESET_EN 0x1 (0b1)
`- Enable
[4:4] CFG_DEBUG_EN 0x0 (0b0)
`- Disable
[5:5] RESERVED 0x0 (0b0)
`- Default
[6:6] CFG_BOOT_EN 0x1 (0b1)
`- Enable
[7:7] CFG_ROM_READ 0x0 (0b0)
`- Disable the programmer to read out, and keep the program secret
[27:8] RESERVED 0xFFF0F (0b11111111111100001111)
`- Error
[31:28] VALID_SIG 0x4 (0b100)
`- Valid
Еще можно использовать команду lsusb
lsusb
Должно присутствовать устройство вида:
Bus 020 Device 028: ID 4348:55e0 4348 Vendor-Specific Device
Если lsusb не установлена, можно установить выполнив в терминале:
brew install lsusb
И наконец сама прошивка выполняется командой:
wchisp -v flash /Users/admin/prj/CH592/BLE_heartrate/obj/BLE_heartrate.hex
Указав свой путь до скомпилированного HEX файла.
Полезные ссылки
Официальные примеры тут https://github.com/openwch/ch592/tree/main/EVT/EXAM
Спасибо, что заглянули,
добавляйтесь в
Telegram
канал и будьте в курсе новинок.
Если Вам было интересно, можете поддержать автора