아무 ICE로 아무 ARM이나 쓰기
2009/12/12
1. 전제 1
- ARM7 까지는 거의 모든 ICE 가 거의 모든 ARM 코어를 지원한다.
- 거의 모든 ICE는 많은 NOR 플래시 칩을 지원한다.
- 거의 모든 eval. board 들은 표준 JTAG 커넥터를 사용한다.
2. 전제 2
- 거의 모든 ICE 프로그램들은 NOR 플래시 라이팅을 지원한다.
3. ICE 장비가 시스템을 지배하는 원리는 다음과 같다.
- PC로 부터 ICE장비가 명령을 받는다.
- ICE 장비는 명령을 버퍼링도 하고 이리치고 저리쳐서 JTAG 신호를 만들어서 TARGET으로 보낸다.
- TARGET 의 ARM 칩은 ICE 기능에 의해서 JTAG으로 받은 데이터에 의거해 모든 핀을 설정한다.
- 해당 핀이 설정됨에 따라서 번지지정과 데이터 전송을 할 수가 있게 된다.
4. ICE 프로그램이 NOR를 프로그래밍 하는 원리.
- JTAG 을 이용하여 TARGET 칩의 정해진 상수값으로 레지스터들을 세팅한다.
- 이 상수값 초기화에 따라서 TARGET은 SDRAM와 NOR를 사용할 수 있게 된다.
- ICE는 NOR를 프로그래밍 하는 간단한 프로그램과 사용자 바이너리를 묶어서 SDRAM으로 쏜다.
(사용자 바이너리를 다이렉트로 NOR에 쏠 수도 있다)
- SDRAM 으로부터 프로그램이 가동되어 NOR에 사용자 바이너리가 써진다.
5. 아무 ICE 으로 아무 ARM 에 NOR를 프로그래밍 하는 원리.
- 보통 ICE 프로그램에는 NOR 프로그래밍 기능이 있다.
- NOR 칩과 ARM Core 그리고 CPU를 찾아서 설정한다.
6. 여기서 문제가 되는 것은 각 eval. board 마다 SDRAM, NOR 설정이 다르다는 것이다.
- SMU를 새로 설정한다. (SMU 는 무슨 약자인지 모르겠다. System Management Unit ? )
- 비슷한 eval. board 에서 modify 하여 사용한다.
- 보통 모든 인터럽트, 워치독을 막고.
- SDRAM의 bank, refresh, 속도와 NOR의 버스폭, 속도만 맞춰주면 된다.
- 최종적으로 엔디안을 확인한다.
7. 결론.
- 이렇게 되면 "아무 ICE의 NOR 프로그래밍 프로그램"은.
- ICE 접속시 새로 설정한 SMU에 따라서 시스템 레지스터를 설정하고,
- SDRAM과 NOR를 활성하 시킬 수 있게 되고.
- 해당 시스템으로 사용자 바이너리를 전송할 수 있게 되어
- NOR를 쓸 수가 있게 된다.
8. 부연.
- 이와 같이 SFR (System Functional Register)의 주소, W/R 여부, 디폴트 값까지 정의해 놓으면.
- ICE 디버거 프로그램에서 각 레지스터를 지배하는 것이 가능하다.
[t:/] is not "technology - root". dawnsea, rss