반도체 소프트웨어

코멘토 실무PT 후기 챌린지_"반도체 SW 엔지니어를 위한 새로운 SoC 위에 리눅스 디바이스 드라이버 포팅하기" 강의 5주 차 후기 본문

교육/코멘토 직무PT

코멘토 실무PT 후기 챌린지_"반도체 SW 엔지니어를 위한 새로운 SoC 위에 리눅스 디바이스 드라이버 포팅하기" 강의 5주 차 후기

반도체 소프트웨어 엔지니어 2024. 2. 15. 00:54

<학습 소감>

5주 차는 SPI 개념 및 디바이스 드라이버 코드를 분석했다. 어렴풋이 알고 있던 SPI 프로토콜을 구체적으로 배울 수 있었고, 해당 개념을 QEMU 에뮬레이터와 디바이스 드라이버를 사용해 주어진 시나리오를 구현해보며 실무적인 레벨에서 학습해볼 수 있었다. 1주 차부터 꾸준히 만들어온 새로운 반도체 SoC가 꽤 많이 완성되어서 하나의 chip으로 보이며, 이렇게 전체 흐름을 경험해볼 수 있어서 정말 좋았다. 추가적으로, 요번에 제시된 과제 내용이 정말 현업적이어서 흥미로웠다.

 

<실습 중>

과제 진행중

 

SPI 개요

<이번 주 수업 내용 리뷰>

[2024/02/07(수) 20:00]

  1. 작주 복습
    • libgpiod를 사용하는 것이 정석적
    • 때로는 sysfs도 사용하기도 함
    • 인덕터: 적분 성질, 더하는 성질(전류 저장)
    • 캐패시터: 전압 저장
    • 트랜지스터 중 효율이 좋은 소자가 FET
  2. SPI
    • 직렬로 연결된 기기들과 통신하는 인터페이스
    • i2c에 비해 spi가 하드웨어적 구현이 간단하여 많이 사용됨
    • soc내부 통신용으로도 사용함
      • AMBA는 MMIO, 인터럽트로 구현함
      • 위가 좀 복잡할 수 있으니 SPI를 사용하여 SOC내 통신하는 경우도있음
    • 엄청 막 프로토콜이 정해진 표준이 아니어서 어떻게 개발하느냐에 따라 속도도 엄청 빨라질수도있음
    • SPI는 M/S둘다 MISO면 MISO에 연결하며 마스터면 INPUT이고 슬레이브면 OUTPUT임
    • 다른 시리얼과 다르게 SPI는 마스터가 SCK핀에 정해주는 속도로 통신함
    • CS(CHIP SELECT): 칩선택 핀
      • CS신호를 받은 슬레이브만 통신 가능. 즉 마스터 CS핀에 의해 선택된 슬레이브만 데이터 교환이 가능한 것
      • 특정 CS칩에 HIGH신호 줘서 통신할 슬레이브를 결정한다고 보면 됨
      • CS는 GPIO로 구현함
    • SOC와 주변기기가 같은 VCC(전압)을 사용해야함
    • 단점
      • 충돌을 해결하기 위한 공식적인 방법이 없음(대체적으로 CS핀으로 처리)
      • 한번에 한 주변장치만 MISO, MOSI를 사용하도록 칩 선택 신호 필요
      • 내부적으로는 CS핀을 FET(스위치)에 연결되어서 동작
      • 그러기에 SLAVE가 너무 많아지면 복잡함

[2024/02/07(수) 21:00]

  1. 마스터 SCK클럭에 따라 MISO/MOSI에 1비트씩 read/write
  2. SD카드도 SPI를 지원하나, 보통 MMC 컨트롤러가 속도가 빠름
  3. SPI 통신은 SPI컨트롤러라는 별도의 하드웨어 사용(amba버스에 붙임, ip의 한종류임) / (클럭 주기로 통신하는 프로토콜 등을 쉽게 사용하기 위한 컨트롤러)
  4. transfer()가 3번 호출하도록 프로토콜 설계
  5. spi는 핀에 동시에 r/w가능하나 요번 시나리오에서는 r과 w가 겹치지 않도록 설계
  6. spidev가 커널의 공식적인 용도는 아니고 디버깅 정도는 권장
  7. 보통 해당 주변장치의 spi 사용 디바이스 드라이버를 사용하는게 일반적

[2024/02/07(수) 22:00]

  1. 리눅스에서는 SPIDEV사용보다는 주변장치를위한 전용 드라이버를 만드는 것을 추천함(general 하기에 좀 안좋음)
  2. 복잡한 SPI툴이 아닌 sysfs로 간편하게 사용
    • 본 강의에서는 기본적인 spi 디바이스 드라이버에 sysfs를 통해 R/W하는 방식으로 코드를 구현했음
    • comento_show_scale(): cat시 사용하는 함수
    • comento_store_zero(): echo > test 즉 write시에 사용하는 함수
  3. i2c, spi는 read용도로 많이 사용하기에 sysfs 적용을 많이 사용함(센서)
  4. ADC
    • 아날로그 신호를 디지털 신호로 변환해주는 하드웨어
    • DAC는 PWM과 DC to DC를 사용하는 하드웨어
    • 음성신호뿐만 아니라 시각 신호 받을떄, 이미징센서에도 사용되는구나
    • 어떤 아날로그형태(전류, 빛, 소리)라도 전압으로 바꿀수있으면 ADC를 사용해서 처리 가능
      • 각 픽셀이 광자를 받아 전압 신호를 생성(ccd)
    • soc는 adc사용해서 배터리 잔량을 체크
    • 명령어 코드 1바이트 송싞 이후, 반환값 2바이트 수신 -> 은 MAX1111의 SPI 드라이버 코드를 오마쥬한것
    • kernel_power_off()등은 tophalf에서 처리못하고 bottomhalf에서 처리되어야한다(인터럽트 등 처리가 있어서)
    • 따라서 워크큐로 처리되도록 소프트웨어를 설계해야함

 

링크: https://bit.ly/3D9XCOz