이 매뉴얼은 JK전자(JK Electronics) 에 의해서 수정, 작성 되었고 소유권 또한
JK전자(JK Electronics)
의 것입니다. 소유권자의 허가를 받지 않고 무단으로 수정, 삭제하거나 배포 할 수 없습니다.

 

 

Cortex-M3 STM32F103 시리즈 다운로드 가이드


 
* Update history

- 2012.3.26 : 초기 Release


 
1. 타겟보드와 연결 및 USB 드라이버 설치
2. CPU Detect
3. JCS 스크립트 파일 수정
4. JCS 스크립트 파일 실행


   
 
1. 타겟보드와 연결 및 USB 드라이버 설치

ARM JTAG 사용자 가이드 를 참조하시기 바랍니다.

2. CPU Detect

(1) ARMJTAG Server 를 실행 합니다.

armjtag

(2) "Tap Configure" 를 실행 합니다.

armjtag

"DEFAULT" 를 선택 합니다.

armjtag

(3) "Debug Port Configure" 를 실행 합니다.

armjtag

"JTAG" 를 선택해도 되고, "SWD" 를 선택해도 되지만 여기서는 "SWD" 모드로 하도록 하겠습니다.

armjtag

(4) "Target Manager " 를 실행 합니다.

armjtag

"CORTEX-M3" 를 선택 합니다.

armjtag

(5) "JTAG Clock " 은 선택 하지 않아도 됩니다.

(6) "Target Detect" 를 합니다.

armjtag

3. JICECommander/Easy FlashLoader를 이용한 방법

JICECommander를 실행합니다.

arm-jtag

JICECommander에서 위의 그림의 아이콘을 눌러서 "Easy FlashLoader" 를 실행 합니다.

arm-jtag

Cortex-M4의 경우 "STM32F4xxG" 를 선택합니다. CPU에 따라서 알맞은 Loader를 선택 하시면 됩니다.
그리고 "Select Downlaod Image" 를 클릭해서 다운로드 하려는 bin or hex 파일을 선택 합니다.

arm-jtag

"Start Download" 버튼을 눌러서 JICECommander 상에서 다운로드가 정상적으로 이루어 지는지를 확인 합니다.

4. JCS 스크립트 파일을 이용한 방법

(1) "jcs 스크립트 에디터" 를 실행 합니다.

armjtag

(2) "jcs 스크립트" 파일을 로딩 합니다.

armjtag

STM32F107VCT6 에 대한 예제로 진행 하도록 하겠습니다.

기본 제공 스크립트 파일은 "C:\Program Files\JICE\flashloader\st\stm32f10x(high_density)" 에 있습니다.

armjtag

"stm32f10x_program.jcs" 파일을 선택 합니다.

armjtag

기본제공 스크립트의 위치는 STM32F10x 의 Flash-density 에 따라서 달라 질 수 있습니다. 아래 Flash 사이즈별 CPU Part 입니다.
CPU 뒤쪽 파트 번호에 따라서 "C:\Program Files\JICE\flashloader\st" 폴더에서 스크립트 파일을 다르게 로딩 해서 사용 해야 합니다.

- Low-density : STM32F103x4/6 시리즈
- Medium-density : STM32F103x8/B
- High-density : STM32F103xC/D/E

- XL-density : STM32F103xF/G

armjtag

Generic Part Number Package FLASH Size (Prog) (kB) Internal RAM Size (kB) Density

STM32F103C4
LQFP 48 7x7x1.4 1 16 6 low-density

STM32F103C6
LQFP 48 7x7x1.4 1 VFQFPN48 32 10 low-density

STM32F103C8
LQFP 48 7x7x1.4 1 64 20 medium-density

STM32F103CB
LQFP 48 7x7x1.4 1 128 20 medium-density

STM32F103R4
LQFP 64 10x10 TFBGA 5x5x1.2 64 F8x8 0.5 16 6 low-density

STM32F103R6
LQFP 64 10x10 TFBGA 5x5x1.2 64 F8x8 0.5 32 10 low-density

STM32F103R8
LQFP 64 10x10 TFBGA 5x5x1.2 64 F8x8 0.5 64 20 medium-density

STM32F103RB
LQFP 64 10x10 TFBGA 5x5x1.2 64 F8x8 0.5 128 20 medium-density

STM32F103RC
LQFP 64 10x10 WLCSP64L 256 48 high-density

STM32F103RD
LQFP 64 10x10 WLCSP64L 384 64 high-density

STM32F103RE
LQFP 64 10x10 WLCSP64L 512 64 high-density

STM32F103RG
LQFP 64 10x10 1024 96 xl-density

STM32F103T4
VFQFPN 36 6x6x1.0 PITCH 0.50 16 6 low-density

STM32F103T6
VFQFPN 36 6x6x1.0 PITCH 0.50 32 10 low-density

STM32F103T8
VFQFPN 36 6x6x1.0 PITCH 0.50 64 20 medium-density

STM32F103TB
VFQFPN 36 6x6x1.0 PITCH 0.50 128 20 medium-density

STM32F103V8
LFBGA 10x10x1.7 100 F10x10 0.8 LQFP 100 14x14 64 20 medium-density

STM32F103VB
LFBGA 10x10x1.7 100 F10x10 0.8 LQFP 100 14x14 128 20 medium-density

STM32F103VC
LFBGA 10x10x1.7 100 F10x10 0.8 LQFP 100 14x14 256 48 high-density

STM32F103VD
LFBGA 10x10x1.7 100 F10x10 0.8 LQFP 100 14x14 384 64 high-density

