ジャンル不定の日記です。

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には非対応と言われた・・・

ちょっと挫折しそうではあるが、STM32F103の中華ボード持ってるんでi2c-starをmakeしてフラッシュしてみたんだが、すんなりいかなかった。

$ 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
でエラーがでた。

src/bootloader/usbdfu.cの300行目付近に
asm volatile("msr msp, %0"::"g"
             (*(volatile uint32_t *)APP_ADDRESS));
って箇所があるので
asm volatile("msr msp, %0"::"r"
             (*(volatile uint32_t *)APP_ADDRESS));
と、gをrに変更してmakeは完了した。

で、googleに言われた通り、
$ arm-none-eabi-objcopy -O binary i2c-stm32f1-usb.elf i2c-star.bin
$ st-flash write i2c-star.bin 0x08000000
で.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に聞いてみたらいける言われたんでやってみたらブートローダー復活して、
$ i2cdetect -l
で、
i2c-13  unknown         i2c-tiny-usb at bus 001 device 048      N/A
出てきた。

とりあえずSTM32F103ではi2c-tiny-usbにできたぽい。