i2c-starのmakeとflash
USB to I2CでPCF8574x4つないでGPIOx32をUSB接続で使えるボードを作る計画してるんだが、
https://github.com/daniel-thompson/i2c-star
のi2c-starってのをmakeしてフラッシュすればとりあえずUSB to I2Cは機能するもんと思ってた。
が、回路図とかPCB描いてる段階ではGoogleもそれでいけると言ってたんだが、JLCPCBに基板発注したあとになってi2c-starがSTM32F1とSTM32F4にしか対応して無くてSTM32F042K6T6には非対応と言われた・・・
https://github.com/daniel-thompson/i2c-star
のi2c-starってのをmakeしてフラッシュすればとりあえずUSB to I2Cは機能するもんと思ってた。
が、回路図とかPCB描いてる段階ではGoogleもそれでいけると言ってたんだが、JLCPCBに基板発注したあとになってi2c-starがSTM32F1とSTM32F4にしか対応して無くてSTM32F042K6T6には非対応と言われた・・・
ちょっと挫折しそうではあるが、STM32F103の中華ボード持ってるんでi2c-starをmakeしてフラッシュしてみたんだが、すんなりいかなかった。
src/bootloader/usbdfu.cの300行目付近に
で、googleに言われた通り、
でgoogleにはブートローダを削除して0x08000000から直接i2c-starが起動するようにMakefileを改造するように言われたんだが、Makefileに該当箇所がなくてわかんなかった。
で考えてたが、usbdfuを0x08000000に書き込んでi2c-stm32f1-usbが0x08002000からになる気配だったので、
とりあえずSTM32F103ではi2c-tiny-usbにできたぽい。
$ sudo pacman -S arm-none-eabi-gcc arm-none-eabi-newlib stlink
pacmanでインストールしたのはこれ。$ git clone https://github.com/daniel-thompson/i2c-star.git
$ cd i2c-star
$ git submodule update --init --recursive
$ make -C libopencm3
$ make
でエラーがでた。$ cd i2c-star
$ git submodule update --init --recursive
$ make -C libopencm3
$ make
src/bootloader/usbdfu.cの300行目付近に
asm volatile("msr msp, %0"::"g"
(*(volatile uint32_t *)APP_ADDRESS));
って箇所があるので(*(volatile uint32_t *)APP_ADDRESS));
asm volatile("msr msp, %0"::"r"
(*(volatile uint32_t *)APP_ADDRESS));
と、gをrに変更してmakeは完了した。(*(volatile uint32_t *)APP_ADDRESS));
で、googleに言われた通り、
$ arm-none-eabi-objcopy -O binary i2c-stm32f1-usb.elf i2c-star.bin
$ st-flash write i2c-star.bin 0x08000000
で.binを作って0x08000000に書き込んだ。そしたらブートローダがぶっ壊れた・・・$ st-flash write i2c-star.bin 0x08000000
でgoogleにはブートローダを削除して0x08000000から直接i2c-starが起動するようにMakefileを改造するように言われたんだが、Makefileに該当箇所がなくてわかんなかった。
で考えてたが、usbdfuを0x08000000に書き込んでi2c-stm32f1-usbが0x08002000からになる気配だったので、
$ arm-none-eabi-objcopy -O binary src/bootloader/usbdfu.elf usbdfu.bin
$ st-flash write usbdfu.bin 0x08000000
$ arm-none-eabi-objcopy -O binary src/i2c-stm32f1-usb/i2c-stm32f1-usb.elf i2c-star.bin
$ st-flash write i2c-star.bin 0x08002000
これでいけるかGoogleに聞いてみたらいける言われたんでやってみたらブートローダー復活して、$ st-flash write usbdfu.bin 0x08000000
$ arm-none-eabi-objcopy -O binary src/i2c-stm32f1-usb/i2c-stm32f1-usb.elf i2c-star.bin
$ st-flash write i2c-star.bin 0x08002000
$ i2cdetect -l
で、i2c-13 unknown i2c-tiny-usb at bus 001 device 048 N/A
出てきた。とりあえずSTM32F103ではi2c-tiny-usbにできたぽい。