主题中讨论的其他器件:SysConfig
工具与软件:
专家、您好! 新年快乐!
我正在开发用于写入和读取外部 存储器的固件(MB85RS256B 是 FRAM、Fujitsu)。
为此、我很幸运地在这里找到了一个示例(代码的第4行有链接)。 我能够读取存储器 ID、就像最初实现的示例一样。
然后、我 将示例中的一个小标题更改为合并写入过程。 我想说它仍然可以工作(示波器看起来正常吗?)、但是 gRxPacket 变量(我的代码的第80行)始终为零。
请、有人能给我任何关于我做错了什么的提示吗?

#include "ti_msp_dl_config.h" /* Code example: e2e.ti.com/.../5551850 peripheral: MB85RS256B is a FRAM, Fujitsu */ #define SPI_PACKET_SIZE_TX (5) #define SPI_PACKET_SIZE_RX (2) /* Data for SPI to transmit */ uint8_t gTxPacket1[SPI_PACKET_SIZE_TX-2] = {0x03, 0x00, 0x00}; // read package uint8_t gTxPacket2[SPI_PACKET_SIZE_TX] = {0x02, 0x00, 0x00, 0xaa, 0xaa}; // write package /* Data received from SPI Peripheral */ volatile uint8_t gRxPacket[SPI_PACKET_SIZE_RX]; uint8_t gRxPacketTemp[SPI_PACKET_SIZE_TX]; // OP-CODES for the MB85RS256B uint8_t WREN = {0x06}; // 0000 0110 - Set Write Enable Latch uint8_t WRDI = {0x04}; // 0000 0100 - Reset Write Enable Latch uint8_t dummy = {0xFF}; // 1111 1111 - dummy byte uint8_t msb = 0; uint8_t lsb = 0; uint16_t myVal = 0; int main(void) { SYSCFG_DL_init(); DL_GPIO_clearPins(GPIO_PORT, GPIO_LED_1_PIN | GPIO_SEL_MUX_PIN | GPIO_EN_MUX_PIN); DL_GPIO_setPins(GPIO_PORT, GPIO_CS_SPI_PIN); delay_cycles(1000); DL_GPIO_clearPins(GPIO_PORT, GPIO_CS_SPI_PIN); DL_SPI_transmitDataBlocking8(SPI_0_INST, WREN); while (DL_SPI_isBusy(SPI_0_INST)); DL_GPIO_setPins(GPIO_PORT, GPIO_CS_SPI_PIN); DL_GPIO_clearPins(GPIO_PORT, GPIO_CS_SPI_PIN); // DL_SPI_fillTXFIFO8(SPI_0_INST, &gTxPacket2[0], SPI_PACKET_SIZE_TX); // it works as well, why? // Maximum FIFO size is 4 for (uint8_t i = 0; i < SPI_PACKET_SIZE_TX; i++) { while (DL_SPI_isTXFIFOFull(SPI_0_INST)) ; // Put data into fifo DL_SPI_fillTXFIFO8(SPI_0_INST, &gTxPacket2[i], 1); } /* Wait until all bytes have been transmitted and the TX FIFO is empty */ while (DL_SPI_isBusy(SPI_0_INST)); gRxPacketTemp[0] = DL_SPI_receiveDataBlocking8(SPI_0_INST); DL_GPIO_setPins(GPIO_PORT, GPIO_CS_SPI_PIN); DL_GPIO_clearPins(GPIO_PORT, GPIO_CS_SPI_PIN); /* Fill TX FIFO with data and transmit to SPI Peripheral */ DL_SPI_fillTXFIFO8(SPI_0_INST, &gTxPacket1[0], SPI_PACKET_SIZE_TX-2); /* Wait until all bytes have been transmitted and the TX FIFO is empty */ while (DL_SPI_isBusy(SPI_0_INST)); gRxPacketTemp[0] = DL_SPI_receiveDataBlocking8(SPI_0_INST); // Wait to receive the SPI data // This loop expects SPI_PACKET_SIZE bytes for (uint8_t i = 0; i < SPI_PACKET_SIZE_RX; i++) { DL_SPI_transmitDataBlocking8(SPI_0_INST, dummy); while (DL_SPI_isBusy(SPI_0_INST)); gRxPacket[i] = DL_SPI_receiveDataBlocking8(SPI_0_INST); } msb = gRxPacket[0]; lsb = gRxPacket[1]; myVal = (msb << 8) | lsb; DL_GPIO_setPins(GPIO_PORT, GPIO_CS_SPI_PIN); /*DL_GPIO_clearPins(GPIO_PORT, GPIO_CS_SPI_PIN); DL_SPI_transmitDataBlocking8(SPI_0_INST, WRDI); while (DL_SPI_isBusy(SPI_0_INST)); DL_GPIO_setPins(GPIO_PORT, GPIO_CS_SPI_PIN);*/ /* If write and read were successful, toggle LED */ while (1) { DL_GPIO_togglePins(GPIO_PORT, GPIO_LED_1_PIN); delay_cycles(16000000); } }


