본문 바로가기

전체 글1092

8051 메모리 구조 1. 8051이란?일반적으로 8051이라고 부르는 것은 1980년 인텔이 발표한 8비트 마이크로컨트롤러 8051 하나만을 뜻하는 것이 아니라, 이후 등장한 8031, 8032, 8052, 8751, 8752, 89C51, 89C52, 80C31, 80C32 등 동일한 명령어 집합(ISA)을 기반으로 하는 8051 프로세서 계열 전체를 통칭하는 표현이다. 그리고 인텔이 8051 시장에서 철수하고 원천 특허가 만료된 이후에는 STC, Silicon Labs, Nuvoton, Infineon, Megawin 같은 여러 반도체 업체가 표준 8051 아키텍처에 고속 클록, 확장 메모리, I2C / SPI / USB 같은 현대적인 인터페이스를 얹은 호환 칩을 자체적으로 찍어내고 있다. 따라서 오늘날 8051라는 용.. 2026. 7. 30.
기계식 릴레이의 구조 (Latching vs Non-Latching) 기계식 릴레이(Electromechanical Relay)의 구조 1. 구성요소전자석 (Electromagnet):전류가 흐를 때만 자석의 성질을 띠는 자석으로 철심에 코일을 감아놓은 형태다. 제어 회로(Coil Terminals에 연결)로부터 전류가 흐르면 자성을 띄고, 전류가 끊기면 자성을 잃는다.가동 철편 (Moveable armature):전자석 위에서 위아래로 움직일 수 있도록 배치된 금속 판이다. 전자석이 자성을 띠면 아래로 끌려 내려가고, 자성이 없어지면 다시 위로 올라간다.스프링 (Spring):전자석에 전류가 끊겼을 때, 가동 철편을 원래 위치(위쪽)로 되돌려주는 역할을 한다.접점 (Relay contacts):실제 부하 회로(Common Terminal과 Normally Open Te.. 2026. 7. 26.
8051 MCU의 1T, 6T, 12T의 의미 8051 MCU 데이터시트 첫장에 가장 먼저 등장하는 1T, 6T, 12T라는 표현의 의미에 대해 알아보자. 8051에서 T(T-state)는 클럭(Clock Cycle)을 의미한다. 8051은 여러 개의 T-state를 묶어 CPU가 명령어를 실행하기 위한 최소 시간 단위인 Machine Cycle(머신 사이클)을 구성하는데, 이 머신 사이클을 구성하는 클럭 수가 몇 개냐에 따라 12T, 6T, 1T CPU가 구분된다. 12T Core : Machine Cycle = 12 Clock6T Core : Machine Cycle = 6 Clock1T Core : Machine Cycle = 1 Clock 오리지널 8051의 12T 구조 오리지널 8051은 12T 구조를 사용했다. 오실레이터 클럭을.. 2026. 7. 23.
PADS Viewer 유용한 단축키 일반 단축키Ctrl + Alt + C : Display Colors Setup, 각 레이어와 부품, 배선의 색상을 지정하고 화면에 노출할 항목을 켜고 끄는(Visibility) 설정ESC : 선택 상태 해제Ctrl + B : 보드 외곽선 전체를 화면에 꽉 차게 표시7 : Ctrl + B와 동일, 보드 전체를 화면에 꽉 차게 표시8, 2, 4, 6 : 상/하/좌/우 화면 이동 방향키9 : 커서 위치에서 줌인3 : 커서 위치에서 줌아웃 Modelss CommandModeless Command는 화면에 아무것도 안 누른 상태에서 커맨드를 입력하고 엔터를 치는 방식을 말함s + : 객체 검색 기능와일드 카드 * 사용 가능s + 로 핀 위치 검색 가능사용 예시 : svcc_3v3, si2c_*, smcu... 2026. 7. 19.
Megawin ICP Programmer Megawin ICP Programmer는 Megawin 8051 계열 MCU의 플래시 메모리에 펌웨어를 다운로드 할 수 있도록 지원하는 프로그래밍 툴이다. USB를 통해 PC와 연결되며, 전용 소프트웨어와 함께 사용한다. 이 툴은 ISP(In-System Programming)와 ICP(In-Circuit Programming) 두 가지 방식을 모두 지원하는데, 모든 Megawin 8051 MCU 제품이 두 방식을 다 쓸 수 있는 것은 아니고, 제품군에 따라 ISP만 지원하는 모델과 ISP 및 ICP를 모두 지원하는 모델이 구분되어 있다. ISP와 ICP의 차이 항목ISP (In-System Programming)ICP ( In-Circuit Programming)인터페이스3선 (GND/VCC/D.. 2026. 7. 18.
시정수(Time Constant, τ) 시정수(Time Constant, τ)시정수(Time Constant, τ)는 회로가 입력 변화에 얼마나 빠르게 반응하는지를 나타내는 값으로, RC 회로에서는 커패시터 양단에 걸리는 전압이 최종값의 63.2%에 도달하는 데 걸리는 시간(단위: s)을 의미한다.시정수가 작을수록 회로는 빠르게 반응하고, 시정수가 클수록 천천히 반응한다. RC 회로의 시정수RC 회로는 저항(R)과 커패시터(C)로 구성된 회로로, 시정수는 다음과 같이 계산한다. R : 저항(Ω)C : 커패시터(F)τ : 시정수(s)시정수 τ가 경과하면충전 시 과도 전압 : 최종 전압의 약 63.2% 도달방전 시 과도 전압 : 초기 전압의 약 36.8% 유지 RL 회로의 시정수RL 회로는 저항(R)과 인덕터(L)로 구성된 회로로, 시정수.. 2026. 7. 15.
NCP303L 데이터시트 분석 NCP303L 이 칩은 onsemi에서 개발한 전원 감시용 Voltage Detector IC로, 외부 커패시터를 통한 Programmable time delay를 지원한다. 초저전력 칩으로 배터리 지속시간을 늘리면서도, 시스템 전압을 모니터링하다가 임계치 이하로 떨어지면 리셋 신호를 발생시켜 MCU나 프로세서를 안정적으로 초기화하는 역할에 쓰인다. 특징감시 전압(Threshold) 범위 : 모델별로 0.9V에서 4.9V까지의 고정 임계값 옵션 제공초저전류 소모 : Typical 0.5 µAThreshold 전압 정확도 : ±2.0%Hysteresis 지원 : 전압 노이즈로 인한 리셋 오동작을 방지하기 위한 히스테리시스 회로 내장동작 전압 범위 : 0.8V ~ 10V의 넓은 작동 영역동작 온도 범위.. 2026. 7. 11.
커스텀 UART 출력 함수도 printf처럼 컴파일러 경고 받기 펌웨어 개발을 하다 보면 디버깅이나 로그 출력을 위해 가변 인자를 받는 커스텀 출력 함수를 직접 만들어 쓰곤 한다. 여기에 치명적일 수 있는 문제가 하나 있다.. 먼저 C 표준인 printf 함수를 쓰면 컴파일러가 전달된 포맷 문자열(Format string)과 입력된 인자(Argument)의 개수 및 자료형이 일치하는지를 확인하고, 그렇지 않으면 경고를 표시해서 개발자의 실수를 예방해준다. 반면 내가 직접 만든 함수는 컴파일러가 해당 검사를 수행하지 않기 때문에, 전달한 변수 타입과 % 서식지정자가 맞지 않거나 인자 개수가 안 맞는 경우, 엉뚱한 값이 출력될 수 있고 최악의 경우 잘못된 메모리에 접근해서 Hardfault가 발생할 수 있다. 문제 상황 예시.uint32_t internal_temp = .. 2026. 7. 8.
터미널 특수 키의 이스케이프 시퀀스 (+ 테라텀의 Backspace/Delete 키 설정) 먼저 키보드의 Tab, Enter, Backspace, Space 같은 키들은 ASCII 코드표에 이미 정의된 단일 바이트 값이 있다. KeyHexASCII 문자Tab0x09TABEnter0x0D 또는 0x0ACR 또는 LFBackspace0x08 또는 0x7FBS 또는 DELESC0x1BESCSpace0x20SP 반면 방향키, Delete, Home, End 같은 키들은 ASCII 코드표에 자리가 없다. 이런 키들을 표현하기 위해 터미널은 멀티바이트의 이스케이프 시퀀스를 사용한다. 터미널 특수 키 이스케이프 시퀀스 표모든 이스케이프 시퀀스는 첫 번째 바이트가 0x1B (ESC 문자의 ASCII 코드)로 시작하며, 테라텀 등 터미널에서 다음 키를 누르면 아래 바이트 시퀀스가 연달아 전송된다. Ke.. 2026. 7. 4.
STM32 VS Code Extension 개발환경 구축 STM32CubeIDE for Visual Studio Code 3.9.0 버전 기준 참고로 이전 버전에서는 STM32CubeCLT를 별도 설치해줘야 했지만, 3.9.0 버전에서는 STM32 프로젝트 빌드/다운로드/디버깅에 필요한 명령줄 도구를 번들로 같이 설치하므로 STM32CubeCLT를 따로 설치할 필요가 없다. 1. STM32CubeMX 설치 (최소 6.11.0 이상 버전)STM32CubeMX는 핀 설정, 클럭 설정 등을 하고 CMake 기반의 프로젝트 코드를 생성해 주는 역할을한다. 2. VSCode에서 STM32 확장 프로그램 설치 먼저 확장프로그램을 설치하기 전에 STM32 개발용 프로파일을 새로 만들어두는게 낫다. VSCode New Window 열때마다 STM32 확장프로그램.. 2026. 7. 1.
전기차 관리 방법 1. 평소 배터리 잔량을 20% ~ 80% 사이로 유지리튬 이온 배터리는 충전량이 80%를 넘거나 20% 미만인 상태, 즉 셀 전압이 너무 높거나 낮은 상태로 오래 방치되면 배터리 셀 내부에 가해지는 물리적, 화학적 스트레스가 커져 수명이 단축될 수 있다. 따라서 평상시 충전 상태를 20% ~ 80% 구간으로 유지하는 것이 좋다. 20%까지 떨어질 때까지 기다렸다가 충전하기보다는, 해당 구간에서 일정량 남아 있을 때 80%까지 자주 충전해주면 된다. 2. 한 달에 한 번은 완속으로 100% 충전한 달에 한 번 정도 잔량이 20% 수준일 때 완속으로 100%까지 채워주는 것이 배터리 셀 밸런싱에 좋다. 7kW 수준의 낮은 전류로 천천히 충전하면, BMS가 먼저 100%에 도달한 셀은 대기 상태로 두고.. 2026. 6. 28.
VSCode ] 인코딩 변경 VSCode의 기본 인코딩은 UTF-8이며, 개별 파일의 인코딩을 변경하여 저장하거나 새로 열려면 우측 하단의 Select Encoding 버튼을 눌러서 수행할 수 있다. 전체 파일의 인코딩 기본값을 변경하려는 경우 단축키 Ctrl + , 를 눌러 설정을 연다. 검색창에 encoding을 입력한다. Files: Encoding 항목에서 원하는 인코딩 방식(UTF-8, EUC-KR 등)을 선택한다. 2026. 6. 28.
Windows/Linux ] 파일의 무결성 검사 도구 해시 알고리즘해시 알고리즘은 임의의 크기를 가진 데이터를 고정된 크기의 고유한 값(해시값)으로 변환하는 일방향 함수다. 입력값이 1비트만 달라져도 완전히 다른 결과를 반환하기 때문에 무결성 검증과 보안(암호화)에 필수적인 요소로 사용된다. 흔히 무결성 검사 기법으로 함께 언급되는 체크섬과 CRC가 네트워크 상의 전송 오류를 걸러내기 위해 설계되었다면, 해시는 연산 속도는 느리지만 악의적인 위변조와 해킹 시도로부터 데이터를 안전하게 보호하기 위해 존재한다. 핵심 특징고정된 출력 길이 : 입력 데이터의 크기와 상관없이 항상 일정한 길이의 해시코드를 출력한다. MD5는 16진수 32자리(128비), SHA256은 16진수 64자리(256비트)를 가진다.일방향성(One-way): 해시값으로 원본 데이터를 복구할.. 2026. 6. 27.
Ubuntu에서 Google Chrome 설치하기 Ubuntu 배포판에는 Firefox가 기본 웹 브라우저로 제공된다. 하지만 Firefox는 snap 패키지 형태로 탑재되어 있어서 사용하기엔 좀 불편한 요소가 있다. ✓ snap이란? snap은 우분투 개발사인 캐노니컬(Canonical)이 만든 리눅스 패키징 시스템이다. 애플리케이션과 실행에 필요한 모든 라이브러리, 의존성 파일을 하나의 패키지로 묶어 의존성 충돌 없이 설치할 수 있다는 장점이 있다. 하지만 Sandbox라고 불리는 독립된 가상 환경에 애플리케이션을 격리하여 실행하는 방식이라 처음 앱을 시작할 때 구동 시간이 오래 걸리고, 실행 중 반응속도도 느리며, 종료 후에도 잠시 백그라운드에서 자원을 정리하는 작업이 남는다. 오픈소스 브라우저인 Chromium도 apt 명령어로 간단하게 설치할 .. 2026. 6. 24.
Linux PCIe Driver 학습 프로젝트 다음은 QEMU 가상환경에서 커스텀 PCI 장치를 직접 만들고, 그 장치를 제어하는 리눅스 커널 드라이버와 유저 애플리케이션을 작성하는 학습 프로젝트이다. https://github.com/joeteo/pci-vip GitHub - joeteo/pci-vipContribute to joeteo/pci-vip development by creating an account on GitHub.github.com 2026.01.18 - [임베디드 개발/임베디드 리눅스] - Linux 호스트에서 QEMU 빌드 Linux 호스트에서 QEMU 빌드대부분 리눅스 배포판 저장소에는 이미 QEMU 바이너리 패키지를 제공하기 때문에 sudo apt install qemu-system-arm 등으로 간단히 설치할 수 있.. 2026. 6. 21.
LDD ] PCIe 디바이스 드라이버와 유저앱 작성하기 - DMA & MSI 이번엔 지난 글에서 다룬 PCI 장치를 제어하기 위한 드라이버와 유저 앱을 작성해 보겠다. 편의상 MMIO + INTx 방식의 장치를 v1, DMA + MSI 방식의 장치를 v2로 구분한다. 드라이버와 유저 앱을 설계할 때 고려한 것은 크게 두 가지다. 1. zero-copy* 구현2. 유저 앱까지 이어지는 파이프라이닝 구조 ✓ Zero-copy란? 데이터를 주고받을 때, CPU가 개입해서 복사하는 횟수를 0회로 만든다는 뜻이다. 먼저 1번. 지난번에 작성한 v1은 zero-copy가 아니었다. 드라이버 단에서 mmap을 사용해 커널과 유저 스페이스 사이의 메모리 복사(copy_to_user, copy_from_user)는 없앴지만, mmap한 대상이 시스템 RAM이 아닌 장치의 BAR 공간으로, 애플.. 2026. 6. 21.
TMS320F28388D] Q. M0, M1 외에 다른 공간을 스택으로 써도 되는가? 관련글 :https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1228631/tms320f280039c-can-stack-be-placed-outside-m0-m1 예제 프로젝트의 링커 커맨드 파일(.cmd)을 보면 기본적으로는 M0, M1 RAM을 스택 공간으로 지정하고 있는데, 이는 Mx RAM이 CPU와 Tightly coupled된 메모리라서 성능과 속도 면에서 최적이기 때문일 것이다. 하지만 하드웨어 제약 조건을 충족하기만 하면 다른 RAM 영역도 스택으로 사용할 수 있다. 먼저 스택 영역을 옮길 때 고려해야할 점은 C28x CPU의 스택 포인터(S.. 2026. 6. 20.
PER (Price Earning Ratio, 주가수익비율) PER (Price Earning Ratio, 주가수익비율) PER(주가수익비율)은 현재 주가를 주당순이익(EPS, Earnings Per Share)으로 나눈 값으로, 기업의 현재 주가가 1년치 순이익 대비 몇 배로 거래되고 있는지를 나타내는 평가 지표다. 계산공식은 다음과 같다.PER = 주가 ÷ 주당순이익(EPS)주당순이익(EPS) = 당기순이익 ÷ 총 발행 주식 수혹은 다음과 같이 계산할 수도 있다.PER = 시가총액 ÷ 당기순이익 PER이 낮으면 기업의 이익 대비 주가가 저렴하여 상대적으로 주식이 저평가되었음을 의미하고, PER이 높으면 주당순이익에 비해 주가가 비싸지만 시장에서 해당 기업의 미래 성장 잠재력을 높게 평가하고 있음을 의미하기도 한다. 참고로 PER은 업종과 기업의 성격에 .. 2026. 6. 15.
QEMU 기반 커스텀 PCIe 장치 에뮬레이션 - (4) DMA + MSI 이전 글에서 작성한 커스텀 PCIe 장치의 기본 구조와 기능은 유지한채로, 데이터 전송 방식과 인터럽트 방식을 변경하였다.데이터 전송 : 장치의 RAM을 BAR1 영역에 할당하던 방식에서 DMA(Direct Memory Access) 전송 방식으로 변경인터럽트 : 레거시 INTx 방식에서 MSI(Message Signaled Interrupt) 방식으로 변경 PCI DMA의 이해PCI DMA는 CPU의 개입 없이 하드웨어가 시스템 메모리에 직접 접근한다는 점에서 일반적인 생각하는 DMA와 동일하지만, DMA 엔진의 위치와 작동 방식에서 차이가 있다. 보통 임베디드 환경에서 말하는 DMA는 SoC/MCU 내부에 DMA 컨트롤러가 존재한다. 그래서 CPU가 초기 설정만 해두면 이후에는 DMA 컨트롤러.. 2026. 6. 14.
1553B (MIL-STD-1553) 개요MIL-STD-1553은 군용 항공기 내부의 전자 장비 간 통신을 위해 설계된 차동 직렬 데이터 버스 프로토콜이다.1970년대 항공기 내 다양한 서브시스템 간 통신 방식을 표준화하고, 체계 수준에서 데이터 흐름을 예측 가능하게 관리하기 위해 도입되었다.초기 버전인 MIL-STD-1553A가 발간된 이후, 개정된 MIL-STD-1553B가 현재까지 사용되는 표준으로 자리 잡았기 때문에, 통상적으로 짧게 1553B라고도 부른다. 이중화 (Redundancy)1553B는 단일 버스의 고장이 발생하더라도 통신의 연속성과 데이터의 무결성을 확보하기 위해 이중화 구조를 채택하고 있다.Primary Bus (Bus A)Backup Bus (Bus B)두 버스는 전기적으로 완전히 독립되어 있으며, 동일한 네트.. 2026. 6. 7.
TL16C752C, Dual UART (16550 호환 칩) 일단 이 칩은 16550 아키텍처를 기반으로 64-Byte FIFO를 탑재한 Dual UART 컨트롤러 칩이다. 16550이 무엇인가?1980년대 시절 PC의 Serial Port 구현을 위한 외장 UART 컨트롤러로 널리 쓰이던 칩이 National Semiconductor사에서 출시한 8250, 16450, 16550 시리즈였다. 8250, 16450 계열은 데이터 레지스터를 제외한 송수신 버퍼가 따로 없어서 인터럽트 부담이 컸고, 16550에서 16-Byte FIFO가 최초 도입되면서 실사용성이 크게 좋아졌다. 이후 여러 제조사에서 "16550 compatible"을 표방하는 호환 칩이 대량으로 나오며 레지스터 구조가 사실상 표준처럼 굳었다. 현재에도 16550 IP가 널리 쓰이고 있고, 리눅스 .. 2026. 5. 31.
Git ] fatal: detected dubious ownership in repository at '경로' 이 에러는 여러 사람이 함께 사용하는 컴퓨터 환경에서 발생할 수 있는 보안 문제를 막기 위해, Git에 새롭게 추가된 검사 로직 때문에 생긴 것이다.예를 들어, 해커가 공용 폴더나 상위 디렉토리에 몰래 .git 폴더를 만들고 config 파일에 악성 코드를 심어두면, 이후 해당 폴더나 하위 폴더에서 git status 같은 명령어만 실행해도 내 권한으로 악성 코드가 실행될 위험이 있다. 이를 막기 위해 Git은 현재 명령어를 실행하는 로그인한 사용자와 해당 디렉토리의 소유자(Owner) 가 다를 경우 의도적으로 이 에러를 발생시켜 실행을 차단한다. 해결 방법은 다음과 같다. 해결 방법 1. 특정 폴더만 예외 등록하기이 폴더는 신뢰할 수 있는 폴더이니 검사하지 말라고 예외 설정하는 방법이다. git c.. 2026. 5. 27.
UART 흐름제어 (RTS/CTS, DTR/DSR, XON/XOFF) UART 컨트롤러는 자체적으로 흐름 제어(Flow Control) 신호를 처리할 수 있는 기능을 포함하고 있다. 여기서 흐름제어란 데이터가 수신 측의 처리 속도보다 너무 빠르게 들어와서 버퍼 오버플로우가 발생하는 걸 막는 매커니즘을 말한다. 1. 과거의 UART 흐름제어과거 RS-232 통신 규격이 정립되던 시기에는 DTE 장치(PC)가 DCE 장치(모뎀)에 연결되는 것이 기본이었다. 데이터 송수신 자체는 DTE, DCE 모두 할 수 있지만 데이터 전송을 시작하고 종료하는 쪽은 DTE 였으며, 이러한 역할 구분에 따라 TXD, RXD를 포함한 각 신호 핀의 용도가 정의되었다. DTE (Data Terminal Equipment) : 단말기, 컴퓨터DCE (Data Circuit-terminating .. 2026. 5. 24.
인터넷 안되는 폐쇄망 PC에서 Local LLM으로 클로드 코드 무료로 쓰기 (Gemma4 + Ollama) 얼마 전 구글이 Gemma 4를 공개하면서 꽤 화제가 됐다. 그리고 유튜브에서 "Gemma 4를 활용해 로컬에서 무료로 AI 돌리는 법"에 대한 영상이 쏟아져 나왔는데 대부분은 인터넷이 되는 환경에서 손쉽게 설치한 뒤 퍼포먼스를 테스트하는 내용이었다. 나는 업무 특성상 인터넷이 차단된 환경에서 작업할 일이 많기 때문에, 폐쇄망 PC에서도 Local LLM으로 코딩 어시스턴트를 쓸 수 있다면 상당히 유용하겠다 싶었고, 직접 시도해본 뒤 그 과정을 정리한다. Gemma 4는 왜 화제가 됐나?첫 번째는 오픈소스 라이선스다. Gemma 4는 Apache 2.0 라이선스로 공개됐는데, 소스코드 공개 의무가 없고 상업적 사용이 자유로우며 2차 가공 후 라이선스 변경이나 특허 출원도 가능하다는 점 때문에 개발자들.. 2026. 5. 17.
클로드 코드 (Unable to connect to API) - USB 이더넷 어댑터 연결 시 통신 오류 Wi-Fi로 클로드 코드를 사용하던 중 PC에 특정 USB 이더넷 어댑터를 꽂는 순간 API 연결이 끊기는 일이 있었다. 당시 브라우저로 claude.ai에 접속하면 채팅기능은 멀쩡히 쓸 수 있는데 클로드 코드 사용 시에만 네트워크 오류가 발생하는 것이다. 원인을 확인해보니 라우팅 테이블 문제였다. 원인Windows에서 네트워크 어댑터가 여러 개 연결되면 각 어댑터에 default route(0.0.0.0/0)가 생길 수 있다. 이 경우 메트릭이 낮은 쪽이 우선으로 트래픽을 처리하는데, '자동메트릭'으로 설정되어 있으면 어댑터의 Link speed(대역폭)을 기준으로 메트릭이 설정되기 때문에 Wi-Fi보다 유선 연결이 더 낮은 메트릭 값을 할당받는 경우가 많다. 즉, USB 이더넷 어댑터 쪽의 메트릭이.. 2026. 5. 16.
리셋 신호가 Low Active인 이유 리셋 신호가 99% 이상 Low Active로 설계되는 이유는? 회로 안정성과 구현의 용이성, 그리고 역사적인 배경 때문이다. 구체적으로 다음과 같다. 1. 전원 인가 시의 안정성회로에 처음 전원이 공급될 때, 전압이 0V에서 목표 전압까지 올라가는 불안정한 구간에서는 신호가 자연스럽에 'Low' 상태에 머문다. 이 때 리셋 신호가 Low Active이면 칩은 전압이 완전히 안정될 때까지 안전하게 리셋 상태를 유지할 수 있다. 반면 칩이 High에서 리셋상태가 되고 Low에서 리셋이 해제된다면, 전원이 불안정한 초기 단계에서 리셋이 제대로 걸리지 않아 칩이 오작동할 위험이 있다. 2. 노이즈 내성디지털 회로에서 일반적으로 GND(0V)는 회로의 기준 전위로 사용되며, High 레벨보다 전기적으로 더 .. 2026. 5. 14.
PCA9555, I2C 16-bit I/O Expander PCA9555는 I2C 인터페이스를 지원하는 16채널 I/O Expander이다. 이전에 올린 TCA9538(PCA953x 계열)칩과 기본 구조와 제어 방식이 상당히 유사한데, 가장 큰 차이는 I/O 포트 수가 두 배인 16bit(2 x 8bit)로 확장된 것이다. 2025.03.03 - [임베디드 개발/임베디드 리눅스] - TCA9538 데이터시트 및 리눅스 드라이버 분석 (Tested on Raspberry Pi 4) 지난번에 올린 TCA9538 칩과의 차이와 해당 글에서 언급하지 않았던 주요 특징을 중심으로 정리해 본다. 1. 공급 전압공급 전압은 2.3V ~ 5.5V이다. 2. 3개의 하드웨어 주소 핀 제공 A0, A1, A2의 3개의 하드웨어 주소 핀이 있어 최대 8개의 디바이스를.. 2026. 5. 10.
LDD ] PCIe 디바이스 드라이버 작성하기 - Char with ioctl & mmap (2/2) 테스트파일 준비테스트용 이미지 파일은 GPT한테 컬러풀한 코딩하는 펭귄 이미지 그려달라고 해서 준비했다. RAW 파일 생성과 뷰어로는 ffmpeg를 사용한다. # ffmpeg 설치$ sudo apt update && sudo apt install ffmpeg# PNG to RGB24 RAW 변환$ ffmpeg -i -f rawvideo -pix_fmt rgb24 # PNG to BGR24 RAW 변환$ ffmpeg -i -f rawvideo -pix_fmt bgr24 RAW 변환 시 출력 로그로 파일 사이즈가 나오는데 이부분도 잘 기억해둔다. 나의 경우 1024x1536 이었다. QEMU 호스트와 게스트 간 파일 공유 설정이제 호스트에서 개발한 드라이버와 앱을 게스트로 옮겨야 하고, 테스트.. 2026. 5. 3.
LDD ] PCIe 디바이스 드라이버 작성하기 - Char with ioctl & mmap (1/2) 이전 글에서 작성한 가상의 커스텀 PCI 장치를 다룰 디바이스 드라이버를 작성해본다. 설계 요건은 이렇다.캐릭터 디바이스(Character Device) 드라이버 형태로 구현한다.여러 장치를 동시에 지원할 수 있어야한다.제어 명령은 ioctl로, 대용량 이미지 데이터는 mmap으로 주고받는다.장치의 처리 완료 신호는 PCI 레거시 INTx 방식 인터럽트로 받아서 유저 스페이스 통지하는 식으로 구성한다.개발 환경가상화 환경 : QEMU호스트 : x86_64 Ubuntu 22.04게스트 : ARMv7 32-bit BusyBox 기반 최소 Linux 실행 환경에뮬레이션 보드 : virt-11.0with 커스텀 가상 PCI 장치 (Virtual Image Processor) 우선 구현에 필요한 개념에 대해 하.. 2026. 4. 26.
QEMU 기반 커스텀 PCIe 장치 에뮬레이션 - (3) 커스텀 PCI 장치 설계QEMU에서 커스텀 디바이스를 에뮬레이션하려면 QOM(QEMU Object Model) 프레임워크에 맞춰 소스코드를 작성해야 한다. 처음부터 모든 구조를 직접 구현할 필요는 없고, qemu/hw/misc 안에 다양한 예제들이 있기 때문에 이를 참고해 수정해 나가면 된다.공부 목적이라면 교육용 예제 장치인 edu가 기본 제공되어 그대로 써도 되긴 하지만, 이 장치는 단순히 팩토리얼 연산 기능만 있고 레지스터 구조가 단순해서 드라이버를 작성하는 재미가 없을 것 같았다. 이러한 이유로 보다 그럴듯한 PCI(e) 리눅스 드라이버를 개발해보기 위해 커스텀 PCI 장치 설계부터 시작하기로 한다. 장치 이름은 Virtual Image Processor라는 뜻으로 pci-vip로 정했다. 동작 .. 2026. 4. 19.
반응형