Буфер приема SPI всегда возвращает 0xFF - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь связать SST26 с Pic32MX470F с помощью SPI драйверов Microchip Harmonyv 2.02b. Я могу правильно писать / читать в соответствии с тем, что вижу на своем логическом анализаторе, поскольку строки MISO и MOSI показывают мне правильные данные.

Проблема, с которой я сталкиваюсь, заключается в том, что в моем буфере RX я не получаю правильные данные и вижу только 0xFF в них.

В дополнение к функциям чтения / записи. Я также делаю глобальную разблокировку, блокировку стирания и записи, прежде чем что-либо писать. Я также проверяю, чтобы линия SDI была настроена как вход для конфигурации выводов гармонии. Мой вывод SDI подключен к выводу 45 (RPD11 / PMCS1 / RD11) на рис32.

Ниже моя реализация.

void Flash1_TestWrite()

{ 
    uint32_t num_of_bytes, loop, dataCount;

    flashData.TXbuffer[0] = 0x02; // Write Flash Page1 address 0x0000
    flashData.TXbuffer[1] = 0x00;
    flashData.TXbuffer[2] = 0x00; 
    flashData.TXbuffer[3] = 0x00;

    dataCount = 4;

    for(loop =0; loop < 20; loop ++)
    {
        flashData.TXbuffer[dataCount++] = 0xAA;
    }

    num_of_bytes = dataCount; //opcode + address + data

    Flash1_WREN(); / /Enable Write

    nFlashCS1Off();
    Flash1_Write_Buffer_Handle = DRV_SPI_BufferAddWrite(SPIHandle,(SPI_DATA_TYPE *) &flashData.TXbuffer[0], num_of_bytes, 0, 0);
   if (DRV_SPI_BUFFER_EVENT_COMPLETE & DRV_SPI_BufferStatus(Flash1_Write_Buffer_Handle)) 
   {
      nFlashCS1On();
   }
}



voidFlash1_Read( void )
{
    switch(flashData.state)
    {
        uint32_t num_of_bytes, loop, dataCount;

        case FLASH1_INIT:
        { 
             nFlashCS1On();
             flashData.state = FLASH1_SEND_READ_CMD;
            break;
        }
        case FLASH1_SEND_READ_CMD:
        { 
            flashData.TXbuffer[0] = 0x03; // Read Page 
            flashData.TXbuffer[1] = 0x00; 
            flashData.TXbuffer[2] = 0x00; // Address - MSB 
            flashData.TXbuffer[3] = 0x00; // Address - LSB 

            dataCount = 4;

            for(loop =0; loop < 20; loop ++)
            {
                flashData.TXbuffer[dataCount++] = 0xFF; // dummy bytes
            }

            num_of_bytes = dataCount;
            nFlashCS1Off();

            Flash1_Write_Buffer_Handle = DRV_SPI_BufferAddWrite(SPIHandle, (SPI_DATA_TYPE *) &flashData.TXbuffer[0], num_of_bytes, 0, 0);

            flashData.state = FLASH1_WAIT_FOR_REPLY;
            break;
        }

        case FLASH1_WAIT_FOR_REPLY: 
        {
            if(DRV_SPI_BUFFER_EVENT_COMPLETE &
                               DRV_SPI_BufferStatus(Flash1_Write_Buffer_Handle))
            flashData.state = FLASH1_GET_DATA;
            break;
        }

      case FLASH1_GET_DATA: 
        {
            Flash1_Read_Buffer_Handle = DRV_SPI_BufferAddRead( SPIHandle, (SPI_DATA_TYPE *) &flashData.RXbuffer[0], 24, 0, 0);
           flashData.state = FLASH1_WAIT_FOR_DATA;
           break; 
        }

      case FLASH1_WAIT_FOR_DATA: 
        { 
            if(DRV_SPI_BUFFER_EVENT_COMPLETE &
                               DRV_SPI_BufferStatus (Flash1_Read_Buffer_Handle))
            {
                nFlashCS1On(); // Assert CS line
                flashData.state = FLASH1_READ_COMPLETE;
            }
           break;
        }

      case FLASH1_READ_COMPLETE:
      {
        break; 
      }

      default:
        break;
    }
    return false;
}

Может кто-нибудь подсказать, как мне получить правильные данные в моем буфере rx?

1 Ответ

0 голосов
/ 30 апреля 2019

Atlast решил проблему, оказалось, что порт SDI на двух разных PIC32 был неисправен. Третий, который мы получили сегодня, сработал.

Напоминание другим: если ваш выход и последующий вход через MOSI и MISO выглядят хорошо, ваши часы выглядят правильно, ваши контакты установлены нормально, но вы не получаете данные, возможно, у вас просто неисправное входное соединение на вашем чипе .

Конфигурирование вывода SDI как открытого стока из гармонии микрочипа, а также объявление буфера как связного было полезным по крайней мере в нашей конфигурации.

...