써먹을데가 좀 있을거같다.
처음 생각해본 컨셉은
1. 리눅스가 돌아가는 초저가 SBC를 메인 GUI로 사용하자.
2. Real Time 제어는 STM32에서 담당하자.
3. 라즈베리와 STM32 둘 사이의 통신은 UART or SPI
4. 라즈베리에서 다이렉트로 STM32의 플래시 프로그래밍이 가능했으면...
요정도로 시작한다.
라즈베리로 STM32를 프로그래밍 가능하도록 OpenOCD 기능을 먼저 테스트해보자.
adafruit의 문서를 참고했다.
여기서 사용하는 라즈베리는 Raspberry PI 3 model B 다.
1. sudo apt-get update
2. sudo apt-get install git autoconf libtool make pkg-config libusb-1.0-0 libusb-1.0-0-dev
3. git clone git://git.code.sf.net/p/openocd/code openocd-code
openocd-code 폴더가 보인다.
4. cd openocd-code
./bootstrap
5. ./configure --enable-sysfsgpio --enable-bcm2835gpio
6. make
sudo make install
먼지 모르겠다만 여기까지 따라왔다. openOCD의 설정은 여기까지고 다음부턴 물리적인 연결이다.
별 어려운건 없다. GND, nRST, SWDIO, SWDCLK 요 4개의 핀만 연결하면 됨.
Adafruit의 설명은 at91samd 디바이스로 설명해놔서 STM32로 수정해서 진행한다.
openocd.cfg 파일을 만든다
=====================================================
source [find interface/raspberrypi2-native.cfg]
transport select swd
set CHIPNAME stm32f4
source [find target/stm32f4x.cfg]
# did not yet manage to make a working setup using srst
#reset_config srst_only
reset_config srst_nogate
adapter_nsrst_delay 100
adapter_nsrst_assert_width 100
init
targets
reset halt
program hello_world_01.bin verify reset exit 0x08000000
reset
shutdown
=====================================================
내용은 === 제외하고 복붙 하면 된다.
내가 쓰는건 STM32F439이므로 다른걸 쓴다면 약간 변경해야 한다.
source [find target/stm32f4x.cfg] 이 부분은 해당하는 mcu의 cfg로 변경해줘야 한다.
/usr/local/share/openocd/scripts/tartget 에 cfg 파일들이 모여있으니 이 중 적당한걸 선택한다.
stm32를 쓴다면 stm32f0x.cfg, stm32f1x.cfg, stm32f2x.cfg, stm32f3x.cfg, stm32f4x.cfg, stm32f7x.cfg 파일만 쓰면 된다.
program hello_world_01.bin verify reset exit 0x08000000 이 부분은 업로드할 이미지 파일을 지정해 주는부분이다.
hello_world_00.bin 바이너리를 설정하고
sudo openocd로 실행하면
이런식으로 실행되고
흠...굳
hello_world_01.bin 바이너리를 설정하고
sudo openocd로 실행하면
실행은 화면은
라즈베리파이와 STM32를 4선으로 인터페이스해서 펌웨어 업그레이드는 가능해 보인다.
그럼 다음 단계로 넘어가자.
댓글 없음:
댓글 쓰기