STM32F103VE
LFBGA 10x10x1.7 100 F10x10 0.8 LQFP 100 14x14 512 64 high-density

STM32F103VG
LQFP 100 14x14 1024 96 xl-density

STM32F103ZC
LFBGA 10x10x1.7 144 F12x12 0.8 LQFP 144 20X20X1.4 2 256 48 high-density

STM32F103ZD
LFBGA 10x10x1.7 144 F12x12 0.8 LQFP 144 20X20X1.4 2 384 64 high-density

STM32F103ZE
LFBGA 10x10x1.7 144 F12x12 0.8 LQFP 144 20X20X1.4 2 512 64 high-density

STM32F103ZF
LQFP 144 20X20X1.4 2 768 96 xl-density

STM32F103ZG
LQFP 144 20X20X1.4 2 1024 96 xl-density

STM32F105R8
LQFP 64 10x10 64 20 medium-density

STM32F105RB
LQFP 64 10x10 128 32 medium-density

STM32F105RC
LQFP 64 10x10 256 64 high-density

STM32F105V8
LQFP 100 14x14 64 20 medium-density

STM32F105VB
LFBGA 10x10x1.7 100 F10x10 0.8 LQFP 100 14x14 128 32 medium-density

STM32F105VC
LQFP 100 14x14 256 64 high-density

STM32F107RB
LQFP 64 10x10 128 48 medium-density

STM32F107RC
LQFP 64 10x10 256 64 high-density

STM32F107VB
LQFP 100 14x14 128 48 medium-density

STM32F107VC
LFBGA 10x10x1.7 100 F10x10 0.8 LQFP 100 14x14 UNSAWN WAFER V.I. 100% 256 64 high-density


(3) 로딩한 "jcs 스크립트" 파일을 수정 합니다.

armjtag

- STM32F107VCT6 실제 스크립트 파일 내용 입니다.


print "STM32F10x High Density Size Flash Program Script."

;이 명령은 JICECommander 를 실행하는 순간 Target 은 halt 되므로 필요없을 수 있습니다.
;그러나 JICECommander 를 실행해놓은 상태에서 다시 Target 을 재부팅하면
;Target 은 다시 halt 되어야 하므로 이때는 필요합니다.
target.stop

; 다운로드에 사용할 Flash agent binary 파일의 위치를 지정 합니다.
; STM32F의 경우 Flash density 에 따라서 달라 집니다.

; 0x20000000 는 STM32F 에서 RAM의 시작 번지 입니다.

mem.load "C:\Program Files\JICE\flashloader\st\stm32f10x(high_density)\stm32f10x_high_density_flash_agent(12.03.06).bin" 0x20000000

; Flash agent Parameter 설정 입니다.
; 0x20000000 : Flash agent의 ARM start address - 대부분 mem.load 에서 사용했던 RAM 시작 주소와 일치
; 0x20002000 : Flash Agent parameter 영역의 시작 address 입니다.
; 0x1000 : Flash buffer size 입니다. 보통은 0x1000 을 사용하면 됩니다.

flash.agent 0x20000000 0x20002000 0x1000


; cortex-m stack & program counter setting :
; cortex-m3 의 경우 첫번째 vector가 stack pointer 이고 그다음이 reset vector 이다.
; Flash agent가 RAM상에 존재하기 때문에 stack, pc 를 RAM의 시작 주소로 부터 읽어서 세팅 하고 있다.
mem.read 0x20000000 %32
reg.r13.write.before

mem.read 0x20000004 %32
reg.pc.write.before

print "Flash Erase"
flash.erase

;명령을 사용하지 않고 Script 로 대체 시
;execute "C:\Program Files\JICE\flashloader\st\stm32f10x(high_density)\stm32f10x_flash_mass_erase.jcs"

; 계속 진행 할 것인가 하는 메세지 창을 보여준다.

check.show "flash erased. next step is flash download. go?"

print "Down binary : stm32f10x internal flash start address 0x08000000"

; 0x08000000 : STM32의 경우 Flash의 시작 주소 이다. 원래는 Cortex-M3에서 원래은 0x0 이지만 STM32에서는 Remap 되어 있다.
flash.program "D:\JKElectronics\STM32\\stm32_middle\prj\MDK-ARM\STM32F107VCT6_100\stm32_core.bin" 0x08000000




(4) Hex 파일 포맷을 Bin 파일로 변환
KEIL 컴파일러의 경우 기본적으로 출력 포맷이 Hex 파일 입니다. 이럴 경우 Hex 파일을 Bin 파일로 변환 후 다운로드를 진행 해야 합니다.

"Output Converter" 를 실행 합니다.

armjtag

변환할 Hex 파일을 선택 합니다.

armjtag

Bin 파일로 변환이 완료된 화면 입니다.

armjtag

(5) 수정된 스크립트 저장

반드시 스크립트를 수정한 다음 아래의 아이콘 or "File/Save" 명령을 이용해서 스크립트를 저장해야 합니다. 아직 "CTRL+S" 등의 단축키는 지원하지 않고 있습니다.

armjtag

(5) 수정한 "jcs 스크립트" 파일을 실행 합니다.

armjtag

"17" 번 에서 수정한 스크립트를 실행해서 실제로 binary 파일을 Target 보드에 다운로드를 진행 합니다.

armjtag

armjtag

"GO" 를 이용해서 계속 진행을 하면 Flash 다운로드가 완료 됩니다.

armjtag

다운로드가 완료되고 나서 Target을 Reset 시킨 후 결과를 확인 합니다.