我有自己的板载PIC32MX795F512L,我正在尝试将其与SPI EEPROM(M95128-DRE)连接。我正在写入一个字节(0x80)并读取它(延迟5ms后),但读取结果始终为0xFF。我做错什么了吗?代码:
while(true)
{
YB_posX = 0;
uint8_t ENA= 0b00000110; //ROM write-enable instruction
uint8_t INS1=0b00000010; //ROM write instruction
uint8_t add1=0x00; //address byte 1
uint8_t add2=0xee; //address byte 2
uint8_t INS2=0b00000011; //ROM read instruction
uint8_t INS3=0b00000101; //read status register
uint8_t DIS = 0b00000100; //write disable sequence
PLIB_SPI_BufferClear(SPI_ID_4);
LATEbits.LATE9= 0 ; // EEPROM Chip Select
PLIB_SPI_BufferWrite (SPI_ID_4,ENA); // Write Enable
LATEbits.LATE9= 1 ; // EEPROM Chip Select
LATEbits.LATE9= 0 ; // EEPROM Chip Select
PLIB_SPI_BufferWrite (SPI_ID_4,INS1);
PLIB_SPI_BufferWrite (SPI_ID_4,add1);
PLIB_SPI_BufferWrite (SPI_ID_4,add2);
PLIB_SPI_BufferWrite (SPI_ID_4,0x80); //the previous five instructions writed byte 0x50 to address(1+2)
delay_ms(1);
//<-----------------
LATEbits.LATE9=1;
delay_ms(5);
LATEbits.LATE9=0;
delay_ms(1);
PLIB_SPI_BufferWrite (SPI_ID_4,INS2); //reading instruction
PLIB_SPI_BufferWrite (SPI_ID_4,add1);
PLIB_SPI_BufferWrite (SPI_ID_4,add2);
PLIB_SPI_BufferWrite (SPI_ID_4,0x00); //this line is necessary since the ROM needs clock signal to clock out the data.
while(!PLIB_SPI_TransmitBufferIsEmpty(SPI_ID_4))
{}
YB_posX = PLIB_SPI_BufferRead(SPI_ID_4);
PLIB_SPI_ReceiverOverflowClear(SPI_ID_4);
delay_ms(1);
LATEbits.LATE9=1; //end of reading sequence
printNumI(YB_posX, 350, 235, 1, ' ');
delay_ms(1000);
}
Needless to mention that the SPI is initialised and opened at the start of main.
int main(void) {
/* Initialise all MPLAB Harmony modules, including application(s). */
SYS_Initialize(NULL);
DRV_SPI0_Initialize(); // SPI initialise
DRV_SPI_Open(SPI_ID_4,DRV_IO_INTENT_EXCLUSIVE );
我正在使用MPLABX v.5.05,X32 v2.10和Harmony Configurator,随附的是SPI设置的快照。任何建议都欢迎。
问题出在和谐本身。不幸的是,如果您从Harmony开始一个项目,就没有回头路了。您必须从头开始重新编写整个代码。
解决方案:修改spi示例\MPLAB\microchip\harmony\v2_06\apps\driver\spi\serial_eeprom
并且建议不要过渡到Harmony v.3!大多数示例不在此处运行。