Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 빌드 시스템
- Arm 아키텍처: 메모리 모델과 배리어
- udemy
- 코멘토
- 시스템 소프트웨어 개발을 위한 ARM 아키텍처의 구조와 원리
- BSP
- 실무PT후기
- yocto
- Arm 아키텍처: 캐시
- 코멘토실무PT
- ARM 아키텍처: 메모리모델과 배리어
- Kernel
- ARM 아키텍쳐: 메모리 모델과 배리어
- 인프런
- arm
Archives
- Today
- Total
반도체 소프트웨어
코멘토 실무PT 후기 챌린지_"반도체 SW 엔지니어를 위한 새로운 SoC 위에 리눅스 디바이스 드라이버 포팅하기" 강의 5주 차 후기 본문
교육/코멘토 직무PT
코멘토 실무PT 후기 챌린지_"반도체 SW 엔지니어를 위한 새로운 SoC 위에 리눅스 디바이스 드라이버 포팅하기" 강의 5주 차 후기
반도체 소프트웨어 엔지니어 2024. 2. 15. 00:54<학습 소감>
5주 차는 SPI 개념 및 디바이스 드라이버 코드를 분석했다. 어렴풋이 알고 있던 SPI 프로토콜을 구체적으로 배울 수 있었고, 해당 개념을 QEMU 에뮬레이터와 디바이스 드라이버를 사용해 주어진 시나리오를 구현해보며 실무적인 레벨에서 학습해볼 수 있었다. 1주 차부터 꾸준히 만들어온 새로운 반도체 SoC가 꽤 많이 완성되어서 하나의 chip으로 보이며, 이렇게 전체 흐름을 경험해볼 수 있어서 정말 좋았다. 추가적으로, 요번에 제시된 과제 내용이 정말 현업적이어서 흥미로웠다.
<실습 중>
<이번 주 수업 내용 리뷰>
[2024/02/07(수) 20:00]
- 작주 복습
- libgpiod를 사용하는 것이 정석적
- 때로는 sysfs도 사용하기도 함
- 인덕터: 적분 성질, 더하는 성질(전류 저장)
- 캐패시터: 전압 저장
- 트랜지스터 중 효율이 좋은 소자가 FET
- 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]
- 마스터 SCK클럭에 따라 MISO/MOSI에 1비트씩 read/write
- SD카드도 SPI를 지원하나, 보통 MMC 컨트롤러가 속도가 빠름
- SPI 통신은 SPI컨트롤러라는 별도의 하드웨어 사용(amba버스에 붙임, ip의 한종류임) / (클럭 주기로 통신하는 프로토콜 등을 쉽게 사용하기 위한 컨트롤러)
- transfer()가 3번 호출하도록 프로토콜 설계
- spi는 핀에 동시에 r/w가능하나 요번 시나리오에서는 r과 w가 겹치지 않도록 설계
- spidev가 커널의 공식적인 용도는 아니고 디버깅 정도는 권장
- 보통 해당 주변장치의 spi 사용 디바이스 드라이버를 사용하는게 일반적
[2024/02/07(수) 22:00]
- 리눅스에서는 SPIDEV사용보다는 주변장치를위한 전용 드라이버를 만드는 것을 추천함(general 하기에 좀 안좋음)
- 복잡한 SPI툴이 아닌 sysfs로 간편하게 사용
- 본 강의에서는 기본적인 spi 디바이스 드라이버에 sysfs를 통해 R/W하는 방식으로 코드를 구현했음
- comento_show_scale(): cat시 사용하는 함수
- comento_store_zero(): echo > test 즉 write시에 사용하는 함수
- i2c, spi는 read용도로 많이 사용하기에 sysfs 적용을 많이 사용함(센서)
- ADC
- 아날로그 신호를 디지털 신호로 변환해주는 하드웨어
- DAC는 PWM과 DC to DC를 사용하는 하드웨어
- 음성신호뿐만 아니라 시각 신호 받을떄, 이미징센서에도 사용되는구나
- 어떤 아날로그형태(전류, 빛, 소리)라도 전압으로 바꿀수있으면 ADC를 사용해서 처리 가능
- 각 픽셀이 광자를 받아 전압 신호를 생성(ccd)
- soc는 adc사용해서 배터리 잔량을 체크
- 명령어 코드 1바이트 송싞 이후, 반환값 2바이트 수신 -> 은 MAX1111의 SPI 드라이버 코드를 오마쥬한것
- kernel_power_off()등은 tophalf에서 처리못하고 bottomhalf에서 처리되어야한다(인터럽트 등 처리가 있어서)
- 따라서 워크큐로 처리되도록 소프트웨어를 설계해야함