- Код: Выделить всё • Развернуть
//****************** SPI Definitions **************//
#define CHIP_SELECT_AT25 PORTE.3=0;delay_ms(100);
#define CHIP_UNSELECT_AT25 PORTE.3=1;delay_ms(100);
//******************* SPI Definitions *************//
//******************* Instruction Set ************//
// Read Commands
#define SPI_FLASH_INS_READ 0x03 // Read array
#define SPI_FLASH_INS_FAST_READ 0x0B // Read array(low frequency)
// Program and Erase Commands
#define SPI_FLASH_INS_BLOCK_ERASE_4K 0x20 // Sector erase
#define SPI_FLASH_INS_BLOCK_ERASE_32K 0x52 // Sector erase
#define SPI_FLASH_INS_BLOCK_ERASE_64K 0xD8 // Sector erase
#define SPI_FLASH_INS_CHIP_ERASE_1 0x60 // Sector erase
#define SPI_FLASH_INS_CHIP_ERASE_2 0xC7 // Sector erase
#define SPI_FLASH_INS_PAGE_PROGRAM 0x02 // Byte/Page program
// Protection commands
#define SPI_FLASH_INS_WRITE_ENABLE 0x06 // Write enable
#define SPI_FLASH_INS_WRITE_DISABLE 0x04 // Write disable
#define SPI_FLASH_INS_PROTECT_SECTOR 0x36 // Write disable
#define SPI_FLASH_INS_UNPROTECT_SECTOR 0x39 // Write disable
// Status register commands
#define SPI_FLASH_INS_READ_STATUS_REGISTER 0x05 // Read status register
#define SPI_FLASH_INS_WRITE_STATUS_REGISTER 0x01 // Write status register
// Miscellanous Commands
#define SPI_FLASH_INS_READ_DEVICE_ID 0x9F // Read identification
#define SPI_FLASH_INS_DEEP_POWER_DOWN 0xB9 // Deep power-down
#define SPI_FLASH_INS_RESUME_FROM_DEEP_POWER_DOWN 0xAB // Release from deep power- down
//*************** Instruction Set ***************//
while (1)
{
PORTE.2=0;
if(getchar()==0x31)
{
CHIP_SELECT_AT25 // _S Low
PORTE.2=1;
spi(SPI_FLASH_INS_PAGE_PROGRAM);
spi(0x00);
spi(0xFF);
spi(0x00); // adress 000005
spi(0x68); // данные
delay_ms(1);
putchar('w');
delay_ms(100);
CHIP_UNSELECT_AT25 // _S High
PORTE.2=0;
}
if(getchar()==0x32)
{
CHIP_SELECT_AT25 // _S Low
PORTE.2=1;
//spi(SPI_FLASH_INS_READ_STATUS_REGISTER);
spi(SPI_FLASH_INS_READ );
spi(0x00);
spi(0xFF);
spi(0x00);// adress 000005
receivedchar[0]=spi(0xFF); // считываем значение в переменную
delay_ms(1);
putchar('r');
delay_ms(1);
putchar(receivedchar[0]);
delay_ms(1);
CHIP_UNSELECT_AT25 // _S High
PORTE.2=0;
}
}
}
вот запись и вывод значения по 485 порту но постоянно вижу FF. Подскажите как правильно считать данные с флешки данного типа?
И статус регистор тоже не читает, FF постоянно
- Код: Выделить всё • Развернуть
if(getchar()==0x32)
{
CHIP_SELECT_AT25 // _S Low
PORTE.2=1;
spi(SPI_FLASH_INS_READ_STATUS_REGISTER);
/*spi(SPI_FLASH_INS_READ );
spi(0x00);
spi(0xFF);
spi(0x00);// adress 000005
*/
//receivedchar[0]=spi(0xFF); // считываем значение в переменную
receivedchar[0]=spi(0x00); // считываем значение в переменную
delay_ms(1);
putchar('r');
delay_ms(1);
putchar(receivedchar[0]);
delay_ms(1);
CHIP_UNSELECT_AT25 // _S High
PORTE.2=0;
}