STM32F407_하드웨어 분석
STM32F407 Discovery Kit H/W 분석
이번 포스팅은 펌웨어로 FreeRTOS를 공부하기 위해 구입한 STM32F407 Discovery Kit의 H/W를 제 나름대로 분석한 내용을 정리하고자합니다.
STM32F407 Discovery Kit은 MCU Vendor인 ST 에서 자사 Chipset을 홍보하고 많이 쓰도록 하기위해 만든 평가판 키트입니다.
가격도 저렴해서 돈이 궁하신 대학생분들도 부담없이 사서 해볼수 있습니다.
ST 사에서 제공하는 데이터시트, 보드 회로도를 통해 분석했습니다.
꼼꼼히 분석한다면 ARM-Cortex 계열의 Architecture 를 사용하는 다른 Vendor의 MCU 분석에도 도움이 될거라 생각합니다.
틀린 점이나 지적할 점은 언제나 환영입니다.
1. STM32F407 MCU 분석
Dacument는 Datasheet, Reference Manual 총 2개가 있는데 각 H/W 특징 및 기능이 정리되어있는 Datasheet를 주로 보면서 할 것입니다.
1.1 Spec 간략 정리
-
- Core(Architecture) : ARM 32-bit Cortex-M4 CPU with FPU, frequency up to 168 MHz
-
- Memories
-
- Flash memory : Up to 1Mbytes
-
- SRAM : Up to 192+4Kbytes
-
- OTP memory : 512bytes
-
- Compact Flash, SRAM, PSRAM, NOR and NAND memories
-
- LCD parallel interface
-
- Clock, reset and supply management
-
- 1.8V to 3.6V
-
- Reset : POR, PDR, PVD and BOR
-
- 4-to-26 MHz crystal oscillator
-
- Internal 16 MHz factory-trimmed RC (1% accuracy)
-
- Low-power operation
-
- Sleep, Stop and Standby modes
-
- 3×12-bit, 2.4 MSPS A/D converters : up to 24channels
-
- 2×12-bit D/A converters
-
- General-purpose DMA
-
- Up to 17 timers
-
- Debug mode
-
- Serial wire debug (SWD) & JTAG interfaces
-
- Cortex-M4 Embedded Trace Macrocel
-
- Up to 140 I/O ports with interrupt capability
-
- Up to 15 communication interfaces(I2C, U(S)ART, SPI, CAN, SDIO)
-
- USB 2.0 full-speed device/host/OTG, 10/100 Ehternet MAC
- 8- to 14-bit parallel camera interface up to 54 Mbytes/s
- True random number generator
```
- 32bit, Cortex-M4, FPU, frequency up to 168 MHz
- 소형 임베디드 SoC에서 사용하도록 설계된 코어입니다. 저전력 옵션을 사용할 수 있고 스마트 배터리/센서 등의 다양한 컨트롤러가 내장되어있기 때문에 소형 임베디드 시스템에 적용시 매우 유리할 거 같습니다.
- FPU(Floating point unit) : 부동 소수점 장치. 부동 소수점 연산을 효율적이고 더 빠르게 처리해주는 모듈입니다. 기존의 AVR와 같은 대부분의 8bit MCU에서는 정수형 ALU(Arithmetic logic unit)만 가지고 있어서 별도의 부동 소수점 연산 라이브러리를 올리고 사용했습니다. 상당히 연산속도가 느렸습니다. 찾아보니 FPU의 사용 여부에 따라 속도가 약 10배정도 차이가 난다고하네요.
- 최대 168Mhz 로 채배해서 사용가능합니다. 이정도 속도면 FreeRTOS를 충분히 올려서 사용할 수 있을 거 같습니다.
- Memories
- Flash memory를 최대 1Mbyte까지 사용 가능합니다. 부트로더 영역을 따로 나누어서 관리해도 충분할 정도로 많습니다. 추후에 부트로더를 올리는 방법도 찾아서 해봐야겠습니다.
- CF, 각 종 SRAM, NOR/NAND 플래시 Controller를 지원한다고 합니다. FATFS또한 임베디드 시스템에 있어서
무조건 쓰는 것이니 꼭 해봐야겠습니다.
- LCD parallel interface
- 요즘 쓰는 RGB, LVDS, eDP interface가 아닌 옛날에 썼던 Bus interface 인거 같습니다.
간단하게 CLCD를 붙일 수 있는 interface입니다. 요즘 추세에 잘 쓰지는 않을 거 같습니다.
- LCD parallel interface
- 요즘 쓰는 RGB, LVDS, eDP interface가 아닌 옛날에 썼던 Bus interface 인거 같습니다.
간단하게 CLCD를 붙일 수 있는 interface입니다. 요즘 추세에 잘 쓰지는 않을 거 같습니다.
- Low-power operation
- 저전력 옵션입니다. Sleep, Stop 모드, Standby 모드 등을 지원합니다. 배터리를 쓰는 저전력 제품을 만들어보진
못했지만 이번 기회에 어느정도 전력을 Save하는지 해볼 생각입니다.
- 3×12-bit, 2.4 MSPS A/D converters : up to 24channels
- 12bit이고 2.4 MSPS(1초당 2400000개 데이터 = 약 0.416us 당 1개의 데이터)의 ADC입니다.
12bit면 분해능이 MaxV/4096 입니다. 만약 MaxV가 5V라면 약 1.22mV가 되겠네요.(10bit 분해능에서 약 4배니 어마무시합니다.)
- 2×12-bit D/A converters
- 12bit DAC입니다. Vref가 3.3V 이라 가정하면 약 0.8mV단위로 Voltage 출력이 가능하겠네요.
- General-purpose DMA
- DMA입니다. 고속의 I/O 장치의 경우 빈번한 인터럽트를 DMA를 사용함으로써 인터럽트 발생 횟수를 줄여 CPU 효율을 늘릴 수 있는데
시간될때 한번 해봐야겠습니다.
- Up to 17 timers
- 타이머를 무려 17채널이나 지원합니다. 16-bit도 있고 32-bit 타이머도 있습니다. 타이머 clock도 최대 168Mhz까지 쓸 수 있네요.
(하지만 Frescaler로 분배해서 쓸겁니다.) Overflow부터 해서 input Compare, Output Compare, PWM Output, Pulse counter 그리고
incremental 타입 엔코더 신호 input까지 지원합니다.
- Debug mode
- Serial Wire, JTAG를 지원합니다. 추후 ST-LINK와 Trace mode를 이용하여 디버그 프로그램에서 Logic Analyzer를 이용한
디버깅 방법도 해볼 생각입니다.
- 그외
- 나머지는 통상적으로 있는 여러 통신 interface와 그외 부가적인 컨트롤러로 구성되어 있습니다. 칩 하나에 여러 interface와 컨트롤러가 있다는 것은 앞서 말했듯이 소형 임베디드 시스템 개발에 매우 유리하다라는 점을 다시금 느꼈습니다. ```
2. STM32F407 Discovery Kit 회로도 분석
이번엔 Discovery Kit의 회로도를 통해 어떻게 구성이 되어 있는지 확인해보겠습니다.
2.1 ST_LINK_V2
- STM32F407 Discovery Kit은 ST_LINK_V2 I/F가 내장되어있습니다.
- 기본적으로 USB MINI B Connector<1>에서 전원 5V를 입력받아 LDO로 2.5V<2>,3V<3>를 만듭니다.
- LDO를 통해 만든 3V<3>을 보드 전체 전원으로 사용하기 위해선 <4>의 JP1을 Short 해야합니다.
- <5>는 보드 디버깅 및 다운로드 I/F에 대한 회로도입니다.
- 기본적으로 내장된 ST_LINK_V2 I/F를 사용하기 위해 CN3의 Jumpers를 ON하여 사용하고 CN2를 사용하지 않습니다.
- 하지만 내장된 ST_LINK_V2 I/F를 사용하지 않고 별도의 ST_LINK_V2 tool을 사용한다면 CN3의 Jumpers를 OFF하고 STM32F407의 pin header에 연결 후 사용해야합니다.
- CN2는 내장된 ST_LINK_V2 I/F로 사용되는 것 같습니다.
2.2 STM32F407
- Main MCU인 STM32F407 Part 회로도입니다.
- <6>은 STM32F407의 Power 부분입니다.
- 크게 주 전원(VDD)과 Analog I/F부분 전원(VREF+,VDDA), 백업전원(VBAT)이 있습니다.
- 실제 PCB를 보시면 총 6pin으로 나와있는 VDD부분에 각 각의 100nF MLCC를 가깝게 배치하였습니다. 바이패스 캐패시터로써 외부 요인에 의한 전압 레벨 변화에 대해(전원에 실린 고주파 노이즈)를 제거하여 직류 안정을 위해 사용합니다.
- Analog I/F부분 전원(VREF+,VDDA)도 마찬가지로 이러한 전원의 고주파 노이즈에도 안정적으로 동작하도록 비드와 low pass filter로 구성한 모습입니다.
- <7>은 Main Clock을 공급하기 위해 8MHz XTAL을 사용한 모습입니다.
- <8>은 STM32F407의 Boot mode Setting에 대한 부분입니다.
- STM32F407은 여러 Boot mode가 있는데 기본적으로 Main Flash Memory Boot mode로 되어있음을 확인할 수 있습니다.
- 나중에 F/W 작성 후, 다운로드를 Main Flash Memory Boot 영역(0x08000000 - 0x080FFFFF)에 해야함을 알 수 있습니다.
- 자세한 내용은 Reference Manual의 Boot configuration을 참고하시면 됩니다.
- 항상 확인하시는 게 좋습니다. 다른 Vendor의 MCU를 쓰실때도 이러한 맥락으로 구성되어있습니다.
2.3 그 외
- Audio(MEMS Microphone + Speaker) I/F , USB_OTG는 추후 필요 시 정리하겠습니다.
- <9>는 자유롭게 사용 가능한 Button 회로로 보입니다.
- <10>은 리셋 Button 회로입니다. RC회로로 구성되어있습니다. 약 10ms 후 3V의 63.2%(약 1.9V)까지 이른다는 얘기입니다. 좀 짧아보이긴합니다.
- <11>은 3축 가속도 센서 chipset입니다. 제스쳐 인식(흔들기, 아래로 놓기 등)을 구현할 수도 있다하니 한번 사용해봐야겠습니다.
- <12>는 LED 구동 회로입니다.
- 그런데 Source로 구동하도록 되어있는데 Sink로 구동하도록 사용하는게 좋다고 생각합니다.
- MCU가 전류를 출력으로 보내는 방식이 아닌 입력받는 방식으로 하는게 MCU 소모 전력을 줄일 수 있고 그만큼 발열을 줄일 수 있습니다.(솔직히 그깟 LED가지고라고 느끼실 수 있긴합니다.)
3. 정리
간단하게 Discovery Kit H/W Spec을 정리해봤습니다. 32bit를 처음 써보시는 분이나 배우고 싶으신 분께는 최소한으로 알차게 구성되어있다는 것과 임베디드를 처음 접하시는 분들께 추천드리고 싶은 Kit임을 느꼈습니다. 다음엔 Code Generator인 STM32CubeMX를 이용하여 Discovery Kit H/W의 FreeROTS Project 생성에 대한 내용을 정리해보겠습니다.
댓글남기기