Передача адреса

jenya7
Дата: 19.06.2018 08:39:53
Запублудился в трех соснах переменных.
При обращении к памяти (чтение, запись) я передаю адрес (на картинке)
получается нечетное число бит. А как мне передать адрес побайтно?
jenya7
Дата: 19.06.2018 08:41:05
сам адрес он такой
Dima T
Дата: 19.06.2018 08:42:09
Дополни старшие разряды нулями, до целого количества байт.
jenya7
Дата: 19.06.2018 08:48:29
Dima T
Дополни старшие разряды нулями, до целого количества байт.

тогда что получается uint32_t row_address = (block_address<<6) | page_address; ?
Dima T
Дата: 19.06.2018 08:53:50
jenya7
Dima T
Дополни старшие разряды нулями, до целого количества байт.

тогда что получается uint32_t row_address = (block_address<<6) | page_address; ?

Не совсем понял в чем твоя проблема. Если проблема заполнить битовую структуру, т.е. адрес занимает несколько бит подряд, которые не выровнены по началу байта, то сдвигами. Так как ты написал. Затем OR с заполняемой структурой.

Либо еще проще: Битовые поля если на Си пишешь.
jenya7
Дата: 19.06.2018 08:58:21
Dima T
jenya7
пропущено...

тогда что получается uint32_t row_address = (block_address<<6) | page_address; ?

Не совсем понял в чем твоя проблема. Если проблема заполнить битовую структуру, т.е. адрес занимает несколько бит подряд, которые не выровнены по началу байта, то сдвигами. Так как ты написал. Затем OR с заполняемой структурой.

Либо еще проще: Битовые поля если на Си пишешь.

мне этот адресс нужно передать тремя байтами (на первой картинке)
то есть
//////////////////////////////////// ERASE BLOCK  /////////////////////////////
   SPI2_CS0_OFF;
   SPI_rw_flash(NAND_FLASH_BLOCK_ERASE, &dummy);
   temp = 0 ;
   SPI_rw_flash(temp, &dummy);  // Dummy+A16
   temp = row_address >> 16;
   SPI_rw_flash(temp, &dummy);   //A15-A8
   temp = row_address >> 8;
     l_error |= SPI_rw_flash(temp, &dummy);   //A7-A0
   SPI2_CS0_ON;

так что ли?
Dima T
Дата: 19.06.2018 09:04:27
jenya7
так что ли?

Понятия не имею, я не телепат.

Что делает SPI_rw_flash() ? Какой тип у temp ?
jenya7
Дата: 19.06.2018 09:12:05
Dima T
jenya7
так что ли?

Понятия не имею, я не телепат.

Что делает SPI_rw_flash() ? Какой тип у temp ?

SPI_rw_flash() посылает байт. но это не важно. temp это байт.
У нас дано
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 = 0;
второй - temp = row_address >> 8;
третий - temp = row_address & 0xFF;
получается так ?
Dima T
Дата: 19.06.2018 09:32:47
jenya7
Исходя из этого строим Row Address (на второй картинке) uint32_t row_address = (block_address<<6) | page_address;
а теперь это адрес нужно передать тремя байтами
первый - temp = 0;
второй - temp = row_address >> 8;
третий - temp = row_address & 0xFF;
получается так ?

нет, первый - temp = row_address >> 16;
ну и предварительно 1 байт команды.
в остальном вроде картинке соответствует.
jenya7
Дата: 19.06.2018 09:36:04
Dima T
jenya7
Исходя из этого строим Row Address (на второй картинке) uint32_t row_address = (block_address<<6) | page_address;
а теперь это адрес нужно передать тремя байтами
первый - temp = 0;
второй - temp = row_address >> 8;
третий - temp = row_address & 0xFF;
получается так ?

нет, первый - temp = row_address >> 16;
ну и предварительно 1 байт команды.
в остальном вроде картинке соответствует.

спасибо.