W7500p ssp 사용과 관련하여

WiZwiki W7500P보드로 개발중입니다.

현재 SSP가 SPI와 다르게 되어 있어 개발에 어려움을 느끼고 있습니다. 일단 현재 상태는 보드의 SSP0를 slave 로 세팅합니다.

SSP_StructInit(&SSP_InitStructure);
SSP_InitStructure.SSP_Mode = SSP_Mode_Slave; // SSP0 = Slave
SSP_InitStructure.SSP_DataSize = SSP_DataSize_16b;
SSP_Init(SSP0,&SSP_InitStructure);

이후에 slave로 동작시킨 후 무한루프에 아래 task를 넣었습니다. 이후에 SPI로 6바이트 데이터를 보내면 첫번째 데이터만 받아들이고 두번째 데이터부터는 제대로 받아주지 못하고 있습니다. 이건 8bit모드로 하면 첫번째 바이트만 받아들입니다. 즉 16비트로 하면 16비트 첫번째만 8비트로 하면 8bit첫번째만 받아줍니다.

세팅에 문제가 있으면 알려주시기 바랍니다.

void SSP_Task( void )
{
uint16_t ch;
int i=0;

if (SSP_GetFlagStatus (SSP0, SSP_FLAG_RNE)==RESET)
    return;

for(i=0; i<6;i++)
{
    while(SSP_GetFlagStatus (SSP0, SSP_FLAG_RNE)==RESET);
    
    ch = SSP_ReceiveData (SSP0);
    printf("%x ", ch);

    while (SSP_GetFlagStatus (SSP1, SSP_FLAG_TNF) == RESET);
    SSP_SendData(SSP0, ch);
}

}

인터럽트 방식으로 해도 초기에 인터럽트가 발생한 후 바로 데이터를 읽어도 첫번째 바이트만 읽혀집니다.

그리고 PA11-PA14를 SSP1으로 사용하려면 어떻게 세팅해야 하나요?

안녕하세요 :slight_smile:

SSP와 SPI는 이름만 다르지 기존의 SPI 사용방식과 똑같습니다.

제가 보기에는 SSP0가 slave로 SSP1은 master로 셋팅이 되어있고 Slave와 master에 해당하는 핀이 물리적으로 서로 연결되어있다면 정상 동작해야 할 것처럼 보입니다. 하드웨어 구성이 정확히 어떻게 되는지 알아야 할 것 같습니다.

핀을 nomal Funtion이 아닌 다른 Funtion으로 사용하고 싶으시면

W7500x_gpio.c를 프로젝트에 포함시켜 주시고 아래와 같은 코드로 Function을 변경해주시면 됩니다.
PAD_AFConfig(PAD_PA, GPIO_Pin_11, PAD_AF2); // PAD Config – PA_11 used 3nd Function
PAD_AFConfig(PAD_PA, GPIO_Pin_12, PAD_AF2); // PAD Config – PA_12 used 3nd Function
PAD_AFConfig(PAD_PA, GPIO_Pin_13, PAD_AF2); // PAD Config – PA_13 used 3nd Function
PAD_AFConfig(PAD_PA, GPIO_Pin_14, PAD_AF2); // PAD Config – PA_14 used 3nd Function

감사합니다.

일단 표준 SPI통신은 동작하는 것 확인했습니다. 하지만 동시에 여러바이트를 송수신하는 경우가 안되는 것 같습니다.
물론 SPI가 아직 표준이 애매해서 이런 경우에 어떻게 동작시키는지 분명하지 않은데 만일 6바이트를 동시에 주고 받으려면 소프트웨어 SPI밖에 가능하지 않은가요? SSL을 내리고 한꺼번에 6개의 바이트를 송수신하고 이후에 SSL을 올리는 식으로 말입니다.
이런 경우에 DMA를 사용해야 하는가요? 아직 DMA부분은 개발이 안되었다고 하는데 언제정도 가능할까요?