본문 바로가기
Development

맥에서 AVR 개발하기 3 : ISP 드라이버 설치하기

by 맥쓰는풍경/송호정 2014. 4. 28.

맥에서 AVR 개발하기 3 : ISP 드라이버 설치하기

 

 



맥에서 AVR 개발하기 1 : AVR 툴체인 설치하기

맥에서 AVR 개발하기 2 : 개발 프로그램 컴파일하기

맥에서 AVR 개발하기 3 : ISP 드라이버 설치하기

맥에서 AVR 개발하기 4 : 다운로더 설치 및 프로그램 다운로드


 

0. 개요

 

지난 강좌에서 개발된 소스를 avr 툴체인을 사용하여 컴파일을 하여 hex 파일을 만들었습니다.

그럼 이번 강좌에서는 이 hex 파일을 다운로드하기 위한 ISP 드라이버 설치에 대하여 알아보도록 하겠습니다.

참고: ISP(In System Programming)는 Atmel사얘서 생산되는 8bit RISC Microconrtoller를 타겟 보드에 장착한 상태에서 프로그램이 가능하게 해주는 장비입니다.

 

1. ISP 디바이스 드라이버 확인하기

 

우선 ISP의 드라이버가 설치되어 있는지 확인해보도록 하겠습니다.

 

사용하는 ISP를 분리한 후 터미널에서 다음과 같이 실행하여 디바이스 리스트를 확인합니다. 

$ ls -als /dev/tty.*

0 crw-rw-rw-  1 root  wheel   33,   0  4 26 01:50 /dev/tty.Bluetooth-Incoming-Port

0 crw-rw-rw-  1 root  wheel   33,   2  4 26 01:50 /dev/tty.Bluetooth-Modem

 

이번에는 ISP를 연결한 후 다음과 같이 실행하여 디바이스 리스트를 확인합니다.

$ ls -als /dev/tty.*

0 crw-rw-rw-  1 root  wheel   33,   0  4 26 01:50 /dev/tty.Bluetooth-Incoming-Port

0 crw-rw-rw-  1 root  wheel   33,   2  4 26 01:50 /dev/tty.Bluetooth-Modem

0 crw-rw-rw-  1 root  wheel   33,  12  4 27 02:53 /dev/tty.usbserial-XXXXXXXX

 

이렇게 ISP를 연결하였을 때 새로운 디바이스가 생성 되면 디바이스 드라이버가 정상적으로 설치 되어 있는 것입니다.

만일 이렇게 새로운 디바이스가 생성되지 않는다면 디바이스 드라이버가 설치되지 않은 것이므로 디바이스 드라이버를 설치해야 합니다.

 

2. ISP 디바이스 드라이버 설치하기

 

대부분의 AVR용 ISP는 USB to Serial 칩셋을 사용하여 인터페이스 합니다.

대표적인 USB to Serial 칩셋은 FTDI사의 FT232, Prolific사의 PL-2303, SiLabs사의 CP2012가 있습니다.

다음은 각 개발사의 드라이버 다운로드 페이지 입니다. 방문해서 Mac OS X용으로 다운받아 설치하면 됩니다.

 

FTDI : http://www.ftdichip.com/Drivers/VCP.htm

Prolific : http://www.prolific.com.tw/US/supportDownload.aspx?FileType=56&FileID=133&pcid=85&Page=0 (로그인 필요)

              http://www.prolific.com.tw/US/CustomerLogin.aspx (여기서 로그인한후 위 링크에서 다운 guest/guest)

SiLabs : http://www.silabs.com/products/interface/usbtouart/Pages/usb-to-uart-bridge.aspx

 

디바이스 드라이버를 설치한 후, 위의 ‘디바이스 드라이버 확인하기’와 같이 확인을 하여 ISP 디바이스 드라이버가 생성이 되면 정상적으로 설치되고 인식된 것입니다.

 

3. ISP 디바이스 드라이버 설정하기

 

위의 제작사에서 제공하는 디바이스 드라이버를 설치하면 Atmel 사에서 지정한 공식 ISP일 경우 정상적으로 인식합니다.

하지만 그 외의 복제품이나 유사품일 경우 디바이스 드라이버를 설치하였음에도 불구하고 인식 되지 않는 경우가 있습니다.

일반적으로 대부분의 사용자가 사용하는 ISP가 이 경우에 해당할 것이라 생각됩니다.

이럴 경우는 다음과 같이 설정을 해주면 됩니다.

(필자도 이 시점에서 디바이스 드라이버를 몇번을 깔았다 지우고를 반복하고 구글링 하고... 며칠을 고생하여 겨우 해결하였습니다).

 

 필자는 FTDI 칩셋을 이용하는 ISP를 사용하므로 FTDI 칩셋을 기준으로 설명하도록 하겠습니다.

 

 1) USB 칩셋의 PID와 VID 확인

 

ISP의 디바이스 드라이버를 인식하지 못하는 것은 대부분 경우 UID와 PID가 맞지 않아서 입니다. 이런 경우 PID와 VID만 등록하면 인식이 됩니다.

우선 ‘응용 프로그램>유틸리티>시스템 정보(Application>Utilities>System Information)’를 실행시킵니다.

혹은 'Launchpad>기타>시스템 정보’를 실행시켜도 됩니다.

좌측의 ‘하드웨어>USB’를 선택한 후 'USB 장비 트리’에서 본인의 디바이스를 찾아 선택한 후 아래에서 해당 디바이스의 정보를 확인합니다.

 

다음은 필자의 ISP에 대한 정보입니다.

여기서 필요한 것은 제품 ID(PID)와 공급업체 ID(VID) 입니다.

AVR JTAG & ISP WAC:

 

  제품 ID:0x0232

  공급업체 ID:0x0403  (Future Technology Devices International Limited)

  버전: 4.00

  일련 번호:c90cd700

  속도:최대 12Mb/

  제조 업체:LedZ.co.kr

  위치 ID:0x14100000 / 1

  사용 가능한 전류량(mA):500

  필요한 전류량(mA):400

 

이 PID와 VID를 확인한 후 이 값을 10진수로 변환하여 기록해 둡니다.

16진수를 10진수로 변경하려면 공학용 계산기를 사용해도 되지만 다음과 같은 명령어로 터미널에서 간단하게 변환할 수 있습니다.

$ dc -e "16i 232 p 403 p"

562

1027

 

2) 설정파일 편집하기

 

이제 확인한 PID와 VID를 설정파일에 추가하도록 하겠습니다.

FTDI 설정파일을 편집합니다. 설정파일의 위치와 파일명은 다음과 같습니다.

/System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/Info.plist


참고로 Prolific와 SiLabs의 설정파일은 다음과 같습니다.

/System/Library/Extensions/ProlificUSBSerial.kext/Contents/Info.plist

/System/Library/Extensions/SiLabsUSBDriver64.kext/Contents/Info.plist

 

 

필자는설정파일을 편집하기 위하여 vi를 사용하였으나 nano 또는 emacs 등의 다양한  에디터 중 편리한 것을 사용하면 됩니다. 여기서는 vi나 기타 에디터의 사용법에 대하여 설명하지는 않겠습니다.

우선 설정파일인 Info.plist를 막약을 위해 복사해 놓은 후, vi등의 에디터를 사용하여 편집합니다.

$ cd /System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/

$ sudo cp Info.plist Info.plist.orig

$ sudo vi Info.plist

 

파일의 중간부분에서 적당한 부분을 복사한 후 아랫부분에 붙여놓습니다.

<key>…</key> <dict>...</dict>를 빠뜨리지 않고 주의해서 복사해야 합니다. 그렇지 않으면 디바이스 드라이버를 로딩할 때 에러가 날 수 있습니다.

                          .

                          .

                          .

                <key>Rauch Electronik D89F</key>

                <dict>

                        <key>CFBundleIdentifier</key>

                        <string>com.FTDI.driver.FTDIUSBSerialDriver</string>

                        <key>IOClass</key>

                        <string>FTDIUSBSerialDriver</string>

                        <key>IOProviderClass</key>

                        <string>IOUSBInterface</string>

                        <key>bConfigurationValue</key>

                        <integer>1</integer>

                        <key>bInterfaceNumber</key>

                        <integer>0</integer>

                        <key>idProduct</key>

                        <integer>55455</integer>

                        <key>idVendor</key>

                        <integer>1027</integer>

                </dict>

                          .

                          .

                          

 

