您好!
我尝试在 TM4C129ENCPDT 和 SST25VF016B 之间使用 SPI 通信。
我在论坛中阅读了其他一些文章、但无法实现任何字节的发送和读取。 我可以读取 JEDEC ID。 这里是我的代码。 等待响应。
//初始化
unsigned long ui32废物桶;
SysCtlPeripheralEnable (SYSCTL_Periph_SSI2);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);
GPIOPinConfigure (GPIO_PD3_SSI2CLK);
GPIOPinConfigure (GPIO_PD0_SSI2XDAT1);//MISO/RX 线路
GPIOPinConfigure (GPIO_PD1_SSI2XDAT0);//MOSI//TX 线路
GPIOPinConfigure (GPIO_PD2_SSI2FSS);
GPIOPinTypeSSI (GPIO_PORTD_base、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
SSIConfigSetExpClk (SSI2_base、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、1000000、 8);
SSIAdvModeSet (SSI2_base、SSI_ADV_MODE_WRITE);
SSIAdvFrameHoldEnable (SSI2_base);
SSIEnable (SSI2_base);
while (SSIDataGetNonBlocking (SSI2_base、&ui32Trash)){}
}
一些功能
//芯片选择启用,PD2
void ce_set (void){
GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_2);
GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_2、GPIO_PIN_2);
}
//芯片选择禁用,PD2
void ce_clear (void){
GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_2);
GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_2、0);
}
//写保护使能,PQ0
void wp_set (void){
GPIOPinTypeGPIOOutput (GPIO_PORTQ_BASE、GPIO_PIN_0);
GPIOPinWrite (GPIO_PORTQ_BASE、GPIO_PIN_0、GPIO_PIN_0);
}
//禁用写保护,PQ0
void wp_clear (void){
GPIOPinTypeGPIOOutput (GPIO_PORTQ_BASE、GPIO_PIN_0);
GPIOPinWrite (GPIO_PORTQ_BASE、GPIO_PIN_0、0);
}
发送 Byte 例程:
uint8_t TX_DATA = 0x11;
uint32_t ui32Address = 0x012345;
wp_clear();
ce_clear();
SSIAdvModeSet (SSI2_base、SSI_ADV_MODE_WRITE);
SSIAdvDataPutFrameEnd (SSI2_base、0x50);
ce_set();
ce_clear();
SSIAdvModeSet (SSI2_base、SSI_ADV_MODE_WRITE);
SSIDataPut (SSI2_base、0x01);
SSIAdvDataPutFrameEnd (SSI2_base、0x00);
ce_set();
ce_clear();
SSIAdvModeSet (SSI2_base、SSI_ADV_MODE_WRITE);
SSIAdvDataPutFrameEnd (SSI2_base、0x06);
ce_set();
ce_clear();
SSIAdvModeSet (SSI2_base、SSI_ADV_MODE_WRITE);
SSIAdvFrameHoldEnable (SSI2_base);
SSIDataPut (SSI2_base、0x02);
SSIDataPut (SSI2_base、(ui32Address >> 16)& 0xff);
SSIDataPut (SSI2_base、(ui32Address >> 8)& 0xff);
SSIDataPut (SSI2_base、ui32Address 和0xff);
SSIAdvDataPutFrameEnd (SSI2_base、TX_DATA);
ce_set();
读取 Byte 例程:
unsigned long ui32MfgID;
uint32_t ui32Address = 0x012345;
ce_clear();
SSIAdvModeSet (SSI2_base、SSI_ADV_MODE_READ_WRITE);
SSIDataPut (SSI2_base、0x03);
SSIDataPut (SSI2_base、(ui32Address >> 16)& 0xff);
SSIDataPut (SSI2_base、(ui32Address >> 8)& 0xff);
SSIDataPut (SSI2_base、ui32Address 和0xff);
SSIAdvDataPutFrameEnd (SSI2_base、0x00);
SSIDataGet (SSI2_base、&ui32MfgID);
ce_set();
我将 FF 视为输出。
读取 JEDEC ID:
uint32_t a、b、c、d;
SSIAdvModeSet (SSI2_base、SSI_ADV_MODE_READ_WRITE);
SSIDataPut (SSI2_base、0x9F);
SSIDataPut (SSI2_base、0x00);
SSIDataGet (SSI2_base、&a);//读取制造 ID
SSIDataPut (SSI2_base、0x00);
SSIDataGet (SSI2_base、&b);//读取制造 ID
SSIDataPut (SSI2_base、0x00);
SSIDataGet (SSI2_base、&c);//读取制造 ID
SSIAdvDataPutFrameEnd (SSI2_base、0x00);
SSIDataGet (SSI2_base、&d);
我将 FF BF 25 41视为输出。