본문 바로가기
임베디드.일렉트로닉스/STM32

STM32. L4x6 SPI 개요.

by i.got.it 2016. 3. 23.

 

개요.

 
STM32L4x6 계열 MCU SPI 주요특징.

STM32L4x6 의 SPI Block Diagram.

- FIFO 내장 : RxFIFO, TxFIFO 각각 32비트(4바이트) 용량. DMA 가능.

- data size : 4bit ~ 16bit 선택가능.

- SPI Motorola 모드(통상사용하는것), TI 모드 선택 가능.
- Hardware CRC 선택가능 ; Tx mode에서 마지막 바이트에 CRC값 기록, 수신시 자동 CRC체크 가능.
- 그외 일반 SPI 특성과 동일.

 from : pdf. STM32L4x6 Reference Manual  페이지 1283 부터.
 


 

 

상세 - SPI 데이터 송수신

 
 RxFIFO, TxFIFO
 1. 모든 SPI data 는 내장된 FIFO 를 경유 하게 되어있다.
 2. 레지스터 SPIx_DR 읽기 하면 RxFIFO 에 저장된 값을 반환해준다.
 3. 레지스터 SPIx_DR 쓰기 하면 TxFIFO 에 값을 기록한다. 

 읽기.
 1. RxFIFO 에 데이터 저장 수량이 지정된 수량(FRXTH bit 로 정의되는)에 도달하면 RXNE 이벤트 발생.
 2. RXNE (의미 : RxFiFO not empty) 가 클리어되면 RxFIFO가 비어있는 것으로 간주됨.
 3. RXNE이벤트는 폴링 혹은 인터럽트로 상태 확인 가능.
 4. 폴링이나 인터럽트외에 DMA기반 데이터 수신처리 가능.

 쓰기.
 1. TxFIFO 데이터 저장수량이 용량의 절반이하인 경우 TXE이벤트 발생함.
 2. TXE (의미 : TXFIFO empty) 가 클리어되지 않는다면, TxFIFO 에 데이터가 다 채워진 것으로 간주됨.
 3. TXE 이벤트 는 폴링 혹은 인터럽트로 상태 확인가능.
 4. 폴링이나 인터럽트외에 DMA기반 데이터 송신처리 가능.


 Data packing(데이터 탑재)
 spi data frame size 가 1바이트 이내인 경우,  
 SPIx_DR 에 16비트 read, write 하면 자동으로 data packing 이뤄진다. 즉, SPIx_DR dp 16비트 쓰기하면 2바이트 중 하위 1바이트 먼저 FIFO 에 배치되고 그다음 상위 1바이트 배치한다(아래 오른쪽 그림). SPI MOSI 로는 2개 바이트가 연속전송된다. 이를 수신한 측에서 RxFIFO  threshold가 16bits(FRXTH = 0) 으로 설정되어있다면 RXNE 이벤트에 대응하여 레지스터 SPIx_DR 에 1회 16bit 읽기하면 수신받은 2바이트를 확보할 수 있다.
 전송해야할 전체 바이트수가 홀수개인 경우 마지막 1바이트 처리 : 송신측에서는 마지막 1바이트 송신시 SPIx_DR에 8bit접근하여 기록하는것으로 충분하나, 수신측에서는 RXNE 이벤트가 발생될 수 있도록 RxFIFO threshold 를 변경해야 한다.
  


 SPI Interrupts.

 SPI통신 중 아래와 같은 인터럽트 발생가능하먀 각각은 개별적으로 활성, 비활성 가능하다. 
 


 

 


 


///724.


댓글



 

비트코인




암호화폐       외환/나스닥/골드         암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)         프랍 트레이더 온라인 지원가능. MT4,MT5