Smart Mirror or Magic Mirror라고 불리우는 프로젝트로 라지베리파이를 이용하여 음성인식을하여
각각 사물을 제어하는 IoT 프로젝트이다.
나도 한번 만들어보고 싶지만, LCD 패널과 관련부품이 돈이 너무 많이 들어갈꺼 같아 현재 고려만 하고 있다.
- Smart Mirror 관련사이트
http://blog.embian.com/120
http://jeongchul.tistory.com/425
http://mazdah.tistory.com/786
https://www.magicmirrorcentral.com/complete-raspberry-pi-magic-mirror-tutorial/
https://www.youtube.com/watch?v=wdaBi33nd3k
https://www.youtube.com/watch?v=cVmDjJmcd2M
1.2 IoT를 구성할 때 필요한 API 를 비롯하여 Device들
http://freemoa-blog.com/639
이외 Smart Plug 기능 및 Google Home에 연결할 수 있는
2. 라즈베리파이에서 Ecplise에 연결하여 테스트 해볼 기능들
가장 만만한 것이 손쉽게 가능한 것이 GDB Server를 이용하여 Remote Debug일 것이다.
2.1 LTTng 사용방법 모색
이 전에 TI Chip를 사용했을 때 CCS Linux Version LTTng기능을 지원 한 적이 있어 사용한 경험이 있는데, 라즈베리파이에서도 이를 한번 적용하여 사용해보고 싶다.
추후에 Ecplise에 연결해서 Trace compass의 LTTng를 이용하여 Kernel을 Trace를 한번 해보도록 하자
http://jeongchul.tistory.com/425
http://mazdah.tistory.com/786
https://www.magicmirrorcentral.com/complete-raspberry-pi-magic-mirror-tutorial/
- Smart Mirror 중요동영상 (EASY SMART MIRROR SETUP)
https://www.youtube.com/watch?v=wdaBi33nd3k
https://www.youtube.com/watch?v=cVmDjJmcd2M
1.2 IoT를 구성할 때 필요한 API 를 비롯하여 Device들
- Open API 관련 정리
http://freemoa-blog.com/639
이외 Smart Plug 기능 및 Google Home에 연결할 수 있는
2. 라즈베리파이에서 Ecplise에 연결하여 테스트 해볼 기능들
가장 만만한 것이 손쉽게 가능한 것이 GDB Server를 이용하여 Remote Debug일 것이다.
- Remote GDB 사용 (GDB Server)
2.1 LTTng 사용방법 모색
이 전에 TI Chip를 사용했을 때 CCS Linux Version LTTng기능을 지원 한 적이 있어 사용한 경험이 있는데, 라즈베리파이에서도 이를 한번 적용하여 사용해보고 싶다.
추후에 Ecplise에 연결해서 Trace compass의 LTTng를 이용하여 Kernel을 Trace를 한번 해보도록 하자
- LTTng Tracer Download
- LTTng-modules (Linux Kernel 용 Module)
- LTTng-UST (User Space Tracer)
- LTTng-Tool 상위 두개를 지원하여 Trace하는 Tool
https://lttng.org/download/
- Eclipse LTTng/SourceAnalyzer (Linux Trace Toolkit Next Generation)
http://embedded.ednc.com/bbs/board.php?bo_table=linux&wr_id=4
https://www.ibm.com/developerworks/community/blogs/fe313521-2e95-46f2-817d-44a4f27eba32/entry/howto_tracing_with_lttng?lang=en
https://www.ibm.com/developerworks/community/blogs/fe313521-2e95-46f2-817d-44a4f27eba32/entry/howto_tracing_with_lttng?lang=en
- Eclipse LTTng Kernel Analysis
Eclipse에서 쉽게 추가 가능하며 아래와 같이 Tracecompass Manual 참고
http://archive.eclipse.org/tracecompass/doc/stable/org.eclipse.tracecompass.doc.user/LTTng-Kernel-Analysis.html
2.2 OpenOCD (On-Chip Debugger) 사용 방법 모색
OpenOCD는 JTAG Interface를 통하여 Chip Level에서 Debugging을 하는 것이며, 이를 GDB로 연결하여 보통사용한다.
나의 경우는 주로 Ecpliise 기반의 IDE에서 사용한 것이며, Raspberry Pi3에서도 가능한지 한번 살펴 봐야할 것 같다.
http://openocd.org/doc-release/README
http://openocd.org/doc/html/OpenOCD-Concept-Index.html#OpenOCD-Concept-Index
가장 대표적일 것이 쉽게 사용하는 것이 ST사의 ST-Link 일 것 같다.
2.2.1 JTAG Interface의 변화
우선 기존의 JTAG과 SWD를 간단히 이해해보도록 하자.
JTAG 설명은 너무많이 나오므로 아래사이트 참조하도록하자
- Ecplise 관련 Manual (LTTng)
2.2 OpenOCD (On-Chip Debugger) 사용 방법 모색
OpenOCD는 JTAG Interface를 통하여 Chip Level에서 Debugging을 하는 것이며, 이를 GDB로 연결하여 보통사용한다.
나의 경우는 주로 Ecpliise 기반의 IDE에서 사용한 것이며, Raspberry Pi3에서도 가능한지 한번 살펴 봐야할 것 같다.
- OpenOCD란?
http://openocd.org/doc-release/README
- OpenOCD Manual
http://openocd.org/doc/html/OpenOCD-Concept-Index.html#OpenOCD-Concept-Index
가장 대표적일 것이 쉽게 사용하는 것이 ST사의 ST-Link 일 것 같다.
2.2.1 JTAG Interface의 변화
우선 기존의 JTAG과 SWD를 간단히 이해해보도록 하자.
JTAG 설명은 너무많이 나오므로 아래사이트 참조하도록하자
- JTAG의 관련설명
아래의 Wiki에서 쉽게 설명해주고 있어 구지 설명할 필요가 없음
https://en.wikipedia.org/wiki/JTAG
https://ko.wikipedia.org/wiki/JTAG
여기서 PIN의 기준은 TAP(Test Access Port), Device1,2,3 기준이므로 Pin의 in/out이 달라지므로 혼동하지 말자.
JTAG PIN
https://www.electronics-notes.com/articles/test-methods/boundary-scan-jtag-ieee1149/jtag-interface-tap-test-access-port-connector.php
TAP(Test Access Port)의 상태
https://en.wikipedia.org/wiki/JTAG#JTAG_facilities
https://en.wikipedia.org/wiki/JTAG
https://ko.wikipedia.org/wiki/JTAG
- JTAG의 기본구성
https://en.wikipedia.org/wiki/JTAG |
- TDI (Test Data In): JTAG의 Output으로 TMS에 따라 command/Data가 결정
- TDO (Test Data Out): JTAG의 Input으로 Device의 Address/Data가 결정
- TCK (Test Clock): JTAG의 Output Clock
- TMS (Test Mode Select): JTAG의 Output TEST Mode 전환
- TRST (Test Reset) optional): 사용은 옵션 JTAG의 Output
https://www.electronics-notes.com/articles/test-methods/boundary-scan-jtag-ieee1149/jtag-interface-tap-test-access-port-connector.php
TAP(Test Access Port)의 상태
https://en.wikipedia.org/wiki/JTAG#JTAG_facilities
JTAG의 동작방식은 간단하며, TAP의 상태에 따라 TDI에 명령어와 Data를 넣어 TDO로 결과를 가져오는 방식이다.
- Boundary Scan
https://en.wikipedia.org/wiki/Boundary_scan
- JTAG 와 SWD
SWD(Serial Wired Debug)로 JTAG의 축소판으로 Pin으로 최소 아래의 3PIN이 필수이며, JTAG Pin과 Match되는 부분은 아래와 같다.
- SWCLK(Serial Wire Clock): TCLK
- SWDIO(Serial Wire debug Data Input/Output): TMS
- SWO(Serial Wire trace Output): TDO
JTAG 과 SWD의 일반적인 Match 일뿐이지 SWDIO와 TMS는 동일하지 않으며, SWDIO는 Input/Output로 사용한다.
JTAG과 SWD 유사할 뿐이지 동작은 조금 다르며, TAP(Test Access Port) 대신 DAP(Debug Access Port)를 용어를 사용하지만, 내부적으로 보면 거의 유사
세부내용
https://research.kudelskisecurity.com/2019/05/16/swd-arms-alternative-to-jtag/
- TRACE32의 정보 (JTAG/SWD)
- JTAG과 SWD 차이
2.2.2 OpenOCD 에 사용되는 Hardware
- USB기반의 다양한 JTAG Interface가 이를 사용
- USB FT2232: USB To Serail로만 사용하는줄 알았는데, USB To JTAG로 가능
- USB J-Link
- USB RLINK
- USB ST-LINK
- 나머지들 아래참고
- FT2232 기반의 USB JTAG
https://www.ftdichip.com/Products/ICs/FT2232D.htm
2.2.3 Raspberry Pi3 의 연결 JTAG 연결방법
현재 생각으로 값싼 ST-Linkv2로 SWD가 지원을 하니, 이를 연결을 해볼 생각이다.
아래와 같이 나와 비슷한 생각을 한 사람이 있어 다행이지만, 테스트를 해보자.
https://spin.atomicobject.com/2014/04/01/ethernet-adapter-jtag/
- Raspberry PI3 JTAG Interface (Pin을 확인)
2.2.4 OpenOCD를 GDB에 연결
주로 Ecplise기반의 GDB에서 연결하여 사용을하고 있기 때문에 이 부분은 먼저 JTAG 부분먼저 확인을 하고 진행하자
- STM를 사용할때 ST-Link를 이용하여 OpenOCD에서 GDB연결
GDB 와 OpenOCD 를 연결하여 IDE에서 많이 Debug를 하고 있으며 대표적인 것이 ST-Link를 이용하는 것일 것 이다.
일단 하고 나의 라즈베리파이에서 OpenOCD를 적용하여 테스트를 진행하도록 하겠다.
Eclipse ARM OpenOCD Plug
https://gnu-mcu-eclipse.github.io/
https://gnu-mcu-eclipse.github.io/debug/
https://gnu-mcu-eclipse.github.io/openocd/
http://openocd.org/