Я пытающегося говорить чип AT45DB081D над SPI, используя следующий код:Как выполнить Continuous массив для чтения флэш-ATMEL Chip AT45DB081D
void efContinuousArrayRead(unsigned char *data, unsigned int page, unsigned int offset, unsigned int length)
{
unsigned int index;
FLASH_SEL_ON
SPIShift(0x03);
SPIShift((unsigned char)(page >> 7));
SPIShift((unsigned char)((page << 1) | (offset >> 8)));
SPIShift((unsigned char)(offset & 0xFF));
for(index = 0; index < length; index++)
{
data[index] = SPIShift(0x00);
}
FLASH_SEL_OFF
}
У меня есть несколько других команд, работающих в том числе:
- Buffer 1/2 Read
- Буфер 1/2 Запись с/без Page Erase
- основной памяти в буфер 1/2
Учитывая, что эти другие команды работают, я уверен, что FLASH_SEL_ON, SPIShift и т. Д. Работают так, как ожидалось.
Обратите внимание, что я могу читать с Страница 0, любое смещение. Тем не менее, я не могу читать с любой страницы, кроме 0. Это заставляет меня думать, что проблема вращается вокруг моей математики, чтобы указать страницу на наличие ошибок.
В отладке, я обнаружил, что на странице 1, смещение 0, 24-битовый адрес вычисляется как:
00000000 00000010 00000000
Это выглядит правильно, согласно технической спецификации спецификации для формата адреса:
xxxPPPPP PPPPPPPB BBBBBBBB
где:
- х неиспользованный
- P номер страницы
- B смещение
Когда я указываю PageNumber = 0, я получаю правильные значения назад, что я поместил туда. Однако, когда я указываю pageNumber = 1, я получаю все 255 значений вместо значений, которые я там ранее размещал.
Как указать адрес для страниц, кроме 0?