강의를시작하기전에 - wiznet...

58
강의를 시작하기 전에! CoIDE 설치 – 그냥 다음 다음만 누르시면 됩니다. Gcc 설치 – 맨 마지막 단계에 환경 변수 추가하는 체크박스를 클릭한 후 완료해 주세요. CDM 설치 – 압축해제 후 PC 시스템에 맞는 프로그램 설치 (32/64bit)

Upload: others

Post on 22-Jan-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

강의를 시작하기 전에!

• CoIDE 설치 – 그냥 다음 다음만 누르시면 됩니다.

• Gcc 설치 – 맨 마지막 단계에 환경 변수 추가하는 체크박스를 클릭한 후 완료해 주세요.

• CDM 설치 – 압축해제 후 PC 시스템에 맞는 프로그램 설치 (32/64bit)

Page 2: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

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

강 사

안진희

정석균

Ethernet 시작하기

Page 3: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

• 이름: 허봉춘

• 나이: 30세

• 학력: 그냥 저냥 전자과 대졸(평점 3.3)

• 생김새: 동네 아저씨

• 학생 경력: 교내 경진 대회에서 AVR 라인 트레이서 입상.

• 직장 경력• 중소 기업에서 2년째 근무 중

• 2년째 AVR로 RS232로 장비 제어하는 것만 하고 있음.

• 거주지: 회사 근처의 월세 40만원짜리 월세에 살고 있음.

• 가족 관계: 아버지, 어머니, 여동생.

• 할 줄 아는 것: AVR 코딩, 회로 그리기, Artwork.

HUR BONG CHUN! 그는 누구인가!

Page 4: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

봉춘씨의 뇌 구조

나도 좀 발전하고 싶다.

AVR만 해서 나중에먹고 살 수 있을까?요세 IoT대세라던데.

배고프다.이직하고

싶다.

아~ 조금 더 많은 걸경험하고 내 자신을발전시켜서 야근 많

이 안 하면서 돈 많이주는 회사로 이직해

서 여자 친구도 좀 사귀고 맛있는 것도 좀사먹고 싶은데 선배새끼는 계속 갈궈서

짜증이 난다.

Page 5: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

• IoT가 대세라던데… IoT가 뭐지?• 사물 인터넷? 아~ 죄다 인터넷에 연결하는 거네.

• 오~그럼 보일러 같은 거 핸드폰으로 끄면 좋겠다. 끄는 걸 자꾸 까먹어서 지난 달

가스 값이 ㅠㅠ

• 그럼 어떻게 인터넷이 되게 하지?

• 뭐? 임베디드 이더넷?

아~ 나도 발전하고 싶다. 대강 훑어볼까?

늘 발전!하고 있는 피카츄!

Page 6: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

• RJ-45 - 이건 커넥터 잖아~ 패스~

• Transformer – 트랜스포머는 뭐 필요한가 보다~ 하는 거지 ㅎㅎ

• PHY? – 그게 뭐시다냐…

• MAC? – Mac 주소 이야기 하는건가?

• TCP/IP Stack – 포팅을 해야 한다고???

• Application – HTTP, FTP, DHCP, SMTP…… 내가 만들어야 한다고???

흐음.. 임베디드 이더넷을 하려면?

봉무룩

MCU

MAC

PHY

Transformer RJ-45

Application

TCP/IP

“언제 공부해서 언제 하냐!ㅠㅠ 아~ 그냥 포기해야 겠다.”

Page 7: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

뭐? W5500? 그게 뭔데?

오! MAC PHY TCP/IP 다 들어 있어!오! 나 SPI 알아. 나 해봤어.오! ~좋아! 이거 가능성이 있겠는데?

Page 8: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

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 칩 내부를 한번 볼까 ?!

Page 9: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

• Fully Hardware TCP/IP 이더넷 솔루션 !

: WIZnet의 가장 저렴하고 가장 최신의 칩 !!

- W3100<W3100A(+)<W5100<W5300<W5200

- TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE

- 8 SOCKETs

- Integrated Ethernet PHY

- SPI Mode 0/3 (Up to 80MHz)

- 48LQFP

W5500은 ?

Page 10: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

W5500 Block Diagram

