Jump to content

    
Sign in to follow this  
Bakradze

Проблема с записью во флеш-память

Recommended Posts

Итак, просьба помочь. Есть плата 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.

 

Дайте пожалуйста совет, если есть соображения по поводу моей проблемы.

Edited by Bakradze

Share this post


Link to post
Share on other sites
Всем спасибо за горячее участие, проблема решилась :)

Что за привычка не писать в чем заключалась ошибка и какое было решение

Share this post


Link to post
Share on other sites
zynq - это FPGA (ПЛИС), а не микроконтроллер. Автор написал не в тот раздел форума.

Zynq - это не FPGA. Это SoC, если на то уж пошло. А раздела по процессорам общего назначения у нас нет. Равно как и про SoC.

Share this post


Link to post
Share on other sites
Zynq - это не FPGA. Это SoC, если на то уж пошло. А раздела по процессорам общего назначения у нас нет. Равно как и про SoC.

SoCоводы обычно тусят там:

https://electronix.ru/forum/index.php?showforum=164

(разработка встраиваемых процессоров и периферии для ПЛИС)

 

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

 

по ТС, к сожалению это частая практика - не публиковать решения или "вот решу и всё-всё потом напишу" и это "потом" тянется годами в бесконечность..

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this