SlideShare une entreprise Scribd logo
1  sur  44
Télécharger pour lire hors ligne
강의를 시작하기 전에!
* CoIDE 설치 – 그냥 다음 다음만 누르시면 됩니다.
* Gcc 설치 – 맨 마지막 단계에 환경 변수 추가하는 체크박스를 클릭한 후 완료해 주세요.
허 봉춘씨의 파란만장한
IoT 보드 만들기
강 사
첫 번째 시간: 정 석균
두 번째 시간: 방 보현
Ethernet 시작하기
• 이름: 허봉춘
• 나이: 30세
• 학력: 그냥 저냥 전자과 대졸(평점 3.3)
• 생김새: 동네 아저씨
• 학생 경력: 교내 경진 대회에서 AVR 라인 트레이서 입상.
• 직장 경력
• 중소 기업에서 2년째 근무 중
• 2년째 AVR로 RS232로 장비 제어하는 것만 하고 있음.
• 거주지: 회사 근처의 월세 40만원짜리 월세에 살고 있음.
• 가족 관계: 아버지, 어머니, 여동생.
• 할 줄 아는 것: AVR 코딩, 회로 그리기, Artwork.
HUR BONG CHUN! 그는 누구인가!
봉춘씨의 뇌 구조
나도 좀 발전
하고 싶다.
AVR만 해서 나중에
먹고 살 수 있을까?
요세 IoT대세라던데.
배고프다.
이직하고
싶다.
아~ 조금 더 많은 걸
경험하고 내 자신을
발전시켜서 야근 많
이 안 하면서 돈 많이
주는 회사로 이직해
서 여자 친구도 좀 사
귀고 맛있는 것도 좀
사먹고 싶은데 선배
새끼는 계속 갈궈서
짜증이 난다.
• IoT가 대세라던데… IoT가 뭐지?
• 사물 인터넷? 아~ 죄다 인터넷에 연결하는 거네.
• 오~그럼 보일러 같은 거 핸드폰으로 끄면 좋겠다. 끄는 걸 자꾸 까먹어서 지난 달
가스 값이 ㅠㅠ
• 그럼 어떻게 인터넷이 되게 하지?
• 뭐? 임베디드 이더넷?
아~ 나도 발전하고 싶다. 대강 훑어볼까?
늘 발전!하고 있는 피카츄!
• RJ-45 - 이건 커넥터 잖아~ 패스~
• Transformer – 트랜스포머는 뭐 필요한가 보다~ 하는 거지 ㅎㅎ
• PHY? – 그게 뭐시다냐…
• MAC? – Mac 주소 이야기 하는건가?
• TCP/IP Stack – 포팅을 해야 한다고???
• Application – HTTP, FTP, DHCP, SMTP…… 내가 만들어야 한다고???
흐음 임베디드 이더넷을 하려면?
봉무룩
MCU
MAC
PHY
Transformer RJ-45
Application
TCP/IP
“언제 공부해서 언제 하냐!
ㅠㅠ 아~ 그냥 포기해야 겠다.”
뭐? W5500? 그게 뭔데?
오! MAC PHY TCP/IP 다 들어 있어!
오! 나 SPI 알아. 나 해봤어.
오! ~좋아! 이거 가능성이 있겠는데?
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
와우 예제 코드도 종류별로 다 있네~
W5500으로 IoT 보드 한 번 만들어 보자!
그까이꺼 대강 뚝딱 만들면 되지!!
그래! 결심했어!
우리 봉춘씨가 기분 좋은 상상을 하며 이렇게 웃고 있겠죠?
!!대공개!! 허 봉춘씨의 프로젝트 진행 계획!
1. 컨셉 작업
2. 소자 선정
3. 개발 비용 및 제작 단가 산출
4. 회로 설계
5. 아트웍
6. 샘플 보드 발주 및 납땜
7. 펌웨어
8. 개발
1. 컨셉 작업 – Brain Stormming
• 뭘 만들지?
• W5500으로 Ethernet에 연결이 가능하고 새로운 MCU를 사용해서 보드를 만들어 보자.
• 어떻게 만들지?
• 내가 직접 회로설계랑 아트웍이 가능하니 직접 하드웨어를 만들고 펌웨어도 직접 작성해
보자.
• 무엇을 배울 수 있을까?
• Embedded Ethernet 하드웨어 설계와 Embedded Ethernet 펌웨어 작성을 배울수 있어.
• 보드에 얼마를 투자할 수 있을까?
• 나는 월급이 적으니까..… 원가를 1-2만원에 맞추고 싶은데? 좋아! 박리다매야 박리다매!
• 보드에 시간을 얼마나 투자할 수 있을까?
• 아 맨날 야근하고… 시간은 늘 부족해… 귀찮기도 하고. 그렇다면 하루에 1시간씩 투자해
보자.
1. 컨셉 작업 - 목표
W5500 사용
보드 원가 2만원 이하
Embedded Ethernet
구현
새로운 MCU 사용
MCU W5500
RJ45
+
Transformer
SD CARD
MAC
EEPROM
USB
USB to
UART
1. 컨셉 작업 – 블록 다이어그램
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
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만원 안 넘는다.~~
4. 회로 설계
허 봉춘: 좋아! 이제 회로 설계를 해볼까? W5500부분부터 해야지~ 레퍼런스~ 랄라~
- http://wizwiki.net/wiki/doku.php?id=products:w5500:refschematic
4. 회로 설계
허 봉춘: 이제 MCU쪽! 리셋, 부트 버튼도 달고~ VCC에 Decoupling CAP도 달고~ 룰루~
4. 회로 설계
허 봉춘: FTDI USB! 이것도 Datasheet에 레퍼런스 회로가 똭! 이것도 똑같이 그려야징~
MICRO USB
3.3V REGULATOR
EXTERNAL POWER SELECT
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
아트웍시 주의사항
• 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를 깔지 않음.
아트웍 좋은 예
5. 아트웍
허 봉춘: 지킬껀 지켜가면서 아트웍 완성 !!
허 봉춘: 자! 이제! 샘!플!발!주!!!!!!!!!!!!!!!!!!!!!!!! 슈웅~ 투쿵~ 철컥철컥! 출격!
* Sample pcb 제작 가격은 업체마다 틀리지만 보통 5개 정도에 7~8만원 정도 합니다. 참고하시기 바랍니다.
6. 샘플 납땜 및 디버깅.
허 봉춘: 아놔! ㅠㅠ RJ-45 핀이 다 같은게 아니었어. 레퍼런스 완전 똑같이 할 걸. ㅠㅠ
만신창이 ㅠㅠ
• 봉춘씨의 IoT Sample 납땜 결과
- RJ-45를 레퍼런스와 다른 종류를 사용하였습니다.
- Mac 주소 EEPROM의 NC핀과 VCC핀이 뒤바뀌었습니다.
- 리셋 버튼과 Boot0핀이 너무 가깝습니다.
- USB Port 고정용 Hole을 뚫지 않았습니다.
- SD Card socket 고정용 Hole 사이즈가 너무 작습니다.
6. 샘플 납땜 및 디버깅.
허 봉춘씨는 다시 한 번 회로와 아트웍을 수정하여 보드를 완성하였습니다.
• 봉춘씨의 IoT EVB 디버그
- 레퍼런스와 같은 RJ-45를 사용했습니다.
- EEPROM의 NC와 VCC를 정상적으로 연결했습니다.
- 리셋 버튼과 Boot0 버튼의 거리를 벌렸습니다.
- USB Port 고정용 Hole을 뚫었습니다.
- SD Card socket 고정용 Hole 사이즈를 변경했습니다.
- 기타 Mount Hole 위치 및 Copper거리를 변경했습니다.
자! 이제부터는 펌웨어 단계입니다. 지금부터는 여러분들이 허 봉춘씨입니다. 레드~썬!!
7. 펌웨어 개발 환경.
• CoIDE + gcc 사용.
• GCC tool chain 설정.
• Project->Select Toolchain Path
• gcc가 설치된 디렉토리 중 bin 폴더 선택
7. 펌웨어 – New Project.
• Project->New Project 선택 -> 프로젝트 이름 입력.
• Chip 선택
7. 펌웨어 – New Project.
• ST->STM32F103x->STM32F103VC 선택(OR 검색)
• 완료!
7. 펌웨어 – New Project.
□ C Library
□ Retarget printf
□ CMSIS core
□ CMSIS Boot
□ RCC
□ GPIO
□ USART
□ MISC
7. 펌웨어 – New Project.
디버거 설정: Configuration tab -> Debugger tab
7. 펌웨어 – New Project.
컴파일 후 다운로드 해 봅시다. 보드에 정상적으로 다운로드가 되나요?
7. 펌웨어 – 실습 #1 LED ON/OFF
• LED ON/OFF
• 새로운 보드가 정상적으로 동작하는 것을 확인할 수 있는 가장 기본적인 펌웨어는 LED ON/OFF입니다.
• GPIO를 이용해 LED를 ON/OFF를 스스로 할 수 있다면 50%는 끝난 거라는 말이 있을 정도로 기본 중에 기
본입니다.
7. 펌웨어 – 실습 #2 W5500 포팅
• 포팅이란 단어만 나와도 머리가 아프시죠? 두통에 고생하시는 “허 봉춘”님들(?)을 위해서
선물을 준비했습니다.
IoT 강의 -> PROJECT ->1. PORTING
7. 펌웨어 – 실습 #2 W5500 포팅
• 사실 어렵지 않아요!!!
• MCU와 연결
• SPI – 4 Lines
• INTERRUPT – 1 Lines
• RESET – 1 Lines
MCU
SPI
CS
RESET
INT
SPI, RESET, INT
7. 펌웨어 – 실습 #2 W5500 포팅
GPIO Initialization
• SPI Pin Enable
• CS Pin Enable
• Reset Pin Enable
• INT Pin Enable
SPI Initialization
• SPI
Configuration
• SPI Enable
Connect to MCU
• SPI Read(), SPI
Write()
Registration.
• CS Registration.
W5500HardwareInitilize() W5500Initialze()
7. 펌웨어 – 실습 #2 W5500 포팅
void W5500HardwareInitilize(void)
{
/*Initialize Structure*/
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
/*Enable clock related peripherals*/
RCC_APB2PeriphClockCmd(W5500_SPI_RCC,ENABLE);
RCC_APB2PeriphClockCmd(W5500_GPIO_RCC,ENABLE);
/*Initialize CLK Pin*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = W5500_CLK_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(W5500_CLK_PORT,&GPIO_InitStructure);
/*Initialize MOSI Pin*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = W5500_MOSI_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(W5500_MOSI_PORT,&GPIO_InitStructure);
/*Initialize MISO Pin*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = W5500_MISO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(W5500_MISO_PORT,&GPIO_InitStructure);
/*Initialize CS Pin*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = W5500_CS_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(W5500_CS_PORT,&GPIO_InitStructure);
/*Initialize Reset Pin*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = W5500_RESET_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(W5500_RESET_PORT,&GPIO_InitStructure);
/*Initialize INT Pin*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = W5500_INT_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(W5500_INT_PORT,&GPIO_InitStructure);
/*Initialize SPI*/
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(W5500_SPI, &SPI_InitStructure);
SPI_Cmd(W5500_SPI, ENABLE);
W5500HardwareReset();
}
7. 펌웨어 – 실습 #2 W5500 포팅
GPIO Initialization
• SPI Pin Enable
• CS Pin Enable
• Reset Pin Enable
• INT Pin Enable
SPI Initialization
• SPI
Configuration
• SPI Enable
Connect to MCU
• SPI Read(), SPI
Write()
Registration.
• CS Registration.
W5500HardwareInitilize() W5500Initialze()
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 함수
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 함수 등록
7. 펌웨어 – 포팅 완료! 아싸!…… 근데 이제 뭐.
근데 이제 어떻게 뭘 해야 하지?
• UDP는 어떻게 하지? 뭐 커넥션이 필요 없고… 뭐 설정하는 함수가 있나?
• TCP는 어떻게 하지? 음… 커넥션이 필요하고… 이것도 이 정도만 알아.. ㅠㅠ
• Socket을 열라고? Socket이 뭔데? 8개 까지 동시에 가능하다고는 했는데…
• Port 번호가 필요하다고? Port가 뭔데?
7. 펌웨어 – socket이 뭘까?
• 상상해봐요. 지금 봉춘씨들은……
• 인터넷으로 음악을 들으면서
• 친구와 채팅도 하고 있습니다.
• 그러다가 잠깐 인터넷 쇼핑도 좀 하고
• 아웃룩으로 온 E-mail도 확인 합니다.
Internet 음악
카카오톡 채팅
인터넷 쇼핑
E-mail 확인
Internet 음악 주는 서버
카카오 서버
쇼핑몰 서버
E-mail 서버
PC
7. 펌웨어 – socket이 뭘까?
• 눈치 채셨죠? 네 맞습니다. Socket은 프로그램들의 연결 통로라고 보시면 됩니다.
• 각각의 프로그램은 Socket으로 구분되고 Port는 그 Socket의 번호에 해당합니다.
• 일반적으로 BSD 소켓이 사용되고 있고 Wiznet도 BSD 형식으로 코드를 제공합니다.
Internet 음악
카카오톡 채팅
인터넷 쇼핑
E-mail 확인
Internet 음악 주는 서버
카카오 서버
쇼핑몰 서버
E-mail 서버
PC
SOCKET
SOCKET
SOCKET
SOCKET
7. 펌웨어
모르시겠다구요? 좋습니다.
그럼 지금부터 맨땅에 헤딩 들어갑니다.
7. 펌웨어 – 실습 #3 UDP echo
SOCKET OPEN
RECEIVE
SEND
socket(); 소켓 열기
recvfrom(); 데이터 받기
sendto(); 데이터 보내기
7. 펌웨어 – 실습 #4 TCP LED ON/OFF
SOCKET OPEN
LISTEN
ESTABLISH
socket(); 소켓 열기
RECEIVE
LED ON/OFF
SEND
listen(); 연결 듣기
getSn_SR(); 상태 확인
recv(); 데이터 받기
send(); LED 컨트롤 완료 보내기
led1Ctrl(); LED 온 오프