Page 11: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

- SPI Mode 0 / 3 - Host Connect (VDM or FDM)

VDM

FDM

W5500 – Host I/F SPI(1)

- SPI VDM FDM은 뭐지..- 자 ! 이것은 MISO/MOSI 신호가 SCLK의

Rising edge때 수신(Sampling)되며, Falling edge 때 송신(Toggling)된다 !

Page 12: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

• W5500 SPI Frame은 아래와 같이 구성되어 통신한다 !

• SPI Operation Mode

Variable Data Length Mode (VDM) : SCSn으로 제어되며 ! Data 전송길이를

1 ~ N byte로 정하여 전송되는 모드 !

Fixed Data Length Mode (FDM) : OP Mode에서 정해진 List에 따라 Data

전송길이가 결정되어 전송되는 모드 !

W5500 – Host I/F SPI(2)

생각보다 어렵지 않은데 ~ ?!

Page 13: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

W5500으로 IoT 보드 한 번 만들어 보자!

그까이꺼 대강 뚝딱 만들면 되지!!

그래! 결심했어!

우리 봉춘씨가 기분 좋은 상상을 하며 이렇게 웃고 있겠죠?

Page 14: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

!!대공개!! 허 봉춘씨의 프로젝트 진행 계획!

1. 컨셉 작업

2. 소자 선정

3. 개발 비용 및 제작 단가 산출

4. 회로 설계

5. 아트웍

6. 샘플 보드 발주 및 납땜

7. 펌웨어

8. 개발

Page 15: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

1. 컨셉 작업 – Brain Stormming

• 뭘 만들지?• W5500으로 Ethernet에 연결이 가능하고 새로운 MCU를 사용해서 보드를 만들어 보자.

• 어떻게 만들지?• 내가 직접 회로설계랑 아트웍이 가능하니 직접 하드웨어를 만들고 펌웨어도 직접 작성해

보자.

• 무엇을 배울 수 있을까?• Embedded Ethernet 하드웨어 설계와 Embedded Ethernet 펌웨어 작성을 배울 수 있어.

• 보드에 얼마를 투자할 수 있을까?• 나는 월급이 적으니까..… 원가를 1-2만원에 맞추고 싶은데? 좋아! 박리다매야 박리다매!

• 보드에 시간을 얼마나 투자할 수 있을까?• 아 맨날 야근하고… 시간은 늘 부족해… 귀찮기도 하고. 그렇다면 하루에 1시간씩 투자해

보자.

Page 16: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

1. 컨셉 작업 - 목표

W5500 사용

보드 원가 2만원 이하

Embedded Ethernet

구현

새로운 MCU 사용

Page 17: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

MCU W5500RJ45+

TransformerSD CARD

MACEEPROM

USB USB to UART

1. 컨셉 작업 – 블록 다이어그램

Page 18: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

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.

• 24AA02E48T• 2K Serial EEPROM, Official Mac address, I2C interface.

• Micro USB

• Micro SD Card

• External Pin Header

Page 19: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

3. 개발 비용 및 단가 산출

허 봉춘: 2만원에 맞출 수 있나? 단가를 알아 봐야겠네…

◈ USB 케이블은 검색해보면 440원, 랜 케이블은 280원 정도입니다. 봉춘씨 참고하세여~

품 목 단 가 비 고

W5500 3,200원

STM32F103VC 3,200원 음 적당한 가격 같아! 아는 업체 견적

FT2232D 5,500원 헐 겁나 비싸! ㅠㅠ 아는 업체 견적

24AA02E48T 250원 오 이건 싸네! ㅎㅎ 아는 업체 견적

나머지 소자 3,000원 나머지 해봐야 한 3천원 넘겠어?

PCB 2,250원 한판에 18만원 정도 했으니까.. 80장은 나오겠지?

SMT 1,000원 잘 모르겠다. 한 천원 하지 않을까?

합 계 18,400원 오예~ 2만원 안 넘는다.~~

Page 20: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

4. 회로 설계

허 봉춘: 좋아! 이제 회로 설계를 해볼까? W5500부분부터 해야지~ 레퍼런스~ 랄라~

- http://wizwiki.net/wiki/doku.php?id=products:w5500:refschematic

