SPI loopback тест не работает при физическом соединении MISO и MOSI, работает при выставлении бита LBM. Очевидно, что проблема в настройках портов?

Решил тестировать SPI без использования осциллографа, так как постоянного доступа к нему нет. При последней проверке осциллографом, SPI на соответствующих выходах обнаружен не был.

При выставлении битика LBM- SPI при таких же настройках работает. Получает тоже, что и пересылает. Понятно, что это не имеет отношения к портам, соединение на уровне кристалла. Отсюда - логичное предположение. Хотя, настройки портов достаточно простые, непонятно где может быть косяк. Либо все не так просто и нужно что-то дополнительно делать при физическом соединении.

Из оборудования у меня отладка: https://ldm-systems.ru/product/19013

установленная на базовую: https://ldm-systems.ru/product/20001

Схема - https://ldm-systems.ru/f/doc/catalog/LDM-HELPER-K1986BE4-FULL/Sch_LDM-HELPER-K1986BE4.pdf.

SPI пытаюсь выводить на контакты X1:56 - X1:58. Замкнули 57 и 58.

Есть какие-нибудь идеи и предположения?

Код:

void spi_init(void)
{
    UART_send_string("SSP init start\r\n");

    RST_CLK_PCLKcmd((RST_CLK_PCLK_RST_CLK | RST_CLK_PCLK_SSP1 | RST_CLK_PCLK_PORTA), ENABLE);

    PORT_DeInit(MDR_PORTA);

    PORT_InitStructure.PORT_FUNC  = PORT_FUNC_MAIN;
    PORT_InitStructure.PORT_Pin   = (PORT_Pin_13 | PORT_Pin_15);
    PORT_InitStructure.PORT_OE    = PORT_OE_OUT;
    PORT_Init(MDR_PORTA, &PORT_InitStructure);

    PORT_InitStructure.PORT_Pin   = PORT_Pin_14;
    PORT_InitStructure.PORT_OE    = PORT_OE_IN;
    PORT_Init(MDR_PORTA, &PORT_InitStructure);

    SSP_DeInit(MDR_SSP1);

    SSP_BRGInit(MDR_SSP1, SSP_HCLKdiv8);

    SSP_StructInit(&sSSP);

    sSSP.SSP_SCR  = 0x10;                                          //15…8 SCR SSPx->CR0   32
    sSSP.SSP_CPSDVSR = 2;                                          //SSPx->CPSR = 10; 7…0 CPSDVSR (2 .. 254)
    sSSP.SSP_Mode = SSP_ModeMaster;                                //SSPCR1 SSPx->CR1
    sSSP.SSP_WordLength = SSP_WordLength16b;                       //SSPCR0 SSPx->CR0    15
    sSSP.SSP_SPH = SSP_SPH_1Edge;                                  //SSPCR0 SSPx->CR0
    sSSP.SSP_SPO = SSP_SPO_Low;                                    //SSPCR0 SSPx->CR0
    sSSP.SSP_FRF = SSP_FRF_SPI_Motorola;                           //SSPCR0 SSPx->CR0 = 00010000 00001111

//    sSSP.SSP_HardwareFlowControl = SSP_HardwareFlowControl_LBM;

    SSP_Init(MDR_SSP1, &sSSP);
    SSP_Cmd(MDR_SSP1, ENABLE);

    UART_send_string("SSP init finish  \r\n\n");

    UART_send_port_settings();

    int i = 0;
    while(i <= 20) {
        UART_send_string_("SENT: %d\r\n", i);
        SSP_SendData(MDR_SSP1, i++);
        delay_short(Del_5_us);
        uint16_t res = SSP_ReceiveData(MDR_SSP1);
        UART_send_string_("RCVD: %d\r\n\n", res);
    }
}

void SSP_SendData(MDR_SSP_TypeDef* SSPx, uint16_t Data)
{
  /* Check the parameters */
  assert_param(IS_SSP_ALL_PERIPH(SSPx));

  /* Transmit Data */
  SSPx->DR = Data;

}

uint16_t SSP_ReceiveData(MDR_SSP_TypeDef* SSPx)
{
  /* Check the parameters */
  assert_param(IS_SSP_ALL_PERIPH(SSPx));

  /* Receive Data */
  return ((uint16_t)(SSPx->DR));
}

Вывод в терминал:

SSP init start

SSP init finish

PORT REGISTERS:

MDR_PORTA->OE:

Hex: 0xA000

Bin: 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

MDR_PORTA->FUNC:

Hex: 0x54000000

Bin: 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

SENT: 0
RCVD: 65535

SENT: 1
RCVD: 65535

SENT: 2
RCVD: 65535
.................
SENT: 19
RCVD: 65535

SENT: 20
RCVD: 65535

Ответы (0 шт):