SPI(Serial Peripheral Interface) 통신은 직렬 주변 기기 인터페이스이다.
마스터와 슬레이브 간의 데이터를 동기식 직렬 방식으로 교환하는 통신프로토콜로써 짧은 거리에서 높은 속도의 통신이 필요할때 주로 사용되며 마이크로컨트롤러, NVRAM, Discrete 칩 등 소형 주변 장치 사이에 데이터를 전송하기위해 많이 사용딘다.
- 다수의 슬레이브 장치 지원 : 여러 슬레이브 장치를 연결할 수 있습니다. 마스터는 각각의 슬레이브를 선택할 때 해당 장치의 SS(CS) 라인을 활성화시켜 통신을 시작합니다. 다만, 다수 통신을 위해서는 그만큼 회로가 구성되어야 한다.
- 전송 방식 : 풀-듀플렉스 통신 방식을 지원합니다. 즉, 데이터가 동시에 양방향으로 전송될 수 있습니다. 마스터가 MOSI 라인을 통해 데이터를 전송하면서, 슬레이브가 MISO 라인을 통해 응답을 보냅니다.
- 동기식 통신 : 클록 신호를 사용해 데이터를 동기화하기 때문에 동기식 통신 방식입니다. 클록 신호를 기준으로 데이터가 전송되므로, 마스터와 슬레이브 간의 통신 속도는 SCLK 주파수에 따라 달라집니다.
- 4개의 신호선 구성 :
- MOSI (Master Out Slave In): 마스터에서 슬레이브로 데이터를 보내는 신호선.
- MISO (Master In Slave Out): 슬레이브에서 마스터로 데이터를 보내는 신호선.
- SCLK (Serial Clock): 마스터에서 생성하는 클록 신호. 이 클록은 데이터 전송을 동기화합니다.
- SS (Slave Select, 또는 CS): 특정 슬레이브를 선택하는 신호. 활성화되면 슬레이브가 통신에 참여하게 됩니다.
내가 사용했던 개발 보드에서는 Jetson-Agx-Xavier-Industrial 보드에 NVRAM 을 연결해서 사용하였다.
한개의 SPI 라인에 하나의 슬레이브 장치로만 구성되어있었다.
기존 Jeston 의 DVKIT 과 동일한 라인으로 SPI를 구성했음에도 불구하고 부팅 후 /dev 경로에서 관련 spi 장치를 찾을 수 없었다..
spi 장치를 정상적으로 Jetson 보드에서 확인하기 위해 하기와 같이 2가지 방법을 진행했다.
- Device Tree 수정
- YOCTO 이미지 빌드 후 하기 경로에서 다음과 같이 수정했다.
- 해당 경로는 사용하는 Jetson 보드에 따라 다를 수 있음 ( poky/build/tmp/work-shared/jetson-agx-xavier-industrial/kernel-source/nvidia/platform/t19x/galen/kernel-dts/common )
- tegra194-p2888-0006-p2822-common.dtsi
spi@3230000 { /*SPI3 NVRAM*/ status = "okay"; //num-cs = <1>; //cs-gpios = <&tegra_main_gpio TEGRA194_MAIN_GPIO(Y, 3) 0>; spi@0 { /* chip select 0 */ compatible = "tegra-spidev"; reg = <0x0>; spi-max-frequency = <50000000>; controller-data { nvidia,enable-hw-based-cs; nvidia,rx-clk-tap-delay = <0x11>; }; }; };
- spidev 드라이버 활성화
- 디바이스 트리상에 장치를 활성화 하였더라도 nvidia 의 spi 드라이버가 작동하지 않으면 관련 장치를 확인할 수 없다. 따라서 Jetson 보드의 Kernel Config에 들어가서 관련 드라이버를 활성화 해주자
- $ bitbake -c menuconfig virtual/kernel
- Yocto 의 빌드 도구 중 bitbake를 이용하여 커널의 Kernel Config 메뉴를 열어서 확인할 수 있다.
- 하기 이미지와 같이 SPI Support 메뉴 하단의 User mode SPI Device support 를 y로 활성화하고 Save 한다.
- Kernel Build
- Device Tree 와 Kernel Config 에서 SPI 관련 부분을 작성 및 수정하였다면 마지막으로 수정분 부분을 적용하여야한다.
- $ bitbake -c compile -f virtual/kernel ( Compile)
- $ bitbake virtual/kernel ( Build)
- 이후에는 이전과 같이 정식 이미지를 만들면된다 $ bitbake core-image-weston
- Device Tree 와 Kernel Config 에서 SPI 관련 부분을 작성 및 수정하였다면 마지막으로 수정분 부분을 적용하여야한다.
'개발일지' 카테고리의 다른 글
Jetson 에서 I2C 통신 하기 (0) | 2024.10.08 |
---|---|
Jetson과 NVRAM 간의 SPI 통신 [2] (0) | 2024.10.07 |
YOCTO Project 란 ? (4) | 2024.09.26 |
[JAVA] Android BroadcastReceiver (0) | 2022.11.29 |
임베디드 S/W 공부 (0) | 2022.11.25 |