1편에 이어서 Jetson 보드에서 Nvram 과 SPI 통신을 하기위한 예제를 이어서 다룬다.
1편 과정을 진행했을때 Jetson 보드에 해당 Yocto 이미지를 플래시해서 부팅했더니 /dev 경로내에 SPI 관련 장치들이 표시되었다.
NVRAM과 연결된 장치는 spidev2.0 이며, 테스트를 위해 구글링을 통해 spi-tool 소스코드를 얻을 수 있어 해당 코드를 수정후에 사용하였다.
출처 : https://github.com/cpb-/spi-tools/blob/master/src/spi-tools.c
다만, NVRAM 장치의 데이터시트를 정확하기 파악하기 전에 SPI 신호가 정상적으로 나오는지 확인하기 위하여 SPI 신호가 나오는 관련 저항들을 오실로스코프로 측정하여 신호의 발생을 확인해보았다.
위에서부터 SCLK, CS, MOSI, MISO 신호이다.
내가 해당 통신을 할때 사용한 SPI Mode는 0 으로 마스터와 슬레이브 장치 모두 해당 모드를 지원해야만 이용가능한다.
마스터에서 데이터를 슬레이브로 송신할때 보내는 1 Clock 의 신호마다 1bit의 data가 이동된다.
하기 예시 사진을 참조하겠다.
여기까지 확인하여 일단 SPI 명령을 통해 Jestson(Master) 에서 NVRAM(Slave) 로 Spi 신호가 간다는 것을 확인했다.
이제 NVRAM 의 데이터 시트 정독이 필요하다.
데이터의 쓰기/ 읽기 등의 명령어 사용법이라던지 명령의 구성된 바이트 숫자 등을 분석하여 앱을 구성하여야 한다.
다만, 앱을 구성하여 시험을 해보았는데..
분명 신호는 가는데..
읽어오는 데이터는 없었다..
여기서 SPI의 중요한 특징 하나를 더 알 수 있었다.
SPI 통신을 진행하기 위해서 마스터는 먼저 CS로 슬레이브를 활성화 시킨다.
그런다음 마스터는 CLK 으로 동기를 위한 클럭을 출력하는데 이 클럭에 맞추어 MOSI 로 데이터를 한 비트씩 보낸다.
이와 동시에 마스터는 자신이 출력하는 클럭에 맞추어 MISO를 한 비트씩 읽는다.
다시 말해 SPI 는 언제나 양방향 통신을 진행한다.
CLK에 맞추어 MOSI로 데이터를 출력하는 동안 MISO로 는 데이터가 수신된다.
수신되는 데이터는 상황에 따라 의미가 있는 값일 수도 있고 쓰레기 값일 수도 있다.
이러한 특징이 있기때문에 내가 NVRAM에 기록된 데이터를 읽기위해 SPI로 읽기 명령을 송신할 때는 NVRAM에서는 아무 데이터도 송신하지 않았기때문에 값을 읽어오지 못했다.
하지만 읽기 명령 송신 후 쓰레기값을 보내 NVRAM이 받은 명령에 준비한 데이터를 읽어올 수 있었다.
간단하게 아래의 그림으로 살펴보자.
처음 명령을 보낼땐 NVRAM이 보낸 쓰레기값은 의미없는 값이 들어있다.
다만, 내가 명령을 보내고 나서 쓰레기값을 다시한번 보낸다면 명령을 받고 올바른값을 준비한 NVRAM으로부터 "가나다라" 를 읽어올 수 있는 것이다 !
'개발일지' 카테고리의 다른 글
Jetson 에서 Yocto Linux 탑재하기 (0) | 2024.10.24 |
---|---|
Jetson 에서 I2C 통신 하기 (0) | 2024.10.08 |
Jetson과 NVRAM 간의 SPI 통신 [1] (1) | 2024.10.07 |
YOCTO Project 란 ? (4) | 2024.09.26 |
[JAVA] Android BroadcastReceiver (0) | 2022.11.29 |