새로 복사한 부분의 내용을 사용자의 ISP에 맞게 Key 및 PID, VID를 수정합니다.

                <key>Rauch Electronik D89F</key>

                <dict>

                        <key>CFBundleIdentifier</key>

                        <string>com.FTDI.driver.FTDIUSBSerialDriver</string>

                        <key>IOClass</key>

                        <string>FTDIUSBSerialDriver</string>

                        <key>IOProviderClass</key>

                        <string>IOUSBInterface</string>

                        <key>bConfigurationValue</key>

                        <integer>1</integer>

                        <key>bInterfaceNumber</key>

                        <integer>0</integer>

                        <key>idProduct</key>

                        <integer>55455</integer>

                        <key>idVendor</key>

                        <integer>1027</integer>

                </dict>

                <key>AVR JTAG ISP WAC</key>

                <dict>

                        <key>CFBundleIdentifier</key>

                        <string>com.FTDI.driver.FTDIUSBSerialDriver</string>

                        <key>IOClass</key>

                        <string>FTDIUSBSerialDriver</string>

                        <key>IOProviderClass</key>

                        <string>IOUSBInterface</string>

                        <key>bConfigurationValue</key>

                        <integer>1</integer>

                        <key>bInterfaceNumber</key>

                        <integer>0</integer>

                        <key>idProduct</key>

                        <integer>562</integer>

                        <key>idVendor</key>

                        <integer>1027</integer>

                </dict>

 

                          .

                          .

                          .

 

이제 저장하고 빠져 나옵니다.

 

3) 디바이스 드라이버 재로드 하기

 

FTDI 드라이버 설정파일에 사용하는 ISP의 PID와 VID 추가를 완료하였으면 이제 드라이버를 재로드 해야 합니다.

 

우선 FTDI 드라이버가 로드되어 있는지 확인합니다.

다음과 같이 아무런 결과가 나오지 않는다면 드라이버가 로드되어 있지 않으므로 드라이버를 그냥 로드 시키면 됩니다.

$ kextstat | grep FTDI

$

 

참고로 Prolific와 SiLabs의 드라이버 확인은 다음과 같이 하면 됩니다.

$ kextstat | grep prolific

$ kextstat | grep silibs

 

하지만 다음과 같이 나온다면 드라이버를 언로드 시킵니다.

$ kextstat | grep FTDI

  172    0 0xffffff7f82377000 0x8000     0x8000     com.FTDI.driver.FTDIUSBSerialDriver (2.2.18) <134 36 5 4 3 1>

 

$ sudo kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kext

 

드라이버가 언로드 되었으면 해당 드라이버를 다시 로드합니다.

$ sudo kextload /System/Library/Extensions/FTDIUSBSerialDriver.kext

$ kextstat | grep FTDI

  172    0 0xffffff7f82377000 0x8000     0x8000     com.FTDI.driver.FTDIUSBSerialDriver (2.2.18) <134 36 5 4 3 1>

 
만일 이 과정에서 에러가 발생한다면 앞에서 백업해 두었던 Info.plist.orig를 Info.plist로 복사한 후 다시 편집을 하면 됩니다.

$ sudo cp Info.plist.orig Info.plist

$ vi Info.plist

 

4) ISP 디바이스 드라이버 확인하기

 

ISP 드라이버 설정이 완료되고 드라이버 재로드가 정상적으로 되었다면 ISP를 연결한 후 다음과 같이 실행하면 새로운 디바이스가 생성된것을 확인할 수 있씁니다.

$ ls -als /dev/tty.*

0 crw-rw-rw-  1 root  wheel   33,   0  4 26 01:50 /dev/tty.Bluetooth-Incoming-Port

0 crw-rw-rw-  1 root  wheel   33,   2  4 26 01:50 /dev/tty.Bluetooth-Modem

0 crw-rw-rw-  1 root  wheel   33,  12  4 27 02:53 /dev/tty.usbserial-XXXXXXXX

 
 
이제 ISP 디바이스 드라이버 설치 및 설정이 완료되었습니다.
다음에는 avrdude를 사용하여 컴파일된 HEX 파일을 타겟보드에 다운로드하는 방법에 대하여 알아보도록 하겠습니다.
 
 


반응형

댓글