Raspberry Pi 5 (RP1 칩) 전용 PIO 기반 QSPI 통신 구현
- 50MHz 정확한 클럭 생성
- 50% 듀티비 보장
- clock_pio 레퍼런스 완성
- 프로젝트 구조 복사
- 기본 클럭 테스트
- 데이터 라인 PIO 프로그램
- CS 제어 구현
- W6300 QSPI 프로토콜 분석
- 읽기/쓰기 명령 구현
- 레지스터 접근 테스트
| 신호 | GPIO | 설명 |
|---|---|---|
| CLK | 6 | 50MHz 클럭 |
| DQ0 | 7 | 데이터 0 |
| DQ1 | 8 | 데이터 1 |
| DQ2 | 9 | 데이터 2 |
| DQ3 | 10 | 데이터 3 |
| CS | 11 | Chip Select |
# 프로젝트 빌드 (CMake 사용)
make
# 또는 수동 빌드
mkdir build
cd build
cmake ..
make# cnt_pio 예제 실행 (안정적)
sudo ./cnt_pio
# qspi_test 예제 실행 (개발 중)
sudo ./qspi_test
# gpio_test 예제 실행
sudo ./gpio_test
# 클럭 테스트 (10초)
make run
# W5500 테스트 (예정)
make run-w5500- 기능: GPIO 13-15에 3비트 카운터 출력 (7→6→...→0 반복)
- PIO 프로그램: FIFO 기반으로 데이터 입력받아 감소시키면서 출력
- 사용법: 로직 애널라이저로 GPIO 13-15 확인, 0.1초마다 카운터 반복
- 코드:
src/cnt_pio.c– PIO 명령어 직접 구현
- 기능: QSPI Quad 모드 데이터 전송 테스트
- PIO 프로그램:
wizchip_qspi_pio.pio기반, GPIO 0-3에 4비트 출력 - 사용법: GPIO 0-3, CS(4), CLK(5) 확인
- 코드:
src/qspi_test.c– PIO 어셈블리어 레벨 사용
- 클럭 생성: clock_pio 레퍼런스 기반으로 완성
- 프로젝트 구조: Makefile, CMake 빌드 시스템 준비
- 안정적 예제: cnt_pio – PIO 기본 동작 확인 가능
- 다음 단계: 데이터 전송 PIO 프로그램 구현
- 기반 프로젝트:
/clock_pio(절대 수정 금지) - PIOLib 의존성:
../utils/piolib
- QSPI 통신 파형 TEST
- QSPI 를 위한 (PIO 코드 -> HEX코드) 검증
- Datesheet
- Raspberry Pi 5 signal
-SIPR 레지스터에 IP 주소를 작성( IP = 12.48.12.48)
-SIPR 레지스터에 작성된 IP를 읽기( IP = 12.48.12.48)
IoLibrary에서 사용되는 close() 함수와 동일한 이름을 가진 함수를 리눅스 표준 헤더인 unistd.h에서도 정의해두었고, 중복정의 에러발생 IoLibrary에 전처리기를 이용하여 close() 함수의 이름을 wiz_close()로 변경.
git clone을한다음 patch를 적용할 수 있도록 파일을 만들어두었음.
#define close wiz_close
22Mhz 까지 정상동작하는것을 확인하였음
git clone --recursive https://github.com/seok930927/RPI5_PIO_TEST_example.git
cd RPI5_PIO_TEST_example/
sudo ./patch.sh
cmake . && make
sudo ./qspi_test
- 최적화 진행.
- TOE performance 측정
- Linux QSPI(using PIO) 드라이버 작성
- Linux W6300 드라이버 작성