반응형

SPI는 디폴트로 활성화가 안되어 있기 때문에 raspi-config 명령을 이용하여 활성화 시켜주는 작업이 필요합니다.

1
pi@raspberrypi:~ $ sudo raspi-config
cs

"7 Adavnced Options"를 선택합니다.


"A6 SPI"를 선택합니다.


Yes를 선택합니다. 잠시후 SPI가 활성화 되었다는 메시지가 보입니다.


Finish를 선택하여 설정 프로그램에서 빠져나옵니다.


태스트에 사용할 spidev_test.c 파일을 다운로드 받습니다.

1
pi@raspberrypi:~ $ wget https://raw.githubusercontent.com/opennetworklinux/linux-3.8.13/master/Documentation/spi/spidev_test.c
cs

편집기로 열어서 1.1을 지우고 

1
static const char *device = "/dev/spidev1.1";
cs

0.0으로 다시 적습니다.
1
static const char *device = "/dev/spidev0.0";
cs

컴파일 후, 실행시켜보면 00만 출력됩니다.spi에 연결된 디바이스가 없기 때문입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
pi@raspberrypi:~ $ gcc spidev_test.c 
pi@raspberrypi:~ $ ./a.out 
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)
 
00 00 00 00 00 00 
00 00 00 00 00 00 
00 00 00 00 00 00 
00 00 00 00 00 00 
00 00 00 00 00 00 
00 00 00 00 00 00 
00 00 
cs

  

SPI 출력을 SPI 입력으로 연결하기 위해 19번핀과 21번핀을 연결해줍니다.


spi 출력으로 보내졌던 데이터를 spi입력에서 받아서 아래처럼 값을 출력해줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
pi@raspberrypi:~ $ ./a.out 
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)
 
FF FF FF FF FF FF 
40 00 00 00 00 95 
FF FF FF FF FF FF 
FF FF FF FF FF FF 
FF FF FF FF FF FF 
DE AD BE EF BA AD 
F0 0D 
cs

위에서 출력된 값은 spidev_test.c 를 열어보면 출력을 위해 배열에 저장했던 값임을 알 수 있습니다.


반응형

'Raspberry Pi > SPI' 카테고리의 다른 글

Raspberry Pi 2/3에서 SPI 사용하기  (7) 2016.11.29

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요.

  1. oldboy94 2016.09.01 22:44

    취미로 라즈베리파이 하는데 정말정말정말 큰도움이 되었습니다ㅎㅎㅎㅎ
    근데 파이3에서 SPI 사용하는 방법은 위와 같은건가요???

  2. 재훈아빠 2017.08.16 14:02

    글 읽다가 여기까지 왔습니다.
    아직은 잘 모르겠지만 자주 문턱이 닳도록 다녀야겠습니다 감사합니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2017.08.16 14:08 신고

      네 자주 와주세요~ 라즈비안 최근버전에서 설정 방법이나 설치할 패키지가 좀 차이있을 수 있습니다. 문제 생기면 알려주세요

  3. 이민태 2017.10.10 11:12

    라즈베리파이로 SPI 통신을 사용하는 비접촉식 온도센서 값을 읽어보려고 시도하는 중입니다.

    제공되는 예제 코드가 아두이노의 스케치용 코드 뿐이라 직접 라즈베리파이용 코드를 작성해야 하는데

    다음 부분

    int SEND_COMMAND(unsigned char cCMD) // 온도 READ 함수
    {
    digitalWrite(chipSelectPin , LOW); // CS Low Level
    delayMicroseconds(10); // delay(10us)
    SPI.transfer(cCMD); // Send 1st Byte
    delayMicroseconds(10); // delay(10us)
    T_low_byte = SPI.transfer(0x22); // Send 2nd Byte
    delayMicroseconds(10); //delay(10us)
    T_high_byte = SPI.transfer(0x22); // Send 3rd Byte
    digitalWrite(chipSelectPin , HIGH); // CS High Level

    return (T_high_byte<<8 | T_low_byte); // 상위, 하위 바이트 연산
    }

    은 라즈베리파이 코드에서 어떻게 작성되어야 할지 조언을 얻을 수 있을까요?

  4. Sem 2020.02.11 23:09

    편집기를 연다고 설명하신 부분이 있는데 명령 코딩을
    어떻게 해야할까요?

+ Recent posts