Page 21: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

4. 회로 설계

허 봉춘: 이제 MCU쪽! 리셋, 부트 버튼도 달고~ VCC에 Decoupling CAP도 달고~ 룰루~

Page 22: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

4. 회로 설계

허 봉춘: FTDI USB! 이것도 Datasheet에 레퍼런스 회로가 똭! 이것도 똑같이 그려야징~

MICRO USB

3.3V REGULATOR

EXTERNAL POWER SELECT

Page 23: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

4. 회로 설계

허 봉춘: 그리고 마지막으로 Output Pin좀 빼고~ 다양하게 Mount Hole 장착! 마무리!

EXTERNAL OUTPUT

W5500 : SPIPC0~PC3 : ADCPA0~PA3 : USART2 FULLPB8~PB9 : I2C1 OR CANPB10~PB11 : I2C2/USART3PB12~PB15 : SPI2/I2SPA11~PA12 : USBPD0~PD1 : CANPD5~PD6 : USART2

PCB MOUNT HOLE

EXTERNAL CONNECTOR

Page 24: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

아트웍시 주의사항

• 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를 깔지 않음.

Page 25: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

아트웍 좋은 예

Page 26: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

5. 아트웍허 봉춘: 지킬껀 지켜가면서 아트웍 완성 !!

허 봉춘: 자! 이제! 샘!플!발!주!!!!!!!!!!!!!!!!!!!!!!!! 슈웅~ 투쿵~ 철컥철컥! 출격!

* Sample pcb 제작 가격은 업체마다 틀리지만 보통 5개 정도에 7~8만원 정도 합니다. 참고하시기 바랍니다.

Page 27: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

6. 샘플 납땜 및 디버깅.

허 봉춘: 아놔! ㅠㅠ RJ-45 핀이 다 같은게 아니었어. 레퍼런스 완전 똑같이 할 걸. ㅠㅠ

만신창이 ㅠㅠ

• 봉춘씨의 IoT Sample 납땜 결과- RJ-45를 레퍼런스와 다른 종류를 사용하였습니다.- Mac 주소 EEPROM의 NC핀과 VCC핀이 뒤바뀌었습니다.- 리셋 버튼과 Boot0핀이 너무 가깝습니다.- USB Port 고정용 Hole을 뚫지 않았습니다.- SD Card socket 고정용 Hole 사이즈가 너무 작습니다.

하드웨어 개발에서는 한 번에 성공하리란 힘들죠~ 다시 한번 제작!

Page 28: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

6. 샘플 납땜 및 디버깅.

허 봉춘씨는 다시 한 번 회로와 아트웍을 수정하여 보드를 완성하였습니다.

• 봉춘씨의 IoT EVB 디버그- 레퍼런스와 같은 RJ-45를 사용했습니다.- EEPROM의 NC와 VCC를 정상적으로 연결했습니다.- 리셋 버튼과 Boot0 버튼의 거리를 벌렸습니다.- USB Port 고정용 Hole을 뚫었습니다.- SD Card socket 고정용 Hole 사이즈를 변경했습니다.- 기타 Mount Hole 위치 및 Copper거리를 변경했습니다.

자! 이제부터는 펌웨어 단계입니다. 지금부터는 여러분들이 허 봉춘씨입니다. 레드~썬!!

Page 29: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

7. 보드 테스트 !

- Ethernet connector LED 확인 !!Ehernet Connector(RJ-45)에서

LED 초록색은 계속 켜져있고 !LED 노란색은 깜빡 해야한다 !

- 정상 동작 보드 판단 기준 !1. 빨간색 테두리(전원) LED on 확인2. Ethernet connector LED on 확인

Page 30: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

7. 보드 테스트 !

반드시 확인되어야 할 것 !

1. 제어판 -> 시스템 접속 !

2. 장치관리자 접속 !

3. 포트(COM & LPT)에서USB Serial Port가 2개 접속되어 있는지 확인 !

1

2

3

Page 31: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 개발 환경.

• CoIDE + gcc 사용.

• GCC tool chain 설정.• Project->Select Toolchain Path

• gcc가 설치된 디렉토리 중 bin 폴더 선택

Page 32: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – New Project.

• Project->New Project 선택 -> 프로젝트 이름 입력.

• Chip 선택

Page 33: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – New Project.

• ST->STM32F103x->STM32F103VC 선택(OR 검색)

• 완료!

Page 34: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – New Project.

□ C Library□ Retarget printf□ CMSIS core□ CMSIS Boot□ RCC□ GPIO□ USART□ MISC

Page 35: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – New Project.

디버거 설정: Configuration tab -> Debugger tab

Page 36: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – New Project.

컴파일 후 다운로드 해 봅시다. 보드에 정상적으로 다운로드가 되나요?

정상적으로 다운로드 되면 이렇게 메시지가 나오죠~

Page 37: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 실습 #1 LED ON/OFF

• LED ON/OFF• 새로운 보드가 정상적으로 동작하는 것을 확인할 수 있는 가장 기본적인 펌웨어는 LED ON/OFF입니다.

• GPIO를 이용해 LED를 ON/OFF를 스스로 할 수 있다면 50%는 끝난 거라는 말이 있을 정도로 기본 중에 기본입니다.

Page 38: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

• LED는 PE0, PE1 연결되어 있어요 !

8. 펌웨어 – 실습 #1 LED ON/OFF

Page 39: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 디버깅을 해보자 !

Serial Port 2개 중 ,

1개는 JTAG ! (Debugger !)1개는 UART (Serial 메시지 확인 !)

Page 40: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 디버깅을 해보자 !

Main문 시작 지점

마우스로 더블 클릭 하면 Break point 아이콘이 생김.-> Main문 동작 시작 후 18번 지점에서 동작 멈춘다.

2. Dubugger main문 Break point 설정하기1. Dubugger 실행

위 아이콘을 클릭 하면Debug mode로 접속 !

Page 41: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 디버깅을 해보자 !

3. Dubugger 변수 값 알아보기

- 위 코드에서 for문은 Delay 용도로 사용된다.- for문의 ‘i’변수의 값을 알아보자.

- Tool의 하단 오른쪽 부분에 Variables에서- Add Global Variables…를 클릭 !- ‘i’를 체크하고 “OK”를 클릭한다.

3-1. 알아볼 변수 셋팅 !

Page 42: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 디버깅을 해보자 !

3-2 Dubugger 실행 후 변수 값 확인 !

Debug Start

Debug Stop

1) Tool 상단에 아이콘을 클릭 하면 Debug 시작한다.2) 아이콘을 클릭하여 Debug가 멈춘다.3) 코드를 보면 시작 지점과 끝 지점이 표시된다.4) 설정한 변수의 현재 값이 출력된다.

Start 지점

Stop 지점

‘i’ 변수 ‘i’ 변수 값

Page 43: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 실습 #2 W5500 포팅

• 포팅이란 단어만 나와도 머리가 아프시죠? 두통에 고생하시는 “허 봉춘”님들(?)을 위해서선물을 준비했습니다.

IoT 강의 -> PROJECT ->1. PORTING

Page 44: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8.펌웨어 – 실습 #2 W5500 포팅

• 사실 어렵지 않아요!!!

• MCU와 연결• SPI – 4 Lines

• INTERRUPT – 1 Lines

• RESET – 1 Lines

MCU

SPI

CS

RESET

INT

SPI, RESET, INT

Page 45: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

W5500 SPI Frame

- ioLibrary에서 W5500 SPI Frame을 자체적으로지원한다.

- 사용자는 간단한 함수 호출로 사용 가능하다.

8.펌웨어 – 실습 #2 W5500 포팅 (ioLibrary)

Page 46: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 실습 #2 W5500 포팅

GPIO Initialization

• SPI Pin Enable

• CS Pin Enable

• Reset Pin Enable

• INT Pin Enable

SPI Initialization

• SPI

Configuration

• SPI Enable

Connect to ioLibrary

• SPI Read(), SPI

Write()

Registration.

• CS Registration.

W5500HardwareInitilize() W5500Initialze()

Page 47: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 실습 #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();}

Page 48: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 실습 #2 W5500 포팅

GPIO Initialization

• SPI Pin Enable

• CS Pin Enable

• Reset Pin Enable

• INT Pin Enable

