Настройка MacOS для разработки на CH592

время 15 МИН
звезда звезда звезда СРЕДНЕ
CH592
MacOS
x86
Разработка

Рассказываю что необходимо установить на 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
Пути могут быть другим при изменении версии, но логика должна быть понятна - внутри есть 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 канал и будьте в курсе новинок.
Если Вам было интересно, можете поддержать автора

на главную