:::: MENU ::::

아두이노 스케치를 네트워크로 업로드하기 – Arduino update remotely

아두이노 보드의 펌웨어는 USB 케이블을 PC와 연결후 PC상에서 잡히는 것은 COM 포트를 통해 아두이노 IDE를 통해 업데이트가 된다. 좀 더 구체적으로는 avrdude라는 프로그램을 써서 stk500프로토콜을 사용해서 프로그램이 된다.

아두이노 스케치를 네트워크로 업로드하기

필요한 것들

  • Wiznet의 WIZ550S2E –  1개
  • Arduino pro mini – 테스트에 사용한 아두이노 보드
  • 와이어링 케이블 – WIZ550S2E와 Arduino pro mini를 연결
  • TFTP server program – Windows의 경우 tftpd, 맥의 경우 Tftp Server
  • 아두이노 IDE 프로그램

케이블 연결 및 설정

WIZ550S2E는 Serial to Ethernet 게이트웨이 모듈로 시리얼로 들어온 데이터는 네트워크로 보내고, 네트워크에서 들어온 데이터는 시리얼로 보낸다. WIZ550S2E의 회로도를 보면 J1에 있는 입력핀들은 풀업이 되어 있어서, 아두이노와 연결에 필요한 핀은  3V3D, GND, TXD, RXD, STATUS2 핀이다.

wiz550s2e_pin

TXD, RXD는 아두이노의 RXD, TXD에 연결을 하고 STATUS2를 아두이노의 DTR에 연결을 한다. 이 DTR 신호는 아두이노 보드의 리셋에 연결이 되어 있다.  따라서 아두이노 IDE에서 스케치 업로드를 하면 연결된 보드의 DTR을 트리거링해서 아두이노 보드를 리셋시키고, 아두이노는 bootloader로 진입한다. 그리고 이 bootloader에서는 일정 시간안에 stk500 프로토콜에 해당되는 메시지가 들어오면 펌웨어를 업데이트하고, 그렇지 않으면 0번지에 위치한 프로그램으로 jump한다. 이 DTR을 트리거링 하는 것은 WIZ550S2E 펌웨어를 수정해서 적용을 할 것이다.

모듈의 설정

모듈의 설정은 Configtool을 사용해서 설정을 하며, 아래 그림을 참고한다. 특별한 것은 없고 IP, Port, Working mode 정도만 설정하면 되고, 주의 할 것은 baud rate인데 Arduino pro mini의 경우는 57600이다. 각 보드를 프로그래밍하는 baudrate는 맥의 경우 Arduino.app/Contents/Java/hardware/arduino/avr/boards.txt파일에 정의가 되어 있다.

configtool

WIZ550S2E 펌웨어 수정하기

WIZ550S2E 모듈의 하드웨어 자료와 펌웨어 소스, Configtool의 코드까지 모든 소스는 위키에 있다. Configtool은 모듈설정에 필요하니 다운로드를 해서 설치를 하고, 수정할 펌웨어는 github에서 다운로드를 한다. 그리고 소스를 컴파일할 컴파일러는 NXP의 LPCXPresso는 회원가입 후 다운로드해서 설치를 한다. 참고로 위키에는 LPCXpresso v7.5.0_254에 최적화되어 있다고 하는데 최근 버전인 8.0도 전혀 문제가 없다. github에서 다운로드한 zip파일을 LPCXpresso에서 import해서 WIZ550S2E_APP의 S2E.c를 수정하는데, 수정한 코드는 단 한줄로 TCP 연결이 이루어졌을때 LED를 켜는 부분을 켰다가 끄는 형태로 수정을 한다. 그럼 STATUS2의 핀이 Low에서 High로 되어 DTR를 토글시켜 아두이노가 리셋이 된다.

lpcecpress

수정된 펌웨어 업로드하기

