реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> EPCQ и Serial Flash Controller II
djhall
сообщение Jun 26 2018, 07:45
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 29-04-06
Пользователь №: 16 608



Пытаюсь записать данные с помощью мастера непосредственно в EPCQ32, используя Serial Flash Controller II
Если я правильно понимаю, то сначала нужно стереть сектор. Как указанно в документации Embedded Peripherals IP User Guide -> 16. Intel FPGA Serial Flash Controller and Controller II Core просто записываю 0x02 в регистр FLASH_MEM_OP чтобы стереть нулевой сектор. В результате ничего не происходит, сектор значений не меняет.
Делаю я это с помощь System Console и JTAG to Avalon Master Bridge с помощью команды:
master_write_32 $claim_path $offset $value

Подскажите в чём может быть проблема?
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 26 2018, 08:42
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 402
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



BSP предоставляет замечательную функцию
Код
int alt_epcq_controller2_erase_block(alt_flash_dev *flash_info, int block_offset);
Go to the top of the page
 
+Quote Post
djhall
сообщение Jun 26 2018, 08:58
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 29-04-06
Пользователь №: 16 608



Цитата(doom13 @ Jun 26 2018, 12:42) *
BSP предоставляет замечательную функцию
Код
int alt_epcq_controller2_erase_block(alt_flash_dev *flash_info, int block_offset);

В системе не будет процессора, будет самописный компонент, который должен записывать данные в EPCQ32 являясь мастером. А отлаживаю я пока с использованием System Console и JTAG to Avalon Master Bridge, т.е. JTAG to Avalon Master Bridge пока является мастером.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 26 2018, 09:52
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 402
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Можете попробовать ядро Altera ASMI Parallel / Parallel II, оно для работы без Niosa.

Цитата(djhall @ Jun 26 2018, 11:58) *
В системе не будет процессора, будет самописный компонент, который должен записывать данные в EPCQ32 являясь мастером. А отлаживаю я пока с использованием System Console и JTAG to Avalon Master Bridge, т.е. JTAG to Avalon Master Bridge пока является мастером.

Зачем тогда вообще рассматривать Альтеровский контроллер, тут нужен просто SPI/QSPI и далее шлёте нужные для памяти команды и данные.
Go to the top of the page
 
+Quote Post
djhall
сообщение Jun 26 2018, 12:58
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 29-04-06
Пользователь №: 16 608



Цитата(doom13 @ Jun 26 2018, 13:52) *
Можете попробовать ядро Altera ASMI Parallel / Parallel II, оно для работы без Niosa.


Зачем тогда вообще рассматривать Альтеровский контроллер, тут нужен просто SPI/QSPI и далее шлёте нужные для памяти команды и данные.


"просто SPI/QSPI" это Generic QUAD SPI Controller II ну если так то по описанию они идентичны. Я так понимаю, что в ячейку памяти нельзя записать 1 если там 0, её нужно стереть. А вот стереть не получается.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 26 2018, 13:32
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 402
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(djhall @ Jun 26 2018, 15:58) *
"просто SPI/QSPI" это Generic QUAD SPI Controller II ну если так то по описанию они идентичны. Я так понимаю, что в ячейку памяти нельзя записать 1 если там 0, её нужно стереть. А вот стереть не получается.

Всё верно, надо стереть, потом можно записать.
Только Generic QUAD SPI Controller II не равно EPCQ Flash controller, он не знает протокол комманд для EPCQ.
Т.е. Вы отправляете по SPI комманду D8h, а флэш не трется?


Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
djhall
сообщение Jun 26 2018, 15:42
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 29-04-06
Пользователь №: 16 608



Цитата(doom13 @ Jun 26 2018, 17:32) *
Т.е. Вы отправляете по SPI комманду D8h, а флэш не трется?

Нет.
Я записываю в регистр FLASH_MEM_OP (Offset = 0x03) значение равное 0x02.
В документации Embedded Peripherals IP User Guide -> 16. Intel FPGA Serial Flash Controller and Controller II Core сказано что это команда для стирания сектора. Т.е. я пытаюсь стереть нулевой сектор.
Прикрепленное изображение


Система у меня такая:
Прикрепленное изображение



Go to the top of the page
 
+Quote Post
warrior-2001
сообщение Jun 27 2018, 05:41
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 374
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792



Ответ был постом выше!
Цитата(doom13 @ Jun 26 2018, 16:32) *
Только Generic QUAD SPI Controller II не равно EPCQ Flash controller, он не знает протокол комманд для EPCQ.



--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 27 2018, 07:56
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 402
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(djhall @ Jun 26 2018, 18:42) *
Я записываю в регистр FLASH_MEM_OP (Offset = 0x03) значение равное 0x02.

Тогда, вероятно, проблема в параметрах offset и value
Код
master_write_32 $claim_path $offset $value


Цитата(djhall @ Jun 26 2018, 18:42) *
Я записываю в регистр FLASH_MEM_OP (Offset = 0x03) значение равное 0x02.

И теперь ещё раз посмотрите чему соответствует Offset = 0x03 в Вашей системе.

P.S. Плюс для master_write_32 оффсет будет не 3, а 12 относительно базового адреса.
Go to the top of the page
 
+Quote Post
djhall
сообщение Jun 27 2018, 13:08
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 29-04-06
Пользователь №: 16 608



Цитата(doom13 @ Jun 27 2018, 11:56) *
P.S. Плюс для master_write_32 оффсет будет не 3, а 12 относительно базового адреса.


Да, так и делаю. Смещение 12.

Короче, разобрался. Спасибо всем кто пытался помочь.
Пришлось сделать простую систему с процессором NIOS. Дело в следующем:
в функции
Код
int alt_epcq_controller2_erase_block(alt_flash_dev *flash_info, int block_offset);
есть ошибка. Не знаю во всех версия Quartus или нет, у меня 17.0

Перед тем как стирать сектор, т.е. перед тем как записывать в регистр FLASH_MEM_OP[2:0] значение 3'b010 необходимо записать команду для разрешения записи, т.е. FLASH_MEM_OP[2:0] = 3'b100
Например, если нужно стереть сектор с начальным адресом 0x10000 (это первый сектор, не нулевой) сначала записываем FLASH_MEM_OP = 0x104, затем FLASH_MEM_OP = 0x102.

Дополнительный код для в функции int alt_epcq_controller2_erase_block в файле altera_epcq_controller2.c выглидит так:
Код
/* calculate current sector/block number */
sector_number = (block_offset/(epcq_flash_info->sector_size));

/* sector value should occupy bits 23:8 */
mem_op_value = (sector_number << 8) & ALTERA_EPCQ_CONTROLLER2_MEM_OP_SECTOR_VALUE_MASK;

/* write enable command */
mem_op_value |= 0x04;

/* write sector erase command to EPCQ_MEM_OP register to erase sector "sector_number" */
IOWR_ALTERA_EPCQ_CONTROLLER2_MEM_OP(epcq_flash_info->csr_base, mem_op_value);


То же самое касается и доступа к EPCQ32 с помощью любого другого мастера.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd September 2018 - 18:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01138 секунд с 7
ELECTRONIX ©2004-2016