CH552T 기능 테스트
주문한 CH552T 테스트 보드가 생각보다 빨리 도착했다.
크기가 매우 작지만 필요한것은 모두 다 있는것 같다.
PROG 점퍼를 연결한 상태로 전원을 켜면 프로그래밍 모드로 진입한다.
SOT-23크기의 5pin IC가 3.3Volt LDO로 추정되며 CH552T의 전원은 3.3Volt로 구동되도록 기본 설정(납점퍼)되어 있다.
우분투 20.04가 설치된 PC에서 간단히 테스트를 해보았다.
8051/Z80/HC08/PIC16 같은 8bit MCU를 지원하는 SDCC - Small Device C Compiler 라는 크로스 컴파일러는 아래 명령으로 쉽게 설치하였다.
sudo apt-install build-essential sdcc
다양한 CH55x용 예제 코드는 github에서 다운로드 받아 컴파일 해보았다. 별다른 에러없이 컴파일은 잘 된것 같다.
git clone https://github.com/Blinkinlabs/ch554_sdcc.git
cd ch554_sdcc/examples/
make
펌웨어 다운로드 툴은 아래와 같이 다운로드/빌드/설치해 보았다.
git clone https://github.com/ElectronicCats/ch55x-isptool
cd ch55x-isptool/
make
sudo cp ch552isptool /usr/local/bin/.
LED 1개는 전원 표시용, 다른 1개는 PORT1.4 또는 PORT3.0에 연결되어 기본 기능 검사에 사용할 수 있다.
CH551 보드는 PORT3.0에 LED가 연결되어 있다.
아래 LED 깜빡이는 예제 코드는 chch554_sdcc/examples/blink 폴더에 있다.
// Blink an LED connected to pin 3.0 on the CH551 board
#include <ch554.h>
#include <debug.h>
#define LED_PIN 0
SBIT(LED, 0xB0, LED_PIN);
void main() {
CfgFsys();
// Configure pin 3.0 as GPIO output
P3_DIR_PU &= 0x0C;
P3_MOD_OC = P3_MOD_OC & ~(1<<LED_PIN);
P3_DIR_PU = P3_DIR_PU | (1<<LED_PIN);
while (1) {
mDelaymS(500);
LED = !LED;
}
}
make로 컴파일하면 blink.bin이 생성되고, 아래와 같이 펌웨어를 전송하니 LED가 1Hz 주기로 점멸하는 것을 확인 하였다.
odroid@H2:~/Project/ch55x/ch554_sdcc/examples/blink$ sudo vnproch55x blink.bin
------------------------------------------------------------------
CH55x Programmer by VNPro
------------------------------------------------------------------
Found Device CH5551
Bootloader: 2.3.1
ID: D7 EA 5D 43
XOR Mask: 61 61 61 61 61 61 61 B2
Write
..................................................
Write complete!!!
------------------------------------------------------------------
CH552T 보드는 LED가 PORT1.4에 연결되어 있으므로 아래와 같이 변경하였다. 그런데 동작하지 않는다. :(
// Blink an LED connected to pin 1.4
#include <ch554.h>
#include <debug.h>
#define LED_PIN 4
SBIT(LED, 0x90, LED_PIN);
void main() {
CfgFsys();
// Configure pin 1.4 as GPIO output
P1_DIR_PU &= 0x0C;
P1_MOD_OC = P1_MOD_OC & ~(1<<LED_PIN);
P1_DIR_PU = P1_DIR_PU | (1<<LED_PIN);
while (1) {
mDelaymS(500);
LED = !LED;
}
}
펌웨어는 정상적으로 기록된것 같은데, 왜 동작하지 않을까?
------------------------------------------------------------------
CH55x Programmer by VNPro
------------------------------------------------------------------
Found Device CH5552
Bootloader: 2.3.1
ID: 2F F3 43 43
XOR Mask: A8 A8 A8 A8 A8 A8 A8 FA
Write
..................................................
Write complete!!!
------------------------------------------------------------------
CH551 보드는 5.0Volt, CH552 보드는 3.3Volt 구성이라 LED 구동 전류/전압이 부족한지 스코프로 IO 레벨을 측정해보자.