powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Передача адреса
24 сообщений из 24, страница 1 из 1
Передача адреса
    #39662253
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запублудился в трех соснах переменных.
При обращении к памяти (чтение, запись) я передаю адрес (на картинке)
получается нечетное число бит. А как мне передать адрес побайтно?
...
Рейтинг: 0 / 0
Передача адреса
    #39662254
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сам адрес он такой
...
Рейтинг: 0 / 0
Передача адреса
    #39662255
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополни старшие разряды нулями, до целого количества байт.
...
Рейтинг: 0 / 0
Передача адреса
    #39662258
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TДополни старшие разряды нулями, до целого количества байт.
тогда что получается uint32_t row_address = (block_address<<6) | page_address; ?
...
Рейтинг: 0 / 0
Передача адреса
    #39662262
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Dima TДополни старшие разряды нулями, до целого количества байт.
тогда что получается uint32_t row_address = (block_address<<6) | page_address; ?
Не совсем понял в чем твоя проблема. Если проблема заполнить битовую структуру, т.е. адрес занимает несколько бит подряд, которые не выровнены по началу байта, то сдвигами. Так как ты написал. Затем OR с заполняемой структурой.

Либо еще проще: Битовые поля если на Си пишешь.
...
Рейтинг: 0 / 0
Передача адреса
    #39662265
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7пропущено...

тогда что получается uint32_t row_address = (block_address<<6) | page_address; ?
Не совсем понял в чем твоя проблема. Если проблема заполнить битовую структуру, т.е. адрес занимает несколько бит подряд, которые не выровнены по началу байта, то сдвигами. Так как ты написал. Затем OR с заполняемой структурой.

Либо еще проще: Битовые поля если на Си пишешь.
мне этот адресс нужно передать тремя байтами (на первой картинке)
то есть
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
//////////////////////////////////// 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;


так что ли?
...
Рейтинг: 0 / 0
Передача адреса
    #39662267
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7так что ли?
Понятия не имею, я не телепат.

Что делает SPI_rw_flash() ? Какой тип у temp ?
...
Рейтинг: 0 / 0
Передача адреса
    #39662270
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7так что ли?
Понятия не имею, я не телепат.

Что делает 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;
получается так ?
...
Рейтинг: 0 / 0
Передача адреса
    #39662284
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 байт команды.
в остальном вроде картинке соответствует.
...
Рейтинг: 0 / 0
Передача адреса
    #39662286
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7Исходя из этого строим 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 байт команды.
в остальном вроде картинке соответствует.
спасибо.
...
Рейтинг: 0 / 0
Передача адреса
    #39662391
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Че то фигня какя то выходит
Допустим я я хочу стереть блок 2046 — 0x7FE
uint32_t row_address = (2046<<6) | 0 = 0x1FF80
передаю побайтно
первый - temp = row_address >> 16 = 1;
второй - temp = row_address >> 8 = 0xFF;
третий - temp = row_address & 0xFF = 0x80;
где то я явно туплю
...
Рейтинг: 0 / 0
Передача адреса
    #39662396
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Че то фигня какя то выходит
Допустим я я хочу стереть блок 2046 — 0x7FE
uint32_t row_address = (2046<<6) | 0 = 0x1FF80
передаю побайтно
первый - temp = row_address >> 16 = 1;
второй - temp = row_address >> 8 = 0xFF;
третий - temp = row_address & 0xFF = 0x80;
где то я явно туплю
Все верно.
Что тебя смущает? Как из 0x7FE получили 0x1FF80 ?
Так
Код: plaintext
1.
0x7FE = 0b111 11111110
0x1FF80 = 0b1 11111111 10000000

просто добавили 6 нулей, но при этом разбивка на байты съехала и значения стали другие.
...
Рейтинг: 0 / 0
Передача адреса
    #39662401
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-хорошему лучше так писать
Код: plaintext
1.
2.
3.
первый - temp = (row_address >> 16) & 0xFF;
второй - temp = (row_address >> 8) & 0xFF;
третий - temp = row_address & 0xFF; 


