Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с записью во флеш-память
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Bakradze
Итак, просьба помочь. Есть плата zedboard на основе zynq, к нему подключена память spi-flash S25FL256S. Есть проблемы с записью в память в случае невыровненных данных, т.е. если нужно записать в память количество байт не кратное 4-м - 1, 2 или 3 байта.

Вот исходник драйвера https://github.com/Xilinx/embeddedsw/blob/m...s/src/xqspips.c

Столкнулся со следующей проблемой.

К примеру, нужно нам записать в память 1 байт. Используем команду Page Program=0x02 с 3 байтами адреса. Пишем в самое начало, поэтому можно для простоты все три байта адреса оставить нулевыми. К примеру пишем 0xAA.

Все подготовил так, как в примере использующем эту функцию https://github.com/Xilinx/embeddedsw/blob/m...flash_example.c - ручное управление линией SS и ручной старт.

Если идти по пути как указано в тексте драйвера в функции s32 XQspiPs_PolledTransfer() - мы должны будем послать данные по следующей схеме:

XQspiPs_WriteReg(InstancePtr->Config.BaseAddress, XQSPIPS_TXD_01_OFFSET, 0x00000002) - в FIFO предназначенное для отправки 1-байтной инструкции. (т.е. отправится 0x02)

затем остальные, уже выровненные данные, отправлять в обычное FIFO предназначенное для отправки 4-байтного слова

в нашем случае это будет выглядеть так:

XQspiPs_WriteReg(InstancePtr->Config.BaseAddress, XQSPIPS_TXD_00_OFFSET, 0xAA000000) где 0xAA и есть наш байт

И тут проблема: если ждать опустошения 1-байтного FIFO с адресом XQSPIPS_TXD_01_OFFSET перед отправкой остальных данных в FIFO с адресом XQSPIPS_TXD_00_OFFSET как в примере драйвера

do {
StatusReg = XQspiPs_ReadReg(
InstancePtr->Config.BaseAddress,
XQSPIPS_SR_OFFSET);
} while ((StatusReg & XQSPIPS_IXR_TXOW_MASK) == 0);

у меня записи не происходит и более того - даже в статусном регистре памяти SR1 значение защелки Write Enable Latch (WEL) не падает в 0.

Ок, уберем кусочек который ожидает опустошение передающей очереди TX_01. В этом случае когда мы после записи в TX_01 без ожидания опустошения пишем в TX_00 - происходит подвисание отладчика.




Если записывать по 4 байта, то есть сначала записать

XQspiPs_WriteReg(InstancePtr->Config.BaseAddress, XQSPIPS_TXD_00_OFFSET, 0x00000012)

потом, не дожидаясь опустошения

XQspiPs_WriteReg(InstancePtr->Config.BaseAddress, XQSPIPS_TXD_00_OFFSET, 0xAAAAAAAA)

статус защелки падает в 0, а вычитывание покажет 4 записанных байта в самое начало памяти

Поначалу думал, что можно записывать только кратно 4 байта, но мне показали что можно и не кратно 4.

Дайте пожалуйста совет, если есть соображения по поводу моей проблемы.
Bakradze
Всем спасибо за горячее участие, проблема решилась sm.gif
segment
Цитата(Bakradze @ Jul 18 2018, 13:39) *
Всем спасибо за горячее участие, проблема решилась sm.gif

Что за привычка не писать в чем заключалась ошибка и какое было решение
AVR
Цитата(Bakradze @ Jul 18 2018, 13:39) *
Всем спасибо за горячее участие, проблема решилась sm.gif

Прошу написать, как была решена данная проблема. В чем была ошибка?
etoja
zynq - это FPGA (ПЛИС), а не микроконтроллер. Автор написал не в тот раздел форума.
Arlleex
Цитата(etoja @ Jul 24 2018, 18:26) *
zynq - это FPGA (ПЛИС), а не микроконтроллер. Автор написал не в тот раздел форума.

Zynq - это не FPGA. Это SoC, если на то уж пошло. А раздела по процессорам общего назначения у нас нет. Равно как и про SoC.
Obam
Если бы проблема ТС была по ARM-ядру (A9 там?), то раздел правильный. А ежели с ПЛИС, то и соответствующий раздел тоже есть.
Jury093
Цитата(Arlleex @ Jul 24 2018, 17:30) *
Zynq - это не FPGA. Это SoC, если на то уж пошло. А раздела по процессорам общего назначения у нас нет. Равно как и про SoC.

SoCоводы обычно тусят там:
https://electronix.ru/forum/index.php?showforum=164
(разработка встраиваемых процессоров и периферии для ПЛИС)

раньше там были только вопросы по nios и microblaze, но потом подтянулись и хардовые АРМы в фпга..

по ТС, к сожалению это частая практика - не публиковать решения или "вот решу и всё-всё потом напишу" и это "потом" тянется годами в бесконечность..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.