개요
버그 요점 : 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 번호에서도 위와 동일한 조치 해두는게 안전.
연관
첫 등록 : 2020년 1월 19일
최종 수정 :
단축 주소 : https://igotit.tistory.com/2446
'임베디드.일렉트로닉스 > STM32' 카테고리의 다른 글
STM32CubeMX. SPI (0) | 2020.01.20 |
---|---|
STM32. GPIO IDR 레지스터 값 읽기 주의사항 (0) | 2020.01.19 |
GCC 컴파일러 optimization 위험성. 예 : SW4STM32 에서 optimization 에 따라 float 변수 바이트 단위 접근시. (0) | 2020.01.13 |
STM32. 힙 , 스택 사이즈 설정 . KEIL. SW4STM32. CubeMX (0) | 2019.12.29 |
STM32. EXTI (Extented Interrupts and events controller) (0) | 2019.12.22 |
댓글