Pavel_I 0 22 декабря, 2022 Опубликовано 22 декабря, 2022 · Жалоба Начинаю осваивать работу с Zync SoC и столкнулся с необьяснимой проблемой. Создал систему с процессорным ядром и DDR памятью, добавил I2C IP блок на шине AXI. Коммуникация с внешним I2C устройством работает. Т.е. запускается отладка проекта из Vitis, возможно посылать данные по I2C шине и получат правильный ответ. Далее решено добавить AXI DMA блок, чтобы получать данные от внешнего устройства и записывать их в память. DMA не получилось запустить, как ожидалось. Стал исследовать в чем дело, правильно ли записываются конфигурационные регистры DMA. И обнаружил, что при чтении из 32-х разрядных регистров читается только младший байт, а остальное нули. Т.е., например, имееются два регистра для задания адреса в памяти, куда DMA должен складывать данные. Пишешь туда 32-х разрядные числа, а когда читашь их обратно сохраняетя только младший байт, как записано. Остальные байты нулевые. Тогда меня заинтересовало, а как же работает I2C блок? Оказалось, что практически все конфигурационные регистры используют только младшие восемь бит. Имеется несколько 32-х разрядных регистров для параметров тайминга, но их тоже невозможно записать, а потом прочитать полность. Но они в моем случае и не задействованы. Решил я посмотреть, что же происходит в синтезированной схеме. И там действительно во входной шине данных и выходной шине часть линий занулено (фрагмент схемы прилагается). Т.е. конфигурационные регистры IP блока в принципе не могут быть записаны и прочитаны, как 32-х значащие числа. В заключении я создал свой блок с AXI-Lite шиной. Из моего блока регистры пишутся и читаются полностью. Анализ синтезированной схемы схемы DMA блока тоже показывает, что часть разрядов шин данных также зануляется. Оптимизация что ли какая? Кто-то может подсказать почему так происходит и куда копать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 декабря, 2022 Опубликовано 22 декабря, 2022 · Жалоба Есть подозрение что у вас axi subsystem неправильно подключен. но увидеть это можно только на полной картинке) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel_I 0 22 декабря, 2022 Опубликовано 22 декабря, 2022 · Жалоба Вот схема проекта. Все главным образом подключалось через Connection Automation Сам код выглядит, например, вот так XIic_WriteReg(XPAR_IIC_0_BASEADDR, 0x128, 0x12345678); u32 reg = XIic_ReadReg(XPAR_IIC_0_BASEADDR, 0x128); Здесь 0x128 - смещение до 32-битного регистра. Читается только 0x00000078 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FakeDevice 0 22 декабря, 2022 Опубликовано 22 декабря, 2022 · Жалоба Pavel_I, я прежде занимался всякими этими вашими программированиями. Вижу — Вы уже не нуб. Можно и подсказать )) Опишу собственный опыт. В подобных случаях, как мне подсказывает практика, искать причину нужно совершенно в другом месте. Отключите «Туннельное зрение» и разберётесь. Обычно причина, зачастую бывает, — тупая очепятка. Да, может и месяцами тормозиться проект, пока она там )) Если не получится — в личку напишите, бесплатно попробую помочь разобраться в ситуации. Сам уже давно в другую сферу перешёл, просто ностальгия долбанула )) Как наркотик, йо-маййоО! )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 декабря, 2022 Опубликовано 22 декабря, 2022 · Жалоба 3 hours ago, Pavel_I said: Вот схема проекта. Все главным образом подключалось через Connection Automation хмм, вроде у меня корректно все было в похожей системе. я бы раскрыл параметры/интерефейсы ps7_0_axi_perif и посмотрел что он там наделал на интерфейсах. может он какие свойства наследовал или поставил их не корректно при наборе проекте автоматом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel_I 0 22 декабря, 2022 Опубликовано 22 декабря, 2022 · Жалоба Всем спасибо, разобрался. DMA в итоге запустился. Его регистры все-таки читаются как надо через функции XIic_WriteReg/XIic_ReadReg. С I2C блоком отдельная история, уже не столь интересная. Думал, что регистры AXI IP блока должны быть доступны через Memory Browser. Но как раз там только младший байт отображается. Как обычно "сам дурак" )) Надо было глубже вникать прежде, чем просить помощи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 23 декабря, 2022 Опубликовано 23 декабря, 2022 · Жалоба А прерывание почему в воздухе повисло?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel_I 0 23 декабря, 2022 Опубликовано 23 декабря, 2022 · Жалоба 1 hour ago, gosha-z said: А прерывание почему в воздухе повисло?? До него руки еще не дошли )) Все будет в процессе развития проекта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться