4/22/2018

Raspberry-Pi3 관련프로젝트 및 OpenOCD 자료수집

1. Raspberry  Pi3 의 Projects 

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/


  • Smart Mirror 중요동영상 (EASY SMART MIRROR SETUP)
  https://www.youtube.com/watch?v=pcmjht0Hqvw
  https://www.youtube.com/watch?v=wdaBi33nd3k
  https://www.youtube.com/watch?v=cVmDjJmcd2M



1.2 IoT를 구성할 때 필요한 API 를 비롯하여 Device들 

  • Open API 관련 정리
IoT를 구현하기 위해서 연결할  OpenAPI 부분
  http://freemoa-blog.com/639

이외 Smart Plug 기능 및 Google Home에 연결할 수 있는


2. 라즈베리파이에서 Ecplise에 연결하여 테스트 해볼 기능들 

가장 만만한 것이 손쉽게 가능한 것이 GDB Server를 이용하여 Remote Debug일 것이다.

  • Remote GDB 사용 (GDB Server)
  http://geomodule.com/sw-eng-notes/2017/03/25/raspberry-pi-debugging-with-gdb-command-line/


2.1 LTTng 사용방법 모색 

이 전에 TI Chip를 사용했을 때 CCS Linux Version LTTng기능을 지원 한 적이 있어 사용한 경험이 있는데, 라즈베리파이에서도 이를 한번 적용하여 사용해보고 싶다.
추후에 Ecplise에 연결해서 Trace compass의 LTTng를 이용하여 Kernel을 Trace를 한번 해보도록 하자

  • LTTng Tracer Download
LTTng 관련 Tool을 쉽게 Download 가능
  1. LTTng-modules (Linux Kernel 용 Module)
  2. LTTng-UST (User Space Tracer)
  3. LTTng-Tool 상위 두개를 지원하여 Trace하는 Tool 
  https://lttng.org/download/


  • Eclipse LTTng/SourceAnalyzer (Linux Trace Toolkit Next Generation)
Eclipse 기반으로 다양하게 사용되는 것을 확인가능하며 아래의 사이트에서 확인 

  • Eclipse LTTng Kernel Analysis
Eclipse에서 쉽게 추가 가능하며 아래와 같이 Tracecompass Manual 참고  
  http://archive.eclipse.org/tracecompass/doc/stable/org.eclipse.tracecompass.doc.user/LTTng-Kernel-Analysis.html

  • Ecplise 관련 Manual (LTTng)
  https://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.linuxtools.lttng.help%2Fdoc%2FInstallation.html



2.2 OpenOCD (On-Chip Debugger) 사용 방법 모색 

OpenOCD는 JTAG Interface를 통하여 Chip Level에서 Debugging을 하는 것이며, 이를 GDB로 연결하여 보통사용한다.
나의 경우는 주로 Ecpliise 기반의 IDE에서 사용한 것이며, Raspberry Pi3에서도 가능한지 한번 살펴 봐야할 것 같다.

  • OpenOCD란? 
  http://openocd.org/doc/html/About.html
  http://openocd.org/doc-release/README

  • OpenOCD Manual 
  http://openocd.org/doc/html/index.html#Top
  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


  • JTAG의 기본구성
기본 구성은 Daisy-chained JTAG (IEEE 1149.1) 형식으로 아래와 같이 Chain 형식으로 연결되어 각 Device 에게 Read / Write를 할 수가 있다. 


https://en.wikipedia.org/wiki/JTAG
여기서 PIN의 기준은 TAP(Test Access Port), Device1,2,3 기준이므로 Pin의 in/out이 달라지므로 혼동하지 말자.

  1. TDI (Test Data In): JTAG의 Output으로 TMS에 따라 command/Data가 결정 
  2. TDO (Test Data Out): JTAG의 Input으로 Device의 Address/Data가 결정 
  3. TCK (Test Clock): JTAG의 Output Clock
  4. TMS (Test Mode Select):  JTAG의 Output TEST Mode 전환 
  5. TRST (Test Reset) optional): 사용은 옵션 JTAG의 Output 

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


JTAG의 동작방식은 간단하며, TAP의 상태에 따라 TDI에 명령어와 Data를 넣어 TDO로 결과를 가져오는 방식이다.


  • Boundary Scan
JTAG 입장에서 보면 TMS/TCK/TDI에 결정이 되고 , TDO로 결과값을 보는 형식



  https://en.wikipedia.org/wiki/Boundary_scan

  • JTAG 와 SWD
STM의 ST-Linkv2를 사용하다 보면 JTAG or SWD(Serial Wired Debug)로 선택을 해서 사용한다.
SWD(Serial Wired Debug)로 JTAG의 축소판으로 Pin으로 최소 아래의 3PIN이 필수이며, JTAG Pin과 Match되는 부분은 아래와 같다.

  1. SWCLK(Serial Wire Clock): TCLK
  2. SWDIO(Serial Wire debug Data Input/Output): TMS
  3. 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)
  http://www.trace32.com/archive/view.php?mnu=5&no=48&board=newsletter&uid=840&cp=1&field=&keyword=


  • JTAG과 SWD 차이 
  http://forum.falinux.com/zbxe/?document_srl=796669&mid=lecture_tip&order_type=asc&sort_index=readed_count


2.2.2 OpenOCD 에 사용되는 Hardware 

  • USB기반의 다양한 JTAG Interface가 이를 사용
  1. USB FT2232: USB To Serail로만 사용하는줄 알았는데, USB To JTAG로 가능 
  2. USB J-Link
  3. USB RLINK 
  4. USB ST-LINK
  5. 나머지들 아래참고 
  http://openocd.org/doc/html/Debug-Adapter-Hardware.html#Debug-Adapter-Hardware


  • FT2232 기반의 USB JTAG
  https://nexp.tistory.com/86
  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을 확인)
  https://movr0.com/2016/09/02/use-raspberry-pi-23-as-a-jtagswd-adapter/


2.2.4  OpenOCD를 GDB에 연결 

주로 Ecplise기반의 GDB에서 연결하여 사용을하고 있기 때문에 이 부분은 먼저 JTAG 부분먼저 확인을 하고 진행하자

  • STM를 사용할때 ST-Link를 이용하여 OpenOCD에서 GDB연결 
  https://m.blog.naver.com/PostView.nhn?blogId=abby21&logNo=80208277200&proxyReferer=https%3A%2F%2Fwww.google.com%2F


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/