펌웨어 업데이트는 TFTP를 사용하므로 설치한 TFTP 서버에서 bin파일을 모듈이 수신 할 수 있도록 설정을 한다. Confitool로 search를 해서 업에디트 할 모듈을 찾은 후 F/W Uploading 버튼을 누르고, 서버 IP를 PC의 IP주소, Port를 69, File Name을 WIZ550S2E_App.bin로 하고 OK 버튼을 누르면 모듈은 재부팅 후 TFTP로 펌웨어를 업데이트 한다. 참고로 펌웨어를 수정하면서 기존 펌웨어와 구별을 하기 위해 common.h에서 모듈의 펌웨어를 9.0.0으로 바꾸었다.  한줄 수정된 펌웨어의 코드는 github에서… 바이너리는 dropbox에서 다운로드.

Avrdude 설정 변경
스케치를 업로드 할때는 연결된 시리얼로 데이터는 전송하는데, avrdude의 설정을 강제로 변경을 해서 아두이노 IDE가 서버의 IP:Port로 접속을 하게한다.

맥의 경우 아두이노가 설치된 폴더/Contents/Java/hardware/arduino/avr/platform.txt에 있는 내용중

tools.avrdude.upload.pattern=”{cmd.path}” “-C{config.path}” {upload.verbose} -p{build.mcu} -c{upload.protocol} -P{serial.port} -b{upload.speed} -D “-Uflash:w:{build.path}/{build.project_name}.hex:i”

-P{serial.port}를 -P net:host:port로 변경한다. 즉 host:port를 모듈의 IP와 port로 수정한다.

동작테스트

아래그림과 같이 연결을 하고 전원을 연결한다. 그리고 아두이노 IDE에서 스케치를 업로드를 하면 컴파일이 되고 avrdude는 모듈의 IP로 접속을 해서 아두이노를 프로그래밍한다. 간단하게 blink예제를 타이밍을 바꿔서 테스트를 해봤는데 잘된다. 나중에 시간이 되면 Avrdude 설정을 바꾸지 않고, Arduino IDE에서 IP:Port를 입력할 수 있게 코드를 수정해서 빌드하면 좋을 듯~~

wiz550s2e_arduino

 

업데이트 – Mac에서 작업을 해서 Windows에서도 될 줄 알았는데, avrdude 코드를 보니 다음과 같이 win32에서는 network을 지원을 하지 않는다. 즉 net:<host>:<port> 형태는 바로 “ser_open(): network connects are currently not implemented for Win32 environments” 라는 메시지를 뿌리고 리턴한다.

/*
* If the port is of the form “net:<host>:<port>”, then
* handle it as a TCP connection to a terminal server.
*
* This is curently not implemented for Win32.
*/
if (strncmp(port, “net:”, strlen(“net:”)) == 0) {
fprintf(stderr,
“%s: ser_open(): network connects are currently not”
“implemented for Win32 environments\n”,
progname);
return -1;
}


아두이노는 hex파일을 어디에 저장하는가?

아두이노는 스케치를 avr-gcc 또는 arm-gcc를 사용해서 컴파일을 한다. 이 컴파일러의 위치는 맥의 경우 Arduino.app/Contents/Java/hardware/arduino/avr/platform.txt에 정의가 되어 있다. 즉 /Arduino.app/Contents/Java/hardware/tools/ 아래에 avr, arm 컴파일러가 컴파일을 한다.

그럼 아두이노는 hex 파일을 어디에 저장을 하는가?

Arduino_Prefernece

이것을 알아보기위해서는 Arduino > Preference의 설정에서 “다음 동작중 자세한 출력보기”의 컴파일 부분을 체크하면 hex파일이 생성되는 위치를 알 수 있다.  그런데 저장되는 폴더의 위치가…

“/var/folders/4v/frv3pzr55x77gnv6_342m3wm0000gn/T/buildd18630de25a90c7712fff203789659dd.tmp/WebServer.ino.hex”

이 폴더의 위치를 바꾸기 위해서는 아두이노를 종료하고 Preference.txt 파일에 다음과 같이 “build.path=” 항목을 추가하고 폴더의 위치를 기입후 다시 아두이노를 실행한다.

build.path=/Users/AteamRnd/Work/Arduino_Compile

아래 그림과 같이 eep, elf, hex파일이 생성된 것을 확인할 수 있다.

sketch

 


사물인터넷 제품들을 위한 오프라인 매장의 변화