Contenu connexe

Tendances

introduction to division algorithm
introduction to division algorithmintroduction to division algorithm
introduction to division algorithmNikhil Sairam
 
History of Zero - Mathematics
History of  Zero - MathematicsHistory of  Zero - Mathematics
History of Zero - Mathematicsdivya rajput
 
INDIAN CUISINES - EVERYTHING YOU NEED TO KNOW
INDIAN CUISINES - EVERYTHING YOU NEED TO KNOWINDIAN CUISINES - EVERYTHING YOU NEED TO KNOW
INDIAN CUISINES - EVERYTHING YOU NEED TO KNOWBarun Mohanty
 
PostgreSQL at 20TB and Beyond
PostgreSQL at 20TB and BeyondPostgreSQL at 20TB and Beyond
PostgreSQL at 20TB and BeyondChris Travers
 
Toad for oracle 11g 64 bit
Toad for oracle 11g 64 bitToad for oracle 11g 64 bit
Toad for oracle 11g 64 bitRavi Kumar Lanke
 
Differential Equation by MHM
Differential Equation by MHMDifferential Equation by MHM
Differential Equation by MHMMd Mosharof Hosen
 
Wso2 is integration with .net core
Wso2 is   integration with .net coreWso2 is   integration with .net core
Wso2 is integration with .net coreIsmaeel Enjreny
 