SPI Initialization

• SPI Configuration

• SPI Enable

Connect to ioLibrary

• SPI Read(), SPI

Write()

Registration.

• CS Registration.

W5500HardwareInitilize() W5500Initialze()

Page 49: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 실습 #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 함수

Page 50: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 실습 #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.\r\n");}

do{//check phy status.if(ctlwizchip(CW_GET_PHYLINK,(void*)&temp) == -1){

printf("Unknown PHY link status.\r\n");}

}while(temp == PHY_LINK_OFF);}

SPI Read Write 함수 등록

Chip Select 함수 등록

Page 51: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 포팅 완료! 아싸!…… 근데 이제……

근데 이제 어떻게 뭘 해야 하지?

• Socket을 열라고? Socket이 뭔데? 8개 까지 동시에 가능하다고는 했는데…

• Port 번호가 필요하다고? Port가 뭔데?

• UDP는 어떻게 하지? 뭐 커넥션이 필요 없고… 뭐 설정하는 함수가 있나?

• TCP는 어떻게 하지? 음… 커넥션이 필요하고… 이것도 이 정도만 알아.. ㅠㅠ

Page 52: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – socket이 뭐지..?

• 상상해봐요. 지금 봉춘씨들은……• 인터넷으로 음악을 들으면서

• 친구와 채팅도 하고 있습니다.

• 그러다가 잠깐 인터넷 쇼핑도 좀 하고

• 아웃룩으로 온 E-mail도 확인 합니다.

Internet 음악카카오톡 채팅인터넷 쇼핑E-mail 확인

Internet 음악 주는 서버

카카오 서버

쇼핑몰 서버

E-mail 서버

PC

Page 53: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – socket이 뭐지..?

• 눈치 채셨죠? 네 맞습니다. Socket은 프로그램들의 연결 통로라고 보시면 됩니다.

• 각각의 프로그램은 Socket으로 구분되고 Port는 그 Socket의 번호에 해당합니다.

• 일반적으로 BSD 소켓이 사용되고 있고 WIZnet도 BSD 형식으로 코드를 제공합니다.

Internet 음악카카오톡 채팅

인터넷 쇼핑E-mail 확인

Internet 음악 주는 서버

카카오 서버

쇼핑몰 서버

E-mail 서버

PC

SOCKET

SOCKET

SOCKET

SOCKET

SOCKET

SOCKET

SOCKET

SOCKET

Page 54: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

• UDP (User Datagram Protocol)은 비 연결지향 프로토콜이라 불러요.

• Data를 보내면 그에 따른 응답이 오지 않는 특성을 가지고 있죠..

• 실시간 멀티미디어 정보를 처리하기 위해 주로 사용해요~

8. 펌웨어 – UDP는 뭐지?

연결 없음 , UDP Data 전송

Page 55: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

• TCP(Transmission Control Protocol)은 연결지향 프로토콜이라 해요.

• Data를 보내면 그에 따른 응답이 오는 특성을 가지고 있죠 !

• 데이터의 신뢰도가 중요하다고 판단될 때 사용하는 방법이랍니다.

8. 펌웨어 – TCP는 뭐지?

TCP 연결 TCP Data 전송

Page 56: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어

모르시겠다구요? 좋습니다.

그럼 지금부터 맨땅에 헤딩 들어갑니다.

Page 57: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 실습 #3 UDP echo

SOCKET OPEN

RECEIVE

SEND

socket(); 소켓 열기

recvfrom(); 데이터 받기

sendto(); 데이터 보내기

Page 58: 강의를시작하기전에 - Wiznet Academywiznetacademy.com/wp/wp-content/uploads/2015/10/lecture... · 2015. 10. 26. · 강의를시작하기전에! •CoIDE 설치–그냥다음다음만누르시면됩니다

8. 펌웨어 – 실습 #4 TCP LED ON/OFF

SOCKET OPEN

LISTEN

ESTABLISH

socket(); 소켓 열기

RECEIVE

LED ON/OFF

SEND

listen(); 연결 듣기

getSn_SR(); 상태 확인

recv(); 데이터 받기

send(); LED 컨트롤 완료 보내기

led1Ctrl(); LED 온 오프