티스토리 뷰
이제 본격적으로 Bootloader 기능을 하나씩 하나씩 만들어 가보도록 하겠다.
가장 먼저 할 일은 bootloader가 동작하는 AVR이 어떤 종류의 CPU인지 정확한 정보를 컴퓨터에서 알아오는 것이다.
입문과정 블로그 글 중에서 SPI를 설명할 때 SPI를 통해서 Slave AVR의 Signature byte(Device ID) 정보를 읽어 오는것을 실습하였다.
Bootloader 프로그램에서도 boot_signature_byte_get() 함수를 이용하면 Signature 정보를 얻어 올 수 있다. 이 signature 정보를 가지고 해당 디바이스가 어떤 구조를 가지고 있는지 bootloader 기능을 구현하는데 필요한 내용을 읽어올 수가 있다.
AVR bootloader 프로그램과 커넥션이 연결된 상태에서 'Get ID' 버튼을 누르면 signature 데이터를 요청하는 명령을 보낸다. AVR에서 이 명령을 받으면 다음과 같은 코드를 이용하여 현재 어느 CPU에서 bootloader 프로그램이 실행되고 있는지 그 device ID 정보를 보내준다.
위의 코드가 실행되어 컴퓨터 프로그램으로 수신된 내용은 다음과 같다.
빨간색 박스 안에 보면 '1E950F'라는 Signature 데이터를 수신하여 표시된것을 알 수 있다. 이 값은 ATmega328P의 device ID이다. 제대로 읽혀온 것이 확인되었다.
이 ID값을 이용하여 해당 디바이스의 상세 정보를 보관하고 있는 파일을 찾아서 bootloader 프로그램에 이용한다. 이러한 정보는 AtmelStudio 프로그램이 설치되어 있는 폴더안 어딘가에 있다.
AtmelStudio7 프로그램의 경우 'C:\Program Files (x86)\Atmel\Studio\7.0\packs\atmel\ATmega_DFP\1.0.106\atdf'에 디바이스별로 상세정보를 포함하는 파일들이 있다. 파일 확장자가 'atdf'로 되어 있지만 파일을 열어보면 'XML' 파일 형식으로 되어 있는 것을 알 수 있다.
참고로, 이전 버전인 AtmelStudio6의 경우에는 'C:\Program Files\Atmel\Atmel Studio 6.2\devices'에 파일 확장자가 'xml'로 되어 있다.
디바이스 파일을 열어보면 다음과 같은 내용이 들어있다.
따라서 AVR에서 읽어온 Signature 데이터와 동일한 값을 가지는 XML파일을 찾으면 해당 CPU의 나머지 정보들도 읽어 올 수 있게된다.
그러나 위의 폴더에서 일일이 모든 파일을 열어서 해당 signature정보를 비교해보려면 생각보다 많은 시간이 걸린다. 어차피 bootloader가 동작되는 AVR은 이미 알고 있을 가능성이 많기 때문에 필요한 파일만 다른 폴더에 복사해 놓는것이 더 좋은 방법일 것이다. 따라서 이 블로그에서는 별도의 폴더에 필요한 파일들만 복사해 놓고 사용하는 방법을 적용할 것이다.
지정된 폴더에서 동일한 Signature 정보를 찾았으면 해당 파일에서 bootloader에 필요한 정보를 얻어온다. XML 파일에 다음과 같은 정보가 들어있다.
Program memory space에 대한 정보인것을 알 수 있다. 이중에서 필요한 내용은 start address, flash memory size, page size이다.
이 부분만 추출하여 화면에 출력하면 다음과 같은 결과를 볼 수 있다.
Signature 정보를 이용하여 'ATmega328P'에 해당하는 device ID임을 찾았고, program memory space의 start 주소는 0이고 크기는 0x8000이며 page 크기는 0x80이라는것을 알게 되었다.
Bootloader 프로그램이 동작되고 있는 AVR이 어떤 종류인지 상세한 정보를 획득하였으므로 다음 단계로 넘어가 보도록 하겠다.
'프로젝트 > Bootloader' 카테고리의 다른 글
Bootloader - Flash memory write (3) | 2016.08.27 |
---|---|
Bootloader - Hex 파일 (8) | 2016.08.24 |
Bootloader - Bootloader flash section에서 프로그램 시작 (0) | 2016.08.17 |
Bootloader - 사전 준비 (3) | 2016.08.15 |
Bootloader (5) | 2016.08.15 |