THE VALLEY OF FLOWERS ENVIRONMENTAL STUDIES CLASS-IV
THE VALLEY OF FLOWERS ENVIRONMENTAL STUDIES  CLASS-IVTHE VALLEY OF FLOWERS ENVIRONMENTAL STUDIES  CLASS-IV
THE VALLEY OF FLOWERS ENVIRONMENTAL STUDIES CLASS-IVBIOLOGY TEACHER
 
Introduction to Functions of Several Variables
Introduction to Functions of Several VariablesIntroduction to Functions of Several Variables
Introduction to Functions of Several VariablesNhan Nguyen
 
Traditional Rajasthani food & dishes
Traditional Rajasthani food & dishesTraditional Rajasthani food & dishes
Traditional Rajasthani food & dishesDr. Bhavya Khamesra
 
Eigen values and eigen vectors
Eigen values and eigen vectorsEigen values and eigen vectors
Eigen values and eigen vectorsRiddhi Patel
 
Lesson 3: The Limit of a Function
Lesson 3: The Limit of a FunctionLesson 3: The Limit of a Function
Lesson 3: The Limit of a FunctionMatthew Leingang
 

Tendances (20)

introduction to division algorithm
introduction to division algorithmintroduction to division algorithm
introduction to division algorithm
 
PPT on Vedic maths
PPT on Vedic mathsPPT on Vedic maths
PPT on Vedic maths
 
