서론

  • 일반적으로 firefly RK3399 펌웨어 업데이트를 위해
    1. USC Type-C 커넥터를 Host 컴퓨터에 연결하고
    2. 이미지를 Flash함
  • 위 두 상황에 대해서 하드웨어와 소프트웨어 관점에서의 분석을 함

본론

어떻게 연결되나

  • USB-TypeC 커넥터는 개발보드 제조사에서 제공하는 Position 파일에서 확인 가능
  • J9, USB_TYPEC_115H0, TYPEC-24M-A1M1A5-07LH으로 명명됨
  • 눈에 보이는 커넥터 부터 차근차근 알아 보기로 함

1. 커넥터

1-1. 일반적인 USB C타입

일반적인 USB TYPE-C에 대해 먼저 알아 봄

  • A1 ~ A12, B1 ~ B12 총 24핀
  • GND : 4개
  • VBUS : 4개 (+V 라고도 불림, 5V DC)
  • D+ : 2개 (USB 2.0 데이터 신호선)
  • D- : 2개 (USB 2.0 데이터 신호선)
  • TX/RX 1/2 +/- : 8개 (USB 3.0)
  • SBU : 2개 (새컨드 버스)
  • CC : (2개, 컨피그래이션 채널, 장치연결감지, 파워 딜리버리)

추가 설명

  • DFP(downstream facing port) : 호스트
  • UFP(upstream facing port) : 디바이스
  • DRP(Dual-Role Port) : OTG

커넥터 핀맵

A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12
GND TX1+ TX1- VBUS CC1 D+ D- SBU1 VBUS RX2- RX2+ GND
GND RX1- RX1- VBUS SBU2 D- D+ CC2 VBUS RX2- TX2+ GND

1-2. 데이터 시트에서의 핀

  • VBUS_1 ~ 4 : VBUS_TYPEC
  • CC1 ~ 2 : TYPEC_CC1 ~ 2 : U37
  • SBU1 ~ 2 : TYPEC0_SBU1 ~ 2 : RK3399
  • DM1 ~ 2 : TYPEC0_DM
  • DP1 ~ 2 : TYPEC0_DP : RK3399
  • SSXXX_X : TYPEC0_XXXX : RK3399
  • GND1 ~ GND4 : GND
  • HOLE_1 ~ 2
  • GND_E1 ~ 8 : GNE

1-2-1. UBUS

  • UBUS는 5V DC, 전원에 해당하는 것 같음
  • VBUS_TYPEC와 연결 돼 있음
  • Power Tree를 보면, SY6280AAAC과 연결 됨
  • SY6280AAAC는 5.5V 1A USB 파워 분배 소자임

1-2-2. CC

  • CC1과 CC2는 TYPEC_CC1으로 FUSB302MPX과 연결 됨
  • FUSB302MPX는 프로그래머블 Type-C PD 컨트롤러임
  • 소스와 싱크(=호스트와 디바이스, =DPF와 UFP)간 연결 감지
  • PD : 파워딜리버리, 20V 5A 100W 고속 충전 가능

여기서 Rd, Rp라는 용어가 나옴

  • Rd : pulldown resistors
  • Rp : pullup resistors

1-2-3. SBU

  • TYPEC0_SBU1을 통해서 RK3399로 연결됨

1-2-4. DM(D-), DP(D+)

  • TYPEC0_DM을 통해서 ESD5304D을 지나 RK3399로 연결됨
  • ESD5304D는 TVS(Transient Voltage Suppressor, =과도전압억제)
  • 노이즈 없애는 TVS를 통해서 RK3399로 연결된다고 보면 될 듯
  • USB 2.0 기존의 데이터 라인

1-2-5. RX/TX 1/2 +/-

  • TX1 +/-
  • TX2 +/-
  • RX1 +/-
  • RX2 +/-, 총 8개
  • ESD5304D을 지나 RK3399로 연결됨

하드웨어는 이정도… 다시 소프트웨어를 보는게 좋겠음.

소프트웨어

  • 소스 : https://github.com/linuxerwang/rkflashkit.git

1. main()

  • wait_for_one_device()에서 하드웨어 연결 상태 확인
  • list_devices()로 디바이스 목록을 갖고 옴

하 이건 또 뭐야 usb bulk

  • 소스를 보면 usb bulk라는게 나옴
  • 뜬금없이 USB에 대한 공부가 될 수 있음

일반적인 USB에 대한 정보

  • Data 전송방식은 다음 4종류
    • Control : PnP Data 전송, 주변 기기 제어에 사용
    • Interrupt : 주기마다 소량의 Data
    • Bulk : 비주기적 대량 Data 전송
    • Isochronous : 일정 주기마다 일정 Data, 소리/화상
  • Bulk 전송 상세
    • 많은 량을 정확히 전송
    • 에러 발생시 재전송
    • 전송량은 보장하지만, 대역폭/지연은 보장하지 않음
    • 단일방향 통신, 양방향 통신시 Bulk Pipe2개 필요

RK3399에 대하여

  • TRM Part2 4.4Register Description을 보면…
    • .. 모르겠다…

생각을 좀 바꾸어서…

  • 생각 해 보면 무턱대고 USB를 연결하고 이미지를 쓰는게 아님
  • PWRKEY를 길게 누르고 RESET을 짧게 누르고.. 해야 하잖아

그럼 버튼을 좀 자세히 볼까

  • KEY1 : ST-1112RA
  • KEY2 : ST-1112RA

KEY1

  • 버튼이 닫히면, RECOVER가 Low였다가, High가 됨 (풀다운)
  • RK3399ADC_IN1이 High가 됨
  • 왜 ADC로 들어오지?

KEY2

  • PCIE_RESE :
  • RESET_L :
  • MCU_EN :
  • PE_RST :
  • OTP_RST :
  • 생각보다 여러개에 관여를 함

SAR ADC는 또 뭐야;;

참고 사이트

  • FierFly RK3399 데이터시트
    • https://www.t-firefly.com/download/Firefly-RK3399/docs/Chip%20Specifications/Rockchip_RK3399_Datasheet_V0.7_20160219.pdf
  • TRM Part1
    • https://dl.vamrs.com/products/rock960/docs/hw/datasheets/Rockchip_RK3399TRM_V1.3_Part1.pdf
  • TRM Part2
    • https://dl.vamrs.com/products/rock960/docs/hw/datasheets/Rockchip_RK3399TRM_V1.3_Part1.pdf