- 보드와 보드 사이 근거리에서 사용하는 경우 많음
- 하나의 보드 내에서 A 칩과 B 칩 사이 통신(소자와 소자, 모듈과 모듈간 통신)
- 클럭에 대한 제한이 없어 이론상 무제한 빠르게 통신 가능
- MCU에서 어떤 플래시 메모리에 데이터를 기록하고싶다면 SPI 통신
- A와 B가 선 하나를 가지고 통신할 때 두개가 동시에 전기적 신호를 보낼 수는 없음
- SPI는 기본적으로 2가닥을 기준으로 통신 (데이터 통신)
- 말하는 전용 선, 듣는 전용 선, 클럭선, CS(Chip Select)선
- 클럭의 간격이 SPI 통신에서는 반드시 일정하게 동작하지는 않음
- 전압 한번 올라갔다 내려오면 1
- ex) GPIO 이용해서 3V 전압 조절하며 데이터 전송함
- ex) 1이 여러개 전송될 경우(붙어있는 신호) 1이 몇 개인지 알수 없음. - 구분점으로 사용하기 위한 방법
- Time base
- 시리얼통신 RS485 RS232에서 주로 쓰임
- 서로 약속한 시간 (bps) ex) bps9600 이면 1초를 9600으로 나눔
- 클럭
- 클럭 한 주기를 기준으로 한 주기동안 신호가 어디를 유지하고 있었는지
- 그 주기 때 클럭을 확인했을 때 HIGH이면 1
- 클럭 한 주기를 기준으로 한 주기동안 신호가 어디를 유지하고 있었는지
- Time base
- 데이터를 주고받는 선과 클럭선이 반드시 있어야함
- 전이중 방식, 반이중 방식 모두 사용할 수 있지만 기본은 전이중 방식
- 각각의 선을 사용함. 서로 신호를 내보내더라도 각각의 선을 사용하므로 신호에 문제 발생하지 않음
- 데이터를 주고받을 때 하나의 선을 사용함
- A 가 전압 내보낼 때 B도 신호를 내보낸다면 신호 문제발생
- A전용선을 이용해 B, C, D 에 통신
- A - B
- A - C
- A - D
- 각각 통신할 때 B가 말하는 전용선 따로, C가 말하는 전용선 따로.. 이렇게 따로 둘 경우
- A 입장에서는 데이터 선만 4가닥이 연결되어야하므로, A 말하는 전용선 한개, 여러개가 말하는 전용선을 묶음
- A 가 말하면 B, C, D 가 모두 신호를 받고, 누구에게 통신을 시도한 것인지를 모름
- CS 선을 추가. (Chip Select)
- 평상시에는 전압을 HIGH로 두었다가 B 에게 말하고 싶다면 GPIO선의 전압을 LOW로 낮춤
- 여러개를 LOW로 낮추면 낮춘거 모두 들음
- 누가 누구에게 통신을 시도한 것인지도 모름 (누가 말하는지 모름)
- Master - Slave 관계를 정함.
- Slave는 무조건 통신 듣고 응답 하는 역할
- 누군가 통신을 시도하면 무조건 Master 라고 앎
- SPI 통신과 비슷하긴 하지만 다른점
- 선을 2가닥 사용함 - 데이터 통신선, 클럭선(반이중 방식)
- CS선이 없지만 1대다 통신 가능함
- 소프트웨어 적으로 해결.
- B에게 보내고 싶다면 B를 먼저 외친 후 데이터 전송
- 전기적 신호조차 C, D, E 도 다 듣긴 하지만 내가 아니라면 응답하지 않음
- 패킷에 내 주소 데이터를 포함해서 전송
- MOSI(Master output, Slave input) Master에서 말하는 전용선
- MISO(Master input, Slave output) Master에서 듣는 전용선
- SCK 클럭
- NSS 하드웨어로 CS를 조절
- Full Duplex (전이중) - 3가닥
- Half Duplex (반이중) - 2가닥
- Receive Only (수신 전용) - 2가닥
- Transmit Only (송신 전용) - 2가닥
- 개발 시 Master로 지정할 지 Slave로 지정할 지에 따라 Mode 설정
- CS를 어떻게 컨트롤할 것인지
- 내가 통신할 것이 하나일 경우에만 사용 가능하므로 기본적으로 Disable 인 경우가 많음
- DataSize : 한 번 전송할 때 몇 비트씩 보낼 것인지
- 맨 첫번째 먼저 보내면 MSB, 맨 뒤 부터 먼저 보내면 LSB -> 데이터 시트 확인 후 설정
- 칩의 SPI 통신이 최대 몇 MBit/s 까지 가능한지 확인 후 설정 - 빠르면 빠를수록 좋긴 하다..
- Clock Polarity : CLK가 평상시에 HIGH인지 LOW인지를 확인
- Clock Phase : 1 Edge, 2 Edge 어느 시점에 데이터를 어떻게 볼지
- 1Edge: 0인지 1인지 구분이 안갈 때 클럭이 내려가는 시점의 값으로 결정
- 2Edge: 0인지 1인지 구분이 안갈 때 클럭이 올라가는 시점의 값으로 결정
'IoT|Embedded > [STM32] 고추건조기 개발기' 카테고리의 다른 글
온도센서 사용을 위한 One-Wire 통신 (0) | 2024.10.25 |
---|---|
다시 입문부터 시작 (1) | 2024.09.04 |