sillicon-valey-b8ta-psfk.cpm_ 캘리포니아 팔로알토에 위치한 b8ta는 최신의 IT기기들을 고객들에게 데모하고 사용해 볼 수 있는 공간을 제공하는 매장이다.  현재 60여개의 제품을 전시되어 있고 아래 리스트의 제품들은 b8ta에만 독점적으로 공급되어 있다.
The Prynt Case, Thync Calm and Energy Wearable, Teforia Tea Maker, Avegant Glyph,nurby: Smart Air Quality Monitor, Footbot Indoor Air Quality Monitor, Oura Ring,Anymote Home, Plastc Card, Nuimo Controller, sevenhugs, Caruma Car Camera,Skylock, Hexo+with 3DGimbal, Lily Flying Camera
b8ta의 비즈니스 모델은 제품 판매 마진 및  임대료를 통해 수익을 얻으며, 하드웨어 제품의 제조자는 자신만의 오프라인 매장을 마련하는 것보다 저렴하게 b8ta의 한공간을 임대함으로 비용적으로 부담이 적고 고객들로부터 빠른 피드백을 얻어서 제품에 반영할 수 있는 장점이 있다.

관련기사:PSFK 이미지 출처:PSFK

[My Insight] 까다로운 입맛의 사용자가 제품을 테스트를 하고 데모를 본다고 바로 구매로 이어지는 것은 아닐 것이다. 하지만 최신의 IT기기의 실구매자는 온라인으로 제품을 구매하기 보다는 실제 테스트를 해보고 그 경험을 바탕으로 구매를 하기를 원한다. 따라서 이런 오프라인 매장은 사용자의 요구를 만족시키고 더 나아가 사물인터넷 제품의 확산에 일조를 할 것 같다.


Wi-Fi, Bluetooth가 스마트홈의 주요 프로토롤로 사용될 전망

10년전만 해도 홈네트워크를 구축하려면 Zigbee, Z-Wave를 사용했지만 앞으로는 WI-Fi나 Bluetooth가 Zigbee를 대체할 수 있을 것으로 기대된다. 그 이유는 Wi-Fi의 경우 상대적으로 전력 소모가 많아서 단말에 쓰이기 어려웠는데, Wi-Fi HaLow(IEEE802.11ah) 덕분에 low power, long range를 지원하게 됐다. 그리고 Bluetooth도 1:1 연결에서 벗어나 mesh network를 지원한다니 기존 스마트 홈시장의 판도가 바뀔 예정이다.

관련기사:The Verge 이미지 출처:The Verge

[My Insight] 스마트 홈에서의 주도권을 하나의 기기나 인터페이스가 장악할 것으로 기대되지 않기때문에 이 시장을 바라보는 회사들은 모두 기기간의 호환성 및 에코시스템을 구축해야만 한다. 이러한 에코시스템을 구축할때 이미 스마트폰에 탑재된 프로토콜을 사용하면 추가적인 기기가 필요하지 않고 사용자도 쉽게 접근이 가능하다. 하지만 ZigBee의 경우 IP기반이 아니기 때문에 필립스 Hue의 경우처럼 Zigbee 프로토콜을 IP로 변환해주는 게이트웨이(Hue Bridge)가 필요하다. 따라서 이미 스마트폰에 탑재되어 있는 Bluetooth나 Wi-Fi가 Zigbee를 대체하면 Zigbee는 그 영역이 줄어들 수 밖에 없을 것이다.


CoolTerm에 custom baudrate 추가하는 법

Mac OS X에서 유일하게 사용하고 있는 시리얼 터미널 프로그램인 CoolTerm은 무료인데다가 웬만한 기능은 다있어서 개발할때 주로 사용을 한다. 그런데 일반적인 baudrate가 아닌 경우에 코드를 수정해서 테스트를 했는데 그럴 필요가 없다. 왜냐면 CoolTerm이 custom baudrate를 지원한다.

CoolTerm에 custom baudrate 추가하는 법

