Bakradze 0 17 июля, 2018 Опубликовано 17 июля, 2018 (изменено) · Жалоба Итак, просьба помочь. Есть плата 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. Дайте пожалуйста совет, если есть соображения по поводу моей проблемы. Изменено 17 июля, 2018 пользователем Bakradze Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bakradze 0 18 июля, 2018 Опубликовано 18 июля, 2018 · Жалоба Всем спасибо за горячее участие, проблема решилась :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Segment 3 18 июля, 2018 Опубликовано 18 июля, 2018 · Жалоба Всем спасибо за горячее участие, проблема решилась :) Что за привычка не писать в чем заключалась ошибка и какое было решение Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 20 июля, 2018 Опубликовано 20 июля, 2018 · Жалоба Всем спасибо за горячее участие, проблема решилась :) Прошу написать, как была решена данная проблема. В чем была ошибка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
etoja 0 24 июля, 2018 Опубликовано 24 июля, 2018 · Жалоба zynq - это FPGA (ПЛИС), а не микроконтроллер. Автор написал не в тот раздел форума. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 179 24 июля, 2018 Опубликовано 24 июля, 2018 · Жалоба zynq - это FPGA (ПЛИС), а не микроконтроллер. Автор написал не в тот раздел форума. Zynq - это не FPGA. Это SoC, если на то уж пошло. А раздела по процессорам общего назначения у нас нет. Равно как и про SoC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Если бы проблема ТС была по ARM-ядру (A9 там?), то раздел правильный. А ежели с ПЛИС, то и соответствующий раздел тоже есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Zynq - это не FPGA. Это SoC, если на то уж пошло. А раздела по процессорам общего назначения у нас нет. Равно как и про SoC. SoCоводы обычно тусят там: https://electronix.ru/forum/index.php?showforum=164 (разработка встраиваемых процессоров и периферии для ПЛИС) раньше там были только вопросы по nios и microblaze, но потом подтянулись и хардовые АРМы в фпга.. по ТС, к сожалению это частая практика - не публиковать решения или "вот решу и всё-всё потом напишу" и это "потом" тянется годами в бесконечность.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться