시중에는 비교적 저렴한 ARM코어 기반의 평가보드들이 많이 나와있다.
그러나 무료로 ARM기반의 Embedded Board를 하나 구하게되었다.
엄밀히 말하자면 그냥 구해진건 아니고...
가정용 무선전화기를 분해해 보면 예전 모델들은 흑백 LCD에 8비트나 16비트기반의
MCU가 사용되는데 최근 무선전화기들은 컬러 LCD디스플레이가 대부분 장착되고
각종 멀티미디어 기능들이 들어가면서 ARM기반의 MCU가 많이 사용되어 지는듯 하다.
버려진 무선전화기를 뜯어 보니 컬러 LCD와 삼성 S3C3410 MCU가 탑재되어 있었다.
구글신께 문의해본 결과 친절하게도 ARM7TDMI기반의 MCU이고 관련 데이터 시트와
메뉴얼등을 보여주었다.
다행이 BGA가 아니라 리버스 엔지니어링이 제한적으로 가능해 보였다.
구해진 데이터시트와 메뉴얼 등을 참고해 JTAG핀과 RESET핀을 외부로 인출 하였다.
나는 개인적으로 전자파를 별로 좋아하지 않아 무선 모듈은 깨끗하게 제거해
쓰레기통에 버렸다.
길게 뻗은 전선은 리셋핀인데 아직 쓸만한 버튼을 못구해 그냥 저렇게 썼다.
S3C3410 데이터 시트를 아무리 뒤져봐도 JTAG에 대한 상세한 내용을 찾을 수가 없었다.
구글신께 다시 문의...
S3C3410은 저가 양산을 위해 JTAG의 EXTEST기능이 구현되지 않았으며
MCU외부 메모리 입출력을 위해서는 ARM7TDMI에 내장된 Embedded-ICE를 써야한다고
아주 친절하고도 상세하게 알려주었다. 젠장...
기존에 만들었던 USB-JTAG에 ARM7TDMI와 Embedded-ICE를 제어할 수 있는 기능을
아주 쉽고도 간단하게 만들어 넣었다. 정말 간단했다. 젠장...
EXTEST기능만 있었어도 간단한걸 더 간단하게 할 수 있었을텐데 말이다.
부착된 1MB NOR플래시에 저장된 펌웨어 바이너리를 읽어 봤다.
0번지에는 통상적인 ARM 인터럽트 벡터 처리부분이 보이고,
"Remote Program Start..."라는 간단한 부팅용 메시지와 제작자 정보가 보인다.
"8Blue-M Ucos Ver1.0" 텍스트가 보이는것으로 보아 UCOS커널을 포팅해서 썼나 보다...
뭐 어찌됐건 나에게 기존 펌웨어는 별로 중요한게 아니니 그냥 파일로 백업만 해놓고
NOR플래시 지우기/쓰기 테스트등을 해봤는데 잘 된다.
버튼에 부착된 LED 깜빡이는 테스트 정도만 해놓은 상태이다.
1MB NOR플래시와 2MB SDRAM이 부착되어 있는데, 음...
NOR플래시에는 부트로더와 Linux커널만 꽉차게 겨우 올라갈듯 하다.
커널 압축이 풀리면 2MB가 넘었나?.. 기억이 가물가물...
여튼... 며칠간의 삽질로 ARM코어 기반의 Embedded Board가 하나 생겼다.
USB-JTAG 두번째 자작
기존에 USB 클라이언트 디바이스를 이용한 USB-JTAG을 하나 만들었었다.
첫번째 자작 USB-JTAG
위에 제작한 USB-JTAG은 USB 클라이언트 디바이스의 IO에 JTAG 핀 기능을 할당하여
펌웨어에서 직접 드라이브 (bit-bang)하는 방식으로 개발 하였으나 사용한 USB 클라이언트
디바이스 IO스위칭 속도가 너무 낮아 문제가 되었다.
(PXA270 보드의 NOR플래시 읽기/쓰기를 구현해 봤으나 너무 느림)
때문에 처음 제작한 USB-JTAG은 USB-AVRISP전용 디바이스로 쓰기로 하고
고속 IO스위칭이 가능한 클라이언트 MCU (TMS320F2812)를 적용하여 다시 제작하였다.
USB-UART 컨버터를 내장시켜 호스트 PC에서는 시리얼 통신 터미널을 이용해
접속하도록 바꾸었다.
JTAG신호 드라이브에는 기존의 bit-bang기법과 F2812에 내장된 SPI인터페이스를
사용하여 구동하도록 구현하였으며 SPI엔진을 사용할 경우 JTAG클럭 스피드를
사용자가 변경하여 사용 할 수 있도록 해놨다.
최대 37.5MHz까지 가능하나 원래 JTAG과 SPI는 타이밍이 다른 구조이므로 10MHz이내에서 호환(?)되는 최대 클럭을 찾아 사용하였다 (아래 테이블 TCK속도 참조).
JTAG 인터페이스 부분은 기존과 동일하게 Digital Isolator를 적용하여
타켓측과 전원/신호/접지를 완전히 분리 시켜 놓았다.
기존에 만들었던 PXA270용 JTAG 코드를 이식시켜 사용해 봤는데
겁나게 빨라졌다. 움하하...
<> 2015/04/17 업데이트 기준 지원가능 디바이스 리스트 및 TCK속도
첫번째 자작 USB-JTAG
위에 제작한 USB-JTAG은 USB 클라이언트 디바이스의 IO에 JTAG 핀 기능을 할당하여
펌웨어에서 직접 드라이브 (bit-bang)하는 방식으로 개발 하였으나 사용한 USB 클라이언트
디바이스 IO스위칭 속도가 너무 낮아 문제가 되었다.
(PXA270 보드의 NOR플래시 읽기/쓰기를 구현해 봤으나 너무 느림)
때문에 처음 제작한 USB-JTAG은 USB-AVRISP전용 디바이스로 쓰기로 하고
고속 IO스위칭이 가능한 클라이언트 MCU (TMS320F2812)를 적용하여 다시 제작하였다.
USB-UART 컨버터를 내장시켜 호스트 PC에서는 시리얼 통신 터미널을 이용해
접속하도록 바꾸었다.
JTAG신호 드라이브에는 기존의 bit-bang기법과 F2812에 내장된 SPI인터페이스를
사용하여 구동하도록 구현하였으며 SPI엔진을 사용할 경우 JTAG클럭 스피드를
사용자가 변경하여 사용 할 수 있도록 해놨다.
최대 37.5MHz까지 가능하나 원래 JTAG과 SPI는 타이밍이 다른 구조이므로 10MHz이내에서 호환(?)되는 최대 클럭을 찾아 사용하였다 (아래 테이블 TCK속도 참조).
JTAG 인터페이스 부분은 기존과 동일하게 Digital Isolator를 적용하여
타켓측과 전원/신호/접지를 완전히 분리 시켜 놓았다.
기존에 만들었던 PXA270용 JTAG 코드를 이식시켜 사용해 봤는데
겁나게 빨라졌다. 움하하...
<> 2015/04/17 업데이트 기준 지원가능 디바이스 리스트 및 TCK속도
ARM7TDMI (ARMv4T, Embedded-ICE) | S3C3400(7MHz), S3C3410(7MHz) |
ARM9TDMI (ARMv4T, Embedded-ICE) | KS8695(8MHz), S3C2410(7MHz), S3C2440(7MHz) |
XScale (ARMv5TE, EXTEST) | PXA270(4MHz) |
MIPS32 (EJTAG v2.6) | ADM5120P(8MHz), SMP8634(6.5MHz) |
AVR (AVR-ISP) | ATMEGA8/16/64/128(1MHz) |
탁상용 시계 자작
오래된 VCR에서 얻은 7-segment display에 8비트 MCU하나 끼워서
안방에서 쓸 작은 탁상 시계를 하나 만들었다.
지난 1월에 만들어서 근 3개월 돌려봤는데 얼추 시간은 잘 맞는거 같다.
움하하...
안방에서 쓸 작은 탁상 시계를 하나 만들었다.
지난 1월에 만들어서 근 3개월 돌려봤는데 얼추 시간은 잘 맞는거 같다.
움하하...
피드 구독하기:
글 (Atom)