I can read status data register with this code,
STDperiph,
Code: Select all
uint8_t AT45DB_StatusRegisterRead(void){
uint8_t i;
FLASH_CS_0();
spi_readwrite(AT45DB_READ_STATE_REGISTER);
i = spi_readwrite(0xFF);
FLASH_CS_1();
return i;
}in ChibiOS,
Code: Select all
uint8_t AT45DB_StatusRegisterRead(void){
spiAcquireBus(&SPID1); /* Acquire ownership of the bus. */
spiStart(&SPID1, &hs_spicfg); /* Setup transfer parameters. */
spiSelect(&SPID1);
tx_buf[0]=AT45DB_READ_STATE_REGISTER;
spiSend(&SPID1,1,tx_buf);
spiReceive(&SPID1,1,rx_buf);
spiUnselect(&SPID1); /* Slave Select de-assertion. */
spiReleaseBus(&SPID1); /* Ownership release. */
return rx_buf[0];
}But Read write code is fail,
STDperiph,
Code: Select all
void read_page(uint32_t page){
uint16_t i;
FLASH_CS_0();
spi_readwrite(AT45DB_MM_PAGE_READ);
spi_readwrite((uint8_t)(page >> 6));
spi_readwrite((uint8_t)(page << 2));
spi_readwrite(0x00);
// 4 don't care bytes
spi_readwrite(0x00);
spi_readwrite(0x00);
spi_readwrite(0x00);
spi_readwrite(0x00);
for (i = 0; i < DMA_BUFFER_SIZE; i++)
rxbuf[i] = spi_readwrite(0x00);
FLASH_CS_1();
}
void write_page(uint32_t page)
{
uint16_t i;
FLASH_CS_0();
spi_readwrite(AT45DB_MM_PAGE_PROG_THRU_BUFFER1);
spi_readwrite((uint8_t) (page >> 6));
spi_readwrite((uint8_t) (page << 2));
spi_readwrite(0x00);
memcpy(tx_buf,"Hello World\r\n",13);
for (i = 0; i < DMA_BUFFER_SIZE; i++)
spi_readwrite(txbuf[i]);
FLASH_CS_1();
wait_busy();
} in ChibiOS,
Code: Select all
void read_page(uint32_t page)
{
spiAcquireBus(&SPID1); /* Acquire ownership of the bus. */
spiStart(&SPID1, &hs_spicfg); /* Setup transfer parameters. */
spiSelect(&SPID1);
tx_buf[0]=AT45DB_MM_PAGE_READ;
tx_buf[1]=(uint8_t)(page >> 6);
tx_buf[2]=(uint8_t)(page << 2);
tx_buf[3]=0x00;
// 4 don't care bytes
tx_buf[4]=0x00;
tx_buf[5]=0x00;
tx_buf[6]=0x00;
tx_buf[7]=0x00;
spiSend(&SPID1,8,tx_buf);
spiReceive(&SPID1,DMA_BUFFER_SIZE,rx_buf);
spiUnselect(&SPID1); /* Slave Select de-assertion. */
spiReleaseBus(&SPID1); /* Ownership release. */
}
void write_page(uint32_t page)
{
spiAcquireBus(&SPID1); /* Acquire ownership of the bus. */
spiStart(&SPID1, &hs_spicfg); /* Setup transfer parameters. */
spiSelect(&SPID1);
tx_buf[0]=AT45DB_MM_PAGE_PROG_THRU_BUFFER1;
tx_buf[1]=(uint8_t)(page >> 6);
tx_buf[2]=(uint8_t)(page << 2);
tx_buf[3]=0x00;
spiSend(&SPID1,4,tx_buf);
memcpy(tx_buf,"Hello World\r\n",13);
spiSend(&SPID1,DMA_BUFFER_SIZE,tx_buf);
wait_busy();
spiUnselect(&SPID1); /* Slave Select de-assertion. */
spiReleaseBus(&SPID1); /* Ownership release. */
}Any suggestions?
Arif,