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
- 실무PT후기
- 코멘토실무PT
- Arm 아키텍처: 메모리 모델과 배리어
- Kernel
- arm
- 빌드 시스템
- 코멘토
- udemy
- BSP
- Arm 아키텍처: 캐시
- 시스템 소프트웨어 개발을 위한 ARM 아키텍처의 구조와 원리
- ARM 아키텍처: 메모리모델과 배리어
- 인프런
- yocto
- ARM 아키텍쳐: 메모리 모델과 배리어
Archives
- Today
- Total
반도체 소프트웨어
코멘토 실무PT 후기 챌린지_"반도체 SW 엔지니어를 위한 새로운 SoC 위에 리눅스 디바이스 드라이버 포팅하기" 강의 6주 차 후기 본문
교육/코멘토 직무PT
코멘토 실무PT 후기 챌린지_"반도체 SW 엔지니어를 위한 새로운 SoC 위에 리눅스 디바이스 드라이버 포팅하기" 강의 6주 차 후기
반도체 소프트웨어 엔지니어 2024. 2. 15. 01:09<학습 소감>
요번 주는 마지막 수업이며 I2C에 대한 내용을 진행했다. I2C는 SPI, GPIO와 함께 임베디드 프로토콜에서 많이 사용되는 대표적인 통신 방법이다. SPI와 I2C의 차이점을 집중적으로 배울 수 있었다. 슬레이브 주소, 레지스터 주소, 데이터 등 I2C를 사용하기 위한 구체적인 프로토콜을 공부해서 좋았고 RTC, 밝기 측정, 무게 센서, 광센서, 가속도, 자이로 등 센서에 대해서 종합적으로 이해할 수 있어서 좋았다. 6주 동안 어디에서도 들을 수 없는 시스템 반도체 sw 강의를 들어서 정말 많은 도움이 되었고, 운좋게 좋은 기업에 취업하게 되어서 기쁘다. 더 고급 내용으로 구성된 강의가 개설되기를 희망한다.
<실습 중>
<이번 주 수업 내용 리뷰>
[2024/02/14(수) 20:00]
- 작주 복습
- spi는 속도가 상대적으로 10Mbps로 상대적으로 빠르며, 하드웨어적 구현이 간단해 많이 쓰임
- 입력을 받는것 동시에 출력을 처리할 수 있음(MOSI, MISO 핀이 모두 있기에) 그러나 보통은 따로 처리함
- 마스터에서 CS핀은 GPIO를 활용해서 사용
- MISO: SDO
- MOSI: SDA
- SPI는 MMC 카드, 통신 모듈, 디스플레이 등에서 많이 사용(속도가 빠르기에)
- SPI사용시에는 디바이스 트리에 CS 핀 몇개 사용하고 어떤 GPIO 핀 사용할지 설정해줘야함
- SSI_COMENTO_TRANSFER() 함수로 입력과 출력을 한번에 처리하도록 QEMU 에뮬레이션하고 있음
- SPIDEV 툴은 리눅스에서 디버깅용도로만 사용하기를 권장
- SPI 드라이버는 드라이버를 직접 소스 코드 작성하는것이 좋음
- module_spi_driver(): module_init() 같은 함수
- probe: spi장치 detect되었을때 동작
- spi_sync(): spi 데이터 송수신 함수
- 꼭 디바이스 노드를 만들 필요는 없음. 단순한 경우는 sysfs사용하는 것도 편리함
- sysfs 사용하는 방식은 간단해서 좋음 (/sys/bus/spi/devices 참고)
- ADC: 아날로그 -> 디지털 신호로 변환
- 어떤 종류의 아날로그 신호도 전압 신호로 바꿀 수 있다면 ADC로 사용 가능
- 해상도를 높이기 위해서는 비교기가 많아아함 ex) 0~32bit 해상도이면 비교기는 32개가 있어야함
- 그래서 대신 DAC를 사용하기도함
- 디바이스 트리에 있는거가 부팅될때 다 실행되는 거구나 실제로 봤네
- TIMER 오류 해결 방법
- 타이머가 초기화되어있으면 더 이상 초기하지 말아라
- 디바이스 트리에 같은 SPI 디바이스 사용하지 않도록 설정
- 구조체 내에 선언
- I2C
- 이정도 soc다룬거면 많이 다뤄본거임. 네트워크 정도 더 다루는게 심화임(wifi, can, ethernet 등)
- soc 2개를 연결하기 위한 인터페이스
- soc와 주변기기 또는 soc끼리 연결하기 위한 인터페이스
- spi와 달리 슬레이브 개수가 늘어도 칩선택 선을 추가하지 않아도 됨 (칩선택을 하지 않아도 되어서, 2개선만 필요하며, 회로 개발 입장에서 편함)
- spi에 비해 복잡한 프로토콜이 필요하므로 하드웨어 구현이 복잡하다
- 장치주소(7bit), 레지스터 주소(8bit), 입렉데이터(8bit), 출력데이터(8bit)
- 한마디로 버스 타입이네. 장치 주소로 주변기기 구분
- SDA(데이터) / SCL(클럭)
- 2개 신호선에 반드시 풀업 저항 연결 필요
- ACK비트를 통해 데이터 정상 확인 가능
- 장치주소로 디바이스를 구분하고, 레지스터 주소로 해당 디바이스의 특정 번지의 메모리를 R/W하는 것
- 쓰기라면, 마스터 -> 슬레이브 SDA 1bit 전송(ACK는 슬레이브가 전송)
- 읽기라면, 슬레이브 -> 마스터 SDA 1bit 전송(ACK는 마스터가 전송)
- 저전력시스템에서는 슬레이브가 꺼지기도 함. 그래서 통신 끝 프로토콜도 중요함
- 드라이버에서는 주소, 데이터 등 을 송수신하도록 개발하면 됨. i2c프로토콜은 하드웨어 개발자가 만드는 것!!
- 간단한 데이터를 저장하기 위한 주변장치: EEPROM
[2024/02/14(수) 21:00]
- i2c 컨트롤러가 따로 존재(복잡한 프로토콜을 처리해야하기때문)
- i2c는 슬레이브가 먼저 데이터를 보낼일이 없기에 디바이스 트리에 i2c에서 사용할 인터럽트를 설정할 일이 없음
- I2C_CHARDEV는 리눅스에서 지원하기에 실제 릴리즈버전에서 사용해도 됨(당연히 드라이버로 구현해도 됨)
- 시나리오: eeprom같은 장치 만들기
- 하드웨어 구현시에 SPI와 다르게 I2C는 TX, RX 각 함수를 구현해야함
- SDA선이 1개여서 동시에 입출력을 송수신하지 못함
- I2C시작되면 i2c_comento_event()가 불림. 그래서 cycle을 초기화
- 디바이스 주소 처리까지는 컨트롤러가 해주고 qemu에서는 레지스터 주고 받는 부분부터 처리 시작
- i2cset [컨트롤러 주소] [장치주소] [레지스터 주소] [데이터]
- i2c_CHARDEV 설정 넣고 명령어 사용해서 처리하기에 사용자 프로그램이나 디바이스 드라이버 거의안만들음
[2024/02/14(수) 22:00]
- 임베디드 시스템 기본 형태: 센서(눈귀) <-> 제어기 <-> 액츄에이터
- 시스템 엔지니어: 시스템 소프트웨어(운영체제 등)
- 센서 종류
- RTC라는 정밀한 시간쟤는 I2C TIMER 장치도 센서로 있다
- 밝기 측정 센서 (현업에서는 피드백 신호로 센서상황 변화를 감지해서 처리하는 것도 있음)
- 써미스터: 저항값에 따라 온도가 바뀌는 특성을 활용
- 커널에서는 FPU가 없어서 소수점 계산을 못함
- adc로 센서값을 읽은뒤, 각 저항값에 해당하는 온도의 테이블을 미리 만들어서 놓고 변환하도록 디바이스 드라이버에서 보통 개발함
- 이런 온도센서 값 계산하는 전자공학 배우고 싶네
- 무게센서: 무게에 따라 발생하는 저항의 변화를 측정
- 광센서: 빛 받으면 저항작아지고 빛 없으면 저항 커짐
- 리모컨 활용
- 엔코더(마우스 휠)
- 가속도 센서: x,y,z축으로 측정되는 중력가속도로 움직임의 변화를 측정
- 기울기 정도 측정
- 세그웨이
- 자이로 센서: 물체의 회전 속도를 측정하여 물체의 현재 상태 측정(드론에 많이 활용됨)
- 반도체 분야 분류
- 메모리
- 시스템 soc(CPU, GPU 만드는 것)
- 전력 반도체 ex) 레귤레이터, FET 등 (전기자동차 - 동부하이텍)
- MEMS(센서는 이걸로 개발 - 삼성전기)
- 액츄에이터 종류
- dc모터: 일반 모터
- ac모터: 선풍기