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

STM32. 버그 해결. SPI 통신. 첫 SPI 송수신 데이터 비트 밀림 . 해결방법.

by 리치굿맨 2020. 1. 19.

개요 

버그 요점 : STM32 를 SPI Master 로 설정하여  SPI Slave 와 통신시 STM32 부팅후 첫 SPI 통신시 비트 밀림 오류 있음.   

 

버그 상황 상세 환경.  

STM32 라이브러리 버전 : STM32Cube FW_L4 V1.14.0 (2020년 1월 18일 최신버전)

STM32 칩 품번 : STM32L4R5VI 

STM32 측 SPI 설정  

  - SPI 1번. (SPI 1번만의 문제가 아니라 다른 SPI 들도 동일할 것임 )

  - SPI Master full duplex. 

  - SPI Clock : 15MHz / 7.5MHz / 이하 낮은 주파수 모두 동일 오류 발생하였음. 

 

STM32 와 통신하는 SPI Slave 측 : nRF52840 

- nRF52840 의 SPI Slave 측의 오류 일 수도 있으나, 섬세한 디버깅 결과 nRF52 문제가 아니라 STM32 측 문제였음.  

 

 

STM32 SPI 통신 버그 증상 요점 

1. STM32 부팅이후 SPI "첫" 통신시점에 수신한 데이터 및 송신한 데이터가 모두 1비트 씩 시프트되는 오류. 2번째 통신 이후 부터 정상. 

 

 

오류 증상 상세 / 해결책. 

- 아래 영상으로 정리.

 

 

 

 

오류상황 요점 : STM32 SPI master 부팅이후 첫 SPI 통신에서는 1비트 시프트 되고 2번째 통신이후부터는 정상 통신.

 

문제해결 조치.

- STM32 SPI Master 통신초기화 시점 아래 처럼 더미 코드 추가해두면 이후는 항상 정상. 통신상대방 있든 없든 무관함. SPI CS Low , High 처리도 없이 함수 HAL_SPI_TransmitReceive 1회 더미 호출해 두는 처리가 전부임.

 

 

/// !!! bug fist spi transfer so just dummy spi transfer go.
uint8_t pui8_tx[1];
uint8_t pui8_rx[1];
HAL_SPI_TransmitReceive(p_hspi_nrf52 , pui8_tx, pui8_rx, 1, 100); //

 

위 증상및 조치는 SPI 1번 에서 확인된 증상과 조치이나, 다른 SPI 번호에서도 위와 동일한 조치 해두는게 안전.

 

 

 

연관

 

 

KEIL MDK-ARM. Debug (printf) Viewer 에서 printf 출력결과 보기.

개요 KEIL MDK-ARM 으로 작성된 펌에어코드상의 printf 구문의 출력값을 KEIL MDK-ARM Debug (prontf) Viewer 창에서 보기 위한 설정법. 설정법 설명 사이트 : http://www.keil.com/support/man/docs/ulink2/ulin..

igotit.tistory.com

 

 

 

 

nRF52. SPI

nRF52 SPI Features SPI 수량 : nRF52840 의 경우 SPI master 로 사용시 4개, spi slave 로 사용시 3개. 최대속도 : 32MHz ( 빠른편 굿). 주의 : 사양에는 32MHz 주장하면서 nRF5 SDK 버전 15.3.0 에서는 SPI Mast..

igotit.tistory.com

 

 


첫 등록 : 2020년 1월 19일 

최종 수정 : 

단축 주소 : https://igotit.tistory.com/2446

 


 

댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT