1. 강의를 시작하기 전에!
* CoIDE 설치 – 그냥 다음 다음만 누르시면 됩니다.
* Gcc 설치 – 맨 마지막 단계에 환경 변수 추가하는 체크박스를 클릭한 후 완료해 주세요.
2. 허 봉춘씨의 파란만장한
IoT 보드 만들기
강 사
첫 번째 시간: 정 석균
두 번째 시간: 방 보현
Ethernet 시작하기
3. • 이름: 허봉춘
• 나이: 30세
• 학력: 그냥 저냥 전자과 대졸(평점 3.3)
• 생김새: 동네 아저씨
• 학생 경력: 교내 경진 대회에서 AVR 라인 트레이서 입상.
• 직장 경력
• 중소 기업에서 2년째 근무 중
• 2년째 AVR로 RS232로 장비 제어하는 것만 하고 있음.
• 거주지: 회사 근처의 월세 40만원짜리 월세에 살고 있음.
• 가족 관계: 아버지, 어머니, 여동생.
• 할 줄 아는 것: AVR 코딩, 회로 그리기, Artwork.
HUR BONG CHUN! 그는 누구인가!
4. 봉춘씨의 뇌 구조
나도 좀 발전
하고 싶다.
AVR만 해서 나중에
먹고 살 수 있을까?
요세 IoT대세라던데.
배고프다.
이직하고
싶다.
아~ 조금 더 많은 걸
경험하고 내 자신을
발전시켜서 야근 많
이 안 하면서 돈 많이
주는 회사로 이직해
서 여자 친구도 좀 사
귀고 맛있는 것도 좀
사먹고 싶은데 선배
새끼는 계속 갈궈서
짜증이 난다.
5. • IoT가 대세라던데… IoT가 뭐지?
• 사물 인터넷? 아~ 죄다 인터넷에 연결하는 거네.
• 오~그럼 보일러 같은 거 핸드폰으로 끄면 좋겠다. 끄는 걸 자꾸 까먹어서 지난 달
가스 값이 ㅠㅠ
• 그럼 어떻게 인터넷이 되게 하지?
• 뭐? 임베디드 이더넷?
아~ 나도 발전하고 싶다. 대강 훑어볼까?
늘 발전!하고 있는 피카츄!
6. • RJ-45 - 이건 커넥터 잖아~ 패스~
• Transformer – 트랜스포머는 뭐 필요한가 보다~ 하는 거지 ㅎㅎ
• PHY? – 그게 뭐시다냐…
• MAC? – Mac 주소 이야기 하는건가?
• TCP/IP Stack – 포팅을 해야 한다고???
• Application – HTTP, FTP, DHCP, SMTP…… 내가 만들어야 한다고???
흐음 임베디드 이더넷을 하려면?
봉무룩
MCU
MAC
PHY
Transformer RJ-45
Application
TCP/IP
“언제 공부해서 언제 하냐!
ㅠㅠ 아~ 그냥 포기해야 겠다.”
7. 뭐? W5500? 그게 뭔데?
오! MAC PHY TCP/IP 다 들어 있어!
오! 나 SPI 알아. 나 해봤어.
오! ~좋아! 이거 가능성이 있겠는데?
8. W5500 더 알아 볼까?
그 유명하다는 아두이노에 W5100이 있었군.
오~ Ethernet Shield 2에는 W5500이 들어 갔구나.
이거(W5500) 어느 정도 성능 검증된 것 같은데?
이거(W5500) 써도 되겠네~
WIZwiki? 이건 뭐지?
W5100 Arduino Ethernet Shield
W5500 Arduino Ethernet Shield 2
회로랑 뭐 다 있네~ 이거 보고 하면 되겠네.
Github? 이건 또 뭐야?
http://wizwiki.net/wiki/doku.php?id=products:w5500:migration
https://github.com/Wiznet/ioLibrary_Driver
와우 예제 코드도 종류별로 다 있네~
9. W5500으로 IoT 보드 한 번 만들어 보자!
그까이꺼 대강 뚝딱 만들면 되지!!
그래! 결심했어!
우리 봉춘씨가 기분 좋은 상상을 하며 이렇게 웃고 있겠죠?
10. !!대공개!! 허 봉춘씨의 프로젝트 진행 계획!
1. 컨셉 작업
2. 소자 선정
3. 개발 비용 및 제작 단가 산출
4. 회로 설계
5. 아트웍
6. 샘플 보드 발주 및 납땜
7. 펌웨어
8. 개발
11. 1. 컨셉 작업 – Brain Stormming
• 뭘 만들지?
• W5500으로 Ethernet에 연결이 가능하고 새로운 MCU를 사용해서 보드를 만들어 보자.
• 어떻게 만들지?
• 내가 직접 회로설계랑 아트웍이 가능하니 직접 하드웨어를 만들고 펌웨어도 직접 작성해
보자.
• 무엇을 배울 수 있을까?
• Embedded Ethernet 하드웨어 설계와 Embedded Ethernet 펌웨어 작성을 배울수 있어.
• 보드에 얼마를 투자할 수 있을까?
• 나는 월급이 적으니까..… 원가를 1-2만원에 맞추고 싶은데? 좋아! 박리다매야 박리다매!
• 보드에 시간을 얼마나 투자할 수 있을까?
• 아 맨날 야근하고… 시간은 늘 부족해… 귀찮기도 하고. 그렇다면 하루에 1시간씩 투자해
보자.
12. 1. 컨셉 작업 - 목표
W5500 사용
보드 원가 2만원 이하
Embedded Ethernet
구현
새로운 MCU 사용
14. 2. 소자 선정 ( 스펙추가 )
• W5500
• Hardwired TCP/IP, 32Kb internal memory, 8 Socket, 80Mhz SPI Interface.
• STM32F103VC
• Cortex M3, 256Kb flash, 48Kb sram, LQFP100, Max 72Mhz.
• FT2232D
• USB to USART, USB to Jtag 2 channel virtual comport.
• 22AA02E48T
• 2K Serial EEPROM, Official Mac address, I2C interface.
• Micro USB
• Micro SD Card
• External Pin Header
15. 3. 개발 비용 및 단가 산출
허 봉춘: 2만원에 맞출 수 있나? 단가를 알아 봐야겠네…
◈ USB 케이블은 검색해보면 440원, 랜 케이블은 280원 정도입니다. 봉춘씨 참고하세여~
품 목 단 가 비 고
W5500 3,200원
STM32F103VC 3,200원 음 적당한 가격 같아! 아는 업체 견적
FT2232D 5,500원 헐 겁나 비싸! ㅠㅠ 아는 업체 견적
22AA02E48T 250원 오 이건 싸네! ㅎㅎ 아는 업체 견적
나머지 소자 3,000원 나머지 해봐야 한 3천원 넘겠어?
PCB 2,250원 한판에 18만원 정도 했으니까.. 80장은 나오겠지?
SMT 1,000원 잘 모르겠다. 한 천원 하지 않을까?
합 계 18,400원 오예~ 2만원 안 넘는다.~~
16. 4. 회로 설계
허 봉춘: 좋아! 이제 회로 설계를 해볼까? W5500부분부터 해야지~ 레퍼런스~ 랄라~
- http://wizwiki.net/wiki/doku.php?id=products:w5500:refschematic
17. 4. 회로 설계
허 봉춘: 이제 MCU쪽! 리셋, 부트 버튼도 달고~ VCC에 Decoupling CAP도 달고~ 룰루~
18. 4. 회로 설계
허 봉춘: FTDI USB! 이것도 Datasheet에 레퍼런스 회로가 똭! 이것도 똑같이 그려야징~
MICRO USB
3.3V REGULATOR
EXTERNAL POWER SELECT
19. 4. 회로 설계
허 봉춘: 그리고 마지막으로 Output Pin좀 빼고~ 다양하게 Mount Hole 장착! 마무리!
EXTERNAL OUTPUT
W5500 : SPI
PC0~PC3 : ADC
PA0~PA3 : USART2 FULL
PB8~PB9 : I2C1 OR CAN
PB10~PB11 : I2C2/USART3
PB12~PB15 : SPI2/I2S
PA11~PA12 : USB
PD0~PD1 : CAN
PD5~PD6 : USART2
PCB MOUNT HOLE
EXTERNAL CONNECTOR
20. 아트웍시 주의사항
• TX+/-와 RX+/- 신호는 최대한 짧게 연결 하고, Trace의 길이를 최대한 같게 함. (25mm
이하)
• TX+(or RX+)와 TX-(or RX-) 신호는 최대한 가깝게 나란히 지나가도록 연결.(간격 1mm)
• TX+/-와 RX+/- 서로 크로스되지 않도록 연결.
• TX+/-와 RX+/- 신호의 저항과 캐패시터는 트랜스포머와 W5500사이에 배치하고 연결.
• TX+/-와 RX+/-는 서로 거리를 두고 연결. GND로 분리.(간격 0.7mm)
• TX+/-와 RX+/- 다른 신호 및 전원과 거리를 두고 연결. GND로 분리. (간격 0.7mm)
• RJ45 아래에는 CHGND를 깔거나 GND를 깔지 않음.
22. 5. 아트웍
허 봉춘: 지킬껀 지켜가면서 아트웍 완성 !!
허 봉춘: 자! 이제! 샘!플!발!주!!!!!!!!!!!!!!!!!!!!!!!! 슈웅~ 투쿵~ 철컥철컥! 출격!
* Sample pcb 제작 가격은 업체마다 틀리지만 보통 5개 정도에 7~8만원 정도 합니다. 참고하시기 바랍니다.
23. 6. 샘플 납땜 및 디버깅.
허 봉춘: 아놔! ㅠㅠ RJ-45 핀이 다 같은게 아니었어. 레퍼런스 완전 똑같이 할 걸. ㅠㅠ
만신창이 ㅠㅠ
• 봉춘씨의 IoT Sample 납땜 결과
- RJ-45를 레퍼런스와 다른 종류를 사용하였습니다.
- Mac 주소 EEPROM의 NC핀과 VCC핀이 뒤바뀌었습니다.
- 리셋 버튼과 Boot0핀이 너무 가깝습니다.
- USB Port 고정용 Hole을 뚫지 않았습니다.
- SD Card socket 고정용 Hole 사이즈가 너무 작습니다.
24. 6. 샘플 납땜 및 디버깅.
허 봉춘씨는 다시 한 번 회로와 아트웍을 수정하여 보드를 완성하였습니다.
• 봉춘씨의 IoT EVB 디버그
- 레퍼런스와 같은 RJ-45를 사용했습니다.
- EEPROM의 NC와 VCC를 정상적으로 연결했습니다.
- 리셋 버튼과 Boot0 버튼의 거리를 벌렸습니다.
- USB Port 고정용 Hole을 뚫었습니다.
- SD Card socket 고정용 Hole 사이즈를 변경했습니다.
- 기타 Mount Hole 위치 및 Copper거리를 변경했습니다.
자! 이제부터는 펌웨어 단계입니다. 지금부터는 여러분들이 허 봉춘씨입니다. 레드~썬!!
25. 7. 펌웨어 개발 환경.
• CoIDE + gcc 사용.
• GCC tool chain 설정.
• Project->Select Toolchain Path
• gcc가 설치된 디렉토리 중 bin 폴더 선택
26. 7. 펌웨어 – New Project.
• Project->New Project 선택 -> 프로젝트 이름 입력.
• Chip 선택
30. 7. 펌웨어 – New Project.
컴파일 후 다운로드 해 봅시다. 보드에 정상적으로 다운로드가 되나요?
31. 7. 펌웨어 – 실습 #1 LED ON/OFF
• LED ON/OFF
• 새로운 보드가 정상적으로 동작하는 것을 확인할 수 있는 가장 기본적인 펌웨어는 LED ON/OFF입니다.
• GPIO를 이용해 LED를 ON/OFF를 스스로 할 수 있다면 50%는 끝난 거라는 말이 있을 정도로 기본 중에 기
본입니다.
32. 7. 펌웨어 – 실습 #2 W5500 포팅
• 포팅이란 단어만 나와도 머리가 아프시죠? 두통에 고생하시는 “허 봉춘”님들(?)을 위해서
선물을 준비했습니다.
IoT 강의 -> PROJECT ->1. PORTING
33. 7. 펌웨어 – 실습 #2 W5500 포팅
• 사실 어렵지 않아요!!!
• MCU와 연결
• SPI – 4 Lines
• INTERRUPT – 1 Lines
• RESET – 1 Lines
MCU
SPI
CS
RESET
INT
SPI, RESET, INT
37. 7. 펌웨어 – 실습 #2 W5500 포팅
void W5500WriteByte(unsigned char byte)
{
while (SPI_I2S_GetFlagStatus(W5500_SPI, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(W5500_SPI, byte);
while (SPI_I2S_GetFlagStatus(W5500_SPI, SPI_I2S_FLAG_RXNE) == RESET);
SPI_I2S_ReceiveData(W5500_SPI);
}
unsigned char W5500ReadByte(void)
{
while (SPI_I2S_GetFlagStatus(W5500_SPI, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(W5500_SPI, 0xff);
while (SPI_I2S_GetFlagStatus(W5500_SPI, SPI_I2S_FLAG_RXNE) == RESET);
return SPI_I2S_ReceiveData(W5500_SPI);
}
void W5500Select(void)
{
GPIO_ResetBits(W5500_CS_PORT,W5500_CS_PIN);
}
void W5500DeSelect(void)
{
GPIO_SetBits(W5500_CS_PORT,W5500_CS_PIN);
}
SPI Read Byte 함수
SPI Write Byte 함수
W5500 Select 함수
W5500 Deselect 함수
38. 7. 펌웨어 – 실습 #2 W5500 포팅
void W5500Initialze(void)
{
unsigned char temp;
unsigned char W5500FifoSize[2][8] = {{2,2,2,2,2,2,2,2,},{2,2,2,2,2,2,2,2}};
W5500DeSelect();
/* spi function register */
reg_wizchip_spi_cbfunc(W5500ReadByte, W5500WriteByte);
/* CS function register */
reg_wizchip_cs_cbfunc(W5500Select, W5500DeSelect);
if(ctlwizchip(CW_INIT_WIZCHIP,(void*)W5500FifoSize) == -1)
{
printf("W5500 initialized fail.rn");
}
do{//check phy status.
if(ctlwizchip(CW_GET_PHYLINK,(void*)&temp) == -1){
printf("Unknown PHY link status.rn");
}
}while(temp == PHY_LINK_OFF);
}
SPI Read Write 함수 등록
Chip Select 함수 등록
39. 7. 펌웨어 – 포팅 완료! 아싸!…… 근데 이제 뭐.
근데 이제 어떻게 뭘 해야 하지?
• UDP는 어떻게 하지? 뭐 커넥션이 필요 없고… 뭐 설정하는 함수가 있나?
• TCP는 어떻게 하지? 음… 커넥션이 필요하고… 이것도 이 정도만 알아.. ㅠㅠ
• Socket을 열라고? Socket이 뭔데? 8개 까지 동시에 가능하다고는 했는데…
• Port 번호가 필요하다고? Port가 뭔데?
40. 7. 펌웨어 – socket이 뭘까?
• 상상해봐요. 지금 봉춘씨들은……
• 인터넷으로 음악을 들으면서
• 친구와 채팅도 하고 있습니다.
• 그러다가 잠깐 인터넷 쇼핑도 좀 하고
• 아웃룩으로 온 E-mail도 확인 합니다.
Internet 음악
카카오톡 채팅
인터넷 쇼핑
E-mail 확인
Internet 음악 주는 서버
카카오 서버
쇼핑몰 서버
E-mail 서버
PC
41. 7. 펌웨어 – socket이 뭘까?
• 눈치 채셨죠? 네 맞습니다. Socket은 프로그램들의 연결 통로라고 보시면 됩니다.
• 각각의 프로그램은 Socket으로 구분되고 Port는 그 Socket의 번호에 해당합니다.
• 일반적으로 BSD 소켓이 사용되고 있고 Wiznet도 BSD 형식으로 코드를 제공합니다.
Internet 음악
카카오톡 채팅
인터넷 쇼핑
E-mail 확인
Internet 음악 주는 서버
카카오 서버
쇼핑몰 서버
E-mail 서버
PC
SOCKET
SOCKET
SOCKET
SOCKET
43. 7. 펌웨어 – 실습 #3 UDP echo
SOCKET OPEN
RECEIVE
SEND
socket(); 소켓 열기
recvfrom(); 데이터 받기
sendto(); 데이터 보내기
44. 7. 펌웨어 – 실습 #4 TCP LED ON/OFF
SOCKET OPEN
LISTEN
ESTABLISH
socket(); 소켓 열기
RECEIVE
LED ON/OFF
SEND
listen(); 연결 듣기
getSn_SR(); 상태 확인
recv(); 데이터 받기
send(); LED 컨트롤 완료 보내기
led1Ctrl(); LED 온 오프