Vedic maths .PPT
Vedic maths .PPTVedic maths .PPT
Vedic maths .PPT
 
Factor theorem
Factor theoremFactor theorem
Factor theorem
 
History of Zero - Mathematics
History of  Zero - MathematicsHistory of  Zero - Mathematics
History of Zero - Mathematics
 
Cayley Hamilton Theorem
Cayley Hamilton Theorem Cayley Hamilton Theorem
Cayley Hamilton Theorem
 
INDIAN CUISINES - EVERYTHING YOU NEED TO KNOW
INDIAN CUISINES - EVERYTHING YOU NEED TO KNOWINDIAN CUISINES - EVERYTHING YOU NEED TO KNOW
INDIAN CUISINES - EVERYTHING YOU NEED TO KNOW
 
PostgreSQL at 20TB and Beyond
PostgreSQL at 20TB and BeyondPostgreSQL at 20TB and Beyond
PostgreSQL at 20TB and Beyond
 
Toad for oracle 11g 64 bit
Toad for oracle 11g 64 bitToad for oracle 11g 64 bit
Toad for oracle 11g 64 bit
 
Differential Equation by MHM
Differential Equation by MHMDifferential Equation by MHM
Differential Equation by MHM
 
Wso2 is integration with .net core
Wso2 is   integration with .net coreWso2 is   integration with .net core
Wso2 is integration with .net core
 