Если temp имеет тип байт, то ничего не поменялось, но код стал читабельнее
...
Рейтинг: 0 / 0
Передача адреса
    #39662427
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7Че то фигня какя то выходит
Допустим я я хочу стереть блок 2046 — 0x7FE
uint32_t row_address = (2046<<6) | 0 = 0x1FF80
передаю побайтно
первый - temp = row_address >> 16 = 1;
второй - temp = row_address >> 8 = 0xFF;
третий - temp = row_address & 0xFF = 0x80;
где то я явно туплю
Все верно.
Что тебя смущает? Как из 0x7FE получили 0x1FF80 ?
Так
Код: plaintext
1.
0x7FE = 0b111 11111110
0x1FF80 = 0b1 11111111 10000000

просто добавили 6 нулей, но при этом разбивка на байты съехала и значения стали другие.
да но когда мы возвращаем обратно - я же должен послать 07 FE а что же я посылаю - 1 FF 80.
...
Рейтинг: 0 / 0
Передача адреса
    #39662434
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7да но когда мы возвращаем обратно - я же должен послать 07 FE а что же я посылаю - 1 FF 80.
При чем тут обратно? Ты правда думаешь что я телепат?

У тебя так адрес построен
Код: sql
1.
row_address = (block_address<<6) | page_address;


если тебе надо обратно получить block_address, то делай так
Код: sql
1.
block_address = row_address >> 6;
...
Рейтинг: 0 / 0
Передача адреса
    #39662437
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И до кучи
Код: sql
1.
page_address = row_address & 0x3F;
...
Рейтинг: 0 / 0
Передача адреса
    #39662445
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7да но когда мы возвращаем обратно - я же должен послать 07 FE а что же я посылаю - 1 FF 80.
При чем тут обратно? Ты правда думаешь что я телепат?

У тебя так адрес построен
Код: sql
1.
row_address = (block_address<<6) | page_address;


если тебе надо обратно получить block_address, то делай так
Код: sql
1.
block_address = row_address >> 6;


по моему я понял...спасибо
...
Рейтинг: 0 / 0
Передача адреса
    #39662446
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И если побайтно принимаешь, то 1 FF 80 склеивается так
Код: plaintext
1.
2.
3.
4.
5.
row_address = recv_byte();
row_address <<= 8;
row_address |= recv_byte();
row_address <<= 8;
row_address |= recv_byte();


где recv_byte() чтение следующего байта из потока.

PS Если опять не про то ответил, то пиши подробнее что не получается.
...
Рейтинг: 0 / 0
Передача адреса
    #39662448
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TИ если побайтно принимаешь, то 1 FF 80 склеивается так
Код: plaintext
1.
2.
3.
4.
5.
row_address = recv_byte();
row_address <<= 8;
row_address |= recv_byte();
row_address <<= 8;
row_address |= recv_byte();


где recv_byte() чтение следующего байта из потока.

PS Если опять не про то ответил, то пиши подробнее что не получается.
просто я не очень понимаю - после команды BLOCK ERASE - я должен передать именно адрес блока который я хочу стереть или весь адресс блок+страница.
...
Рейтинг: 0 / 0
Передача адреса
    #39662449
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BLOCK ERASE - D8 - на картинке
...
Рейтинг: 0 / 0
Передача адреса
    #39662452
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7просто я не очень понимаю - после команды BLOCK ERASE - я должен передать именно адрес блока который я хочу стереть или весь адрес блок+страница.
я так понимаю что "адрес блок+страница", т.к. на картинке 17 бит под это отведено, а адрес блока 11.
...
Рейтинг: 0 / 0
Передача адреса
    #39662457
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И на второй картинке написано что BLOCK ERASE принимает только row_address, который состоит из block_address и page_address.
...
Рейтинг: 0 / 0
Передача адреса
    #39662485
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TИ на второй картинке написано что BLOCK ERASE принимает только row_address, который состоит из block_address и page_address.
я понял. спасибо.
...
Рейтинг: 0 / 0
Передача адреса
    #39662618
student223
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hello, I recently became a progarmist, tell me which language to start
Модератор: Просьба соблюдать правила форума: Официальный язык форума - русский.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Передача адреса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]