TPM 모듈과 ST MICRO 간 SPI 통신 방법이 궁금합니다.
두서없이 바로 본문으로 넘어가 질문하는 점 죄송합니다 ㅠ
ST MICRO(master) 에서 보내는 데이터는
char a[] = "011111110001101000011000001000001234567890123456789012345678901";
이며,
HAL 함수는
uint8_t b[64] = { 0x00 };
if (HALSPITransmitReceive(&hspi2, a, b, 64, 10) == HALOK) {
HAL_Delay(1000);
printf("\n--------------------1-----------------\n");
for (int i = 0; i < 64; i++) {
printf(" %02x", a[i]);
}
HAL_Delay(1000);
printf("\n--------------------1-----------------end\n");
for (int i = 0; i < 64; i++) {
printf(" %02x", b[i]);
}
}
로 작성하여 TPM(Slave) 으로 송신하는 데이터와 수신되는 데이터를 터미널로 찍어보고 있습니다.
송신 데이터는 잘 가는거 같은데
결과값이 쓰레기값 또는 0 또는 255로 채워져서 수신되고 있습니다.
TPM 에서 spi 프로토콜을 지원한다고 하고 있으나, 단순한 샘플 예시조차 없어서 어떻게 접근해야되는지를 모르겠습니다.
안녕하세요.
우선 보내는 data를 uint8_t로 바꾸어 보시구요, 아래와 같이 코드를 바꾸어 보시기 바랍니다.
if (HALSPITransmitReceive(&hspi2, a, b, 64, 100) == HALOK) { HAL_Delay(1000);과 같이 delay를 늘려 보시기 바랍니다.
그리고 일부의 경우 처음에 dummy가 넘어오는 경우가 있으니 임의로 1바이트를 보내서 응답을 한번 받아보시고, 그 다음에 제대로 데이터가 오는지 확인해 보시기 바립니다.
SPI와 물린 디바이스가 DMA모드가 아닌지 혹은 논블락모드가 아닌지도 확인해 보세요. SPI device는 64비트를 명령어로 받아서 64비트의 결과를 되돌려 주는 device인지요? 원하시는 본래의 값이 어떤 값인지도 궁금합니다.
감사합니다.
안녕하세요.
HAL_SPI_TransmitReceive();를 나누어서 해보심이 어떨지요?
if(HAL_SPI_TransmitReceive()==HAL_OK)
{}
하시고 spi rx callback함수에서 출력문 사용해서 확인해 봤으면 하네요. 저는 1바이트인가 2바이트 cmd를 슬레이브에 주면 6바이트 수신되도록 위의 형태로 구성했던 기억이 있네요.
휴대폰이라 충분한 표현이 안돼서 답답하지만 웹에서 spi rx callback 예제보시면 이해될 듯 합니다.
충분한 설명을 못드려서 죄송합니다.