THE VALLEY OF FLOWERS ENVIRONMENTAL STUDIES CLASS-IV
THE VALLEY OF FLOWERS ENVIRONMENTAL STUDIES  CLASS-IVTHE VALLEY OF FLOWERS ENVIRONMENTAL STUDIES  CLASS-IV
THE VALLEY OF FLOWERS ENVIRONMENTAL STUDIES CLASS-IV
 
Introduction to Functions of Several Variables
Introduction to Functions of Several VariablesIntroduction to Functions of Several Variables
Introduction to Functions of Several Variables
 
Traditional Rajasthani food & dishes
Traditional Rajasthani food & dishesTraditional Rajasthani food & dishes
Traditional Rajasthani food & dishes
 
SETS FOR CLASS 7 AND 8
SETS FOR CLASS 7 AND 8 SETS FOR CLASS 7 AND 8
SETS FOR CLASS 7 AND 8
 
Eigen values and eigen vectors
Eigen values and eigen vectorsEigen values and eigen vectors
Eigen values and eigen vectors
 
Lesson 3: The Limit of a Function
Lesson 3: The Limit of a FunctionLesson 3: The Limit of a Function
Lesson 3: The Limit of a Function
 
Analytic function
Analytic functionAnalytic function
Analytic function
 
Vedicmath
VedicmathVedicmath
Vedicmath
 
Kerala
Kerala Kerala
Kerala
 

Similaire à 허봉춘씨의 파란만장한 IoT 보드 만들기

메이커 페어 서울 2018 - 측우자격루(개발자용)
메이커 페어 서울 2018 - 측우자격루(개발자용)메이커 페어 서울 2018 - 측우자격루(개발자용)
메이커 페어 서울 2018 - 측우자격루(개발자용)JongyoonWon1
 
라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베리파이와 자바스크립트로 IoT 시작하기라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베리파이와 자바스크립트로 IoT 시작하기Circulus
 
IoT with Raspberry Pi + Node JS - Chapter 2
IoT with Raspberry Pi + Node JS - Chapter 2IoT with Raspberry Pi + Node JS - Chapter 2
IoT with Raspberry Pi + Node JS - Chapter 2Park Jonggun
 
창조경제 IoT 해커톤 교육 2일차 교육 자료
창조경제 IoT 해커톤 교육 2일차 교육 자료창조경제 IoT 해커톤 교육 2일차 교육 자료
창조경제 IoT 해커톤 교육 2일차 교육 자료유명환 FunFun Yoo
 
사물인터넷 노트4_라즈베리파이기본
사물인터넷 노트4_라즈베리파이기본사물인터넷 노트4_라즈베리파이기본
사물인터넷 노트4_라즈베리파이기본Dong Hwa Jeong
 
[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기
[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기
[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기NAVER D2
 
Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명진우 이
 
원준갓의 IoT 수업
원준갓의 IoT 수업원준갓의 IoT 수업
원준갓의 IoT 수업Won Jun Song
 
Start io t_with_raspberrypi
Start io t_with_raspberrypiStart io t_with_raspberrypi
Start io t_with_raspberrypiYeonah Ki
 
242 naver-2
242 naver-2242 naver-2
242 naver-2NAVER D2
 
[IoT] MAKE with Open H/W + Node.JS - 4th
[IoT] MAKE with Open H/W + Node.JS - 4th[IoT] MAKE with Open H/W + Node.JS - 4th
[IoT] MAKE with Open H/W + Node.JS - 4thPark Jonggun
 
광운대[바람] 1.vhdl intro
광운대[바람] 1.vhdl intro광운대[바람] 1.vhdl intro
광운대[바람] 1.vhdl introNAVER D2
 
망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324종인 전
 
Jnetpcap quickguide
Jnetpcap quickguideJnetpcap quickguide
Jnetpcap quickguideSukjin Yun
 
Arduino 특강 강태욱
Arduino 특강   강태욱Arduino 특강   강태욱
Arduino 특강 강태욱Tae wook kang
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요? 내훈 정
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System상현 조
 
Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치ymtech
 
신간안내 말하고 듣고 대화하는 Physical computing 아두이노
신간안내 말하고 듣고 대화하는 Physical computing 아두이노신간안내 말하고 듣고 대화하는 Physical computing 아두이노
신간안내 말하고 듣고 대화하는 Physical computing 아두이노sookmyungvisual
 

Similaire à 허봉춘씨의 파란만장한 IoT 보드 만들기 (20)

메이커 페어 서울 2018 - 측우자격루(개발자용)
메이커 페어 서울 2018 - 측우자격루(개발자용)메이커 페어 서울 2018 - 측우자격루(개발자용)
메이커 페어 서울 2018 - 측우자격루(개발자용)
 
라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베리파이와 자바스크립트로 IoT 시작하기라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베리파이와 자바스크립트로 IoT 시작하기
 
IoT with Raspberry Pi + Node JS - Chapter 2
IoT with Raspberry Pi + Node JS - Chapter 2IoT with Raspberry Pi + Node JS - Chapter 2
IoT with Raspberry Pi + Node JS - Chapter 2
 
창조경제 IoT 해커톤 교육 2일차 교육 자료
창조경제 IoT 해커톤 교육 2일차 교육 자료창조경제 IoT 해커톤 교육 2일차 교육 자료
창조경제 IoT 해커톤 교육 2일차 교육 자료
 
사물인터넷 노트4_라즈베리파이기본
사물인터넷 노트4_라즈베리파이기본사물인터넷 노트4_라즈베리파이기본
사물인터넷 노트4_라즈베리파이기본
 
[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기
[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기
[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기
 
Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명
 
원준갓의 IoT 수업
원준갓의 IoT 수업원준갓의 IoT 수업
원준갓의 IoT 수업
 
Start io t_with_raspberrypi
Start io t_with_raspberrypiStart io t_with_raspberrypi
Start io t_with_raspberrypi
 
242 naver-2
242 naver-2242 naver-2
242 naver-2
 
[IoT] MAKE with Open H/W + Node.JS - 4th
[IoT] MAKE with Open H/W + Node.JS - 4th[IoT] MAKE with Open H/W + Node.JS - 4th
[IoT] MAKE with Open H/W + Node.JS - 4th
 
광운대[바람] 1.vhdl intro
광운대[바람] 1.vhdl intro광운대[바람] 1.vhdl intro
광운대[바람] 1.vhdl intro
 
망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324
 
Init to systemd
Init to systemdInit to systemd
Init to systemd
 
Jnetpcap quickguide
Jnetpcap quickguideJnetpcap quickguide
Jnetpcap quickguide
 
Arduino 특강 강태욱
Arduino 특강   강태욱Arduino 특강   강태욱
Arduino 특강 강태욱
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
 
Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치
 
신간안내 말하고 듣고 대화하는 Physical computing 아두이노
신간안내 말하고 듣고 대화하는 Physical computing 아두이노신간안내 말하고 듣고 대화하는 Physical computing 아두이노
신간안내 말하고 듣고 대화하는 Physical computing 아두이노
 

허봉춘씨의 파란만장한 IoT 보드 만들기

  • 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 사용
  • 13. MCU W5500 RJ45 + Transformer SD CARD MAC EEPROM USB USB to UART 1. 컨셉 작업 – 블록 다이어그램
  • 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 선택
  • 27. 7. 펌웨어 – New Project. • ST->STM32F103x->STM32F103VC 선택(OR 검색) • 완료!
  • 28. 7. 펌웨어 – New Project. □ C Library □ Retarget printf □ CMSIS core □ CMSIS Boot □ RCC □ GPIO □ USART □ MISC
  • 29. 7. 펌웨어 – New Project. 디버거 설정: Configuration tab -> Debugger tab
  • 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
  • 34. 7. 펌웨어 – 실습 #2 W5500 포팅 GPIO Initialization • SPI Pin Enable • CS Pin Enable • Reset Pin Enable • INT Pin Enable SPI Initialization • SPI Configuration • SPI Enable Connect to MCU • SPI Read(), SPI Write() Registration. • CS Registration. W5500HardwareInitilize() W5500Initialze()
  • 35. 7. 펌웨어 – 실습 #2 W5500 포팅 void W5500HardwareInitilize(void) { /*Initialize Structure*/ GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; /*Enable clock related peripherals*/ RCC_APB2PeriphClockCmd(W5500_SPI_RCC,ENABLE); RCC_APB2PeriphClockCmd(W5500_GPIO_RCC,ENABLE); /*Initialize CLK Pin*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = W5500_CLK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(W5500_CLK_PORT,&GPIO_InitStructure); /*Initialize MOSI Pin*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = W5500_MOSI_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(W5500_MOSI_PORT,&GPIO_InitStructure); /*Initialize MISO Pin*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = W5500_MISO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(W5500_MISO_PORT,&GPIO_InitStructure); /*Initialize CS Pin*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = W5500_CS_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(W5500_CS_PORT,&GPIO_InitStructure); /*Initialize Reset Pin*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = W5500_RESET_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(W5500_RESET_PORT,&GPIO_InitStructure); /*Initialize INT Pin*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = W5500_INT_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(W5500_INT_PORT,&GPIO_InitStructure); /*Initialize SPI*/ SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(W5500_SPI, &SPI_InitStructure); SPI_Cmd(W5500_SPI, ENABLE); W5500HardwareReset(); }
  • 36. 7. 펌웨어 – 실습 #2 W5500 포팅 GPIO Initialization • SPI Pin Enable • CS Pin Enable • Reset Pin Enable • INT Pin Enable SPI Initialization • SPI Configuration • SPI Enable Connect to MCU • SPI Read(), SPI Write() Registration. • CS Registration. W5500HardwareInitilize() W5500Initialze()
  • 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
  • 42. 7. 펌웨어 모르시겠다구요? 좋습니다. 그럼 지금부터 맨땅에 헤딩 들어갑니다.
  • 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 온 오프