CoolTerm이 설치되어 있는 폴더에 baudrates.ini파일을 하나 만들고 필요한 baudrate를 입력한다. 즉 다음과 같이 입력을 하면, 기존에 설정된 baudrate에 추가로 입력된 baudrate가 생성이 된다.

100
110
150
128000
153600
256000
460800
921600

아래 그림은 250000을 추가후 실행한 모습
Coolterm


OS X 10.11 엘캐피탄에서 FTDI 인식 문제

엘캐피탄에서 FTDI 인식이 불안해서 루트리스(Rootless) 기능을 강제로 해체하는 것을 시도한다.
참고로 루트리스는 사용자나 응용프로그램이 시스템 파일을 삭제하거나 변조할 수 없도록 “커널 레벨”에서 파일을 잠그는 강력한 보안 기능이다.
루트리스(Rootless) 강제로 해체하기

전원을 끄고, Command + R을 누르면서 전원을 켠다.
터미널에서 csrutil disable를 입력후 reboot
csrutil status에서 disable 된 것을 확인할 수 있다.

다시 enable하려면 csrutil enable


Mixed-Signal PCB 디자인

아날로그와 디지털이 같이 있는 회로를 PCB 디자인 할때 필요한 사항

www_e2v_com_content_uploads_2014_02_0999A_pdf

www_e2v_com_content_uploads_2014_02_0999A_pdf

• Do not split the ground plane, use one solid plane under both analog and digital sections of the board
• Use large area ground planes for low impedance current return paths
• Keep over 75% board area for the ground plane
• Separate analog and digital power planes
• Use solid ground planes next to power planes
• Locate all analogue components and lines over the analogue power plane and all digital components
and lines over the digital power plane
• Do not route traces over the split in the power planes, unless if traces that must go over the power
plane split must be on layers adjacent to the solid ground plane
• Think about where and how the ground return currents are actually flowing
• Partition your PCB with separate analog and digital sections
• Place components properly

관련자료: http://dangerousprototypes.com/2016/01/03/app-note-design-considerations-for-mixed-signal-how-to-design-a-pcb-layout/


SD 메모리 SPI로 제어하기 – 2

지난번 포스팅 “SD 메모리 SPI로 제어하기“의 내용만으로는 부족하여 추가적으로 정리한다.

SD 메모리 카드는 기본적으로 전원이 들어오면 SDIO로 동작을 한다. 따라서 대부분의 칩벤더에서는 SDIO인터페이스를 사용하는 예제를 제공하는데, SDIO가 없는 작은 MCU에서는 SPI를 사용해야 한다. 따라서 다음 그림과 같은 초기화 루틴이 필요하다.

SPI모드에서 SD 메모리 초기화 루틴

SD 메모리 커맨드

How_to_Use_MMC_SDC

  • 1번: CS, MISO를 High로 하고 74개 이상의 SPI dummy clock을 전송한다.
  • 2번: CRC가 반드시 일치해야 한다.

위 표에서 CMD0은 0, CMD8은 8을 전송하는 형태이고, ACMD41은 CMD55를 전송후 CMD41를 전송하는 것이며, argument로 30번째 비트가 세트된 32비트를 전송한다.

커맨드 응답

커맨드의 응답은 다음과 같다. R1은 1바이트이고, R3, R7은 R1+ 32비트이니 5바이트이다.

How_to_Use_MMC_SDC

관련 코드: STM32F429IDiscovery보드에서 테스트한 코드가 github에 업로드되어 있으니 코드를 보면서 참고 문서를 보면 이해가 될 듯.. SD memory control with SPI


USB 컨넥터와 핀맵

USB 1.0 ~ 3.0

  • USB 1 released in 1996 with speeds of 1.5 Mbps for Low-Bandwidth and 12 Mbps for High-Bandwidth;
  • USB 2.0 release in 2000 is the most used usb port at the moment at supports a maximum speed of 480 Mbps;
  • USB 3.0 released in 2008 in the latest standard who can support speed up to 5Gbps.

컨넥터의 종류는 7가지나 된다. 아래 그림을 통해 USB 컨넥터와 핀맵을 확인

usb_pinout

참고: http://www.usbpinout.net/


Pages:1...18192021222324...56