gpt4 book ai didi

c - 我的 SPI 接收缓冲区始终返回 0xFF

转载 作者:行者123 更新时间:2023-11-30 16:18:37 25 4
gpt4 key购买 nike

我正在尝试使用 Microchip Harmonyv 2.02b SPI 驱动程序将 SST26 与 Pic32MX470F 连接。我能够根据我在逻辑分析仪上看到的内容正确写入/读取,因为 MISO 和 MOSI 线都显示了正确的数据。

我面临的问题是,在我的 RX 缓冲区中,我没有获得正确的数据,只能看到 0xFF。

除了读/写功能。在写入任何内容之前,我还会进行全局解锁、 block 删除和写入启用。我还确保 SDI 线设置为和谐引脚配置的输入。我的SDI引脚连接到pic32上的pin45(RPD11/PMCS1/RD11)。

下面是我的实现。

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;
}

有人可以建议我如何在我的接收缓冲区中获取正确的数据吗?

最佳答案

最后解决了这个问题,结果发现两个不同 PIC32 上的 SDI 端口有故障。我们今天得到的第三个成功了。

提醒其他人:如果您通过 MOSI 和 MISO 的输出和后续输入看起来不错,您的时钟看起来正确,您的引脚设置正常,但您没有获取数据,则您的芯片上可能有错误的输入连接.

将 SDI 引脚配置为 Microchip Harmony 的开漏,并将缓冲区声明为一致,至少在我们的配置中是有帮助的。

关于c - 我的 SPI 接收缓冲区始终返回 0xFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55851490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com