При обращении к памяти (чтение, запись) я передаю адрес (на картинке)
Скажем при стирании блока (на картинке) - я должен передать адрес блока – 11 бит? Или адрес блока – 11 бит + адрес страницы – 6 бит?
Если блок + страница то получается так?
Код
//////////////////////////////////// ERASE BLOCK /////////////////////////////
SPI2_CS0_OFF;
SPI_rw_flash(NAND_FLASH_BLOCK_ERASE, &dummy);
temp = 0 | (block_addr >> 10);
SPI_rw_flash(temp, &dummy); // Dummy+A16
temp = block_addr >> 8;
SPI_rw_flash(temp, &dummy); //A15-A8
temp =( block_addr<<3) | page_addr;
SPI_rw_flash(temp, &dummy); //A7-A0
SPI2_CS0_ON;
или нет.
У нас дано
Block Address (2048 blocks/device): 11 bits
Page Address (64 pages/block): 6 bits
Исходя из этого строим Row Address uint32_t row_address = (block_address<<6) | page_address;
а теперь это адрес нужно передать тремя байтами
первый - temp = row_address >> 16;
второй - temp = row_address >> 8;
третий - temp = row_address & 0xFF;
получается так ?
Сообщение отредактировал Jenya7 - Jun 19 2018, 06:04
Эскизы прикрепленных изображений