Jump to content

    

Zynq динамическая замена интерфеса PS MIO

Здравствуйте. Есть кастомная плата с xc7z030fbg676-1. Из-за ограниченного количества PS MIO на пины MIO40-45 на схематике заведено 2 интерфеса (SDIO и SPI) через внешний mux/demux:

image.png.13b8149d1d4ae9e48043779cf2c6ea07.png

Вопрос, можно ли обоими интерфейсами пользоваться "статически" или "динамически"? "Статически" - это на одну прошивку один интерфейс. "Динамически" - это в рамках одной прошивки менять тип PS MIO интерфейса на лету.

Насколько я понимаю конфигурация PS MIO выполняется за счёт настройки SLCR Registers (как в генерируемом файле ps_init.tcl). А можно ли эти регистры менять прямо из программы процессора? Смотрел ug585-Zynq-7000-TRM, но явного подвтерждения/опровержения пока найти не удалось.

Share this post


Link to post
Share on other sites

А что помешало отправить кого-нибудь в EMIO?

Share this post


Link to post
Share on other sites
2 минуты назад, gosha-z сказал:

А что помешало отправить кого-нибудь в EMIO? 

Об этом надо спрашивать человека занимавшегося схематикой. Видимо предполагалось, что всё надо "впихнуть" в MIO.

Share this post


Link to post
Share on other sites
12 minutes ago, Vengin said:

Об этом надо спрашивать человека занимавшегося схематикой

Ну вот пусть он и решает эту проблему. А то привыкли, видите ли, что проблемы программистов схемотехников не волнуют...

Share this post


Link to post
Share on other sites

Ну, если это можно делать программно, то это естественно проще чем переразводить плату. Да и вообще мне и самому интересено, насколько в этом плане гибока подсистема PS цинка.

Share this post


Link to post
Share on other sites
5 minutes ago, Vengin said:

Да и вообще мне и самому интересено, насколько в этом плане гибока подсистема PS цинка.

Сгенерите два FSBL, один под SPI, второй под SD, смотрите исходники. Но я бы настучал по голове схемотехнику за такой авангард...

Share this post


Link to post
Share on other sites

ЕМНИП динамическая реконфигурация возможна. По крайней мере работал с разработчиком который конфигурировал переферию, уже после загрузки FSBL, на этапе uboot. Но деталей не знаю, не моя специализация)

Share this post


Link to post
Share on other sites
7 minutes ago, des00 said:

Но деталей не знаю

Скорее всего у него все смотрело в EMIO и он делал PL Partial Reconfiguration.

Share this post


Link to post
Share on other sites
3 minutes ago, gosha-z said:

Скорее всего у него все смотрело в EMIO и он делал PL Partial Reconfiguration.

ЕМНИП он работал с портами PS_ХХ, динамической реконфигураци 146% не было)

Share this post


Link to post
Share on other sites
43 минуты назад, gosha-z сказал:

Сгенерите два FSBL, один под SPI, второй под SD, смотрите исходники. Но я бы настучал по голове схемотехнику за такой авангард...

А при чём тут FSBL, и исходники чего смотреть?

Share this post


Link to post
Share on other sites
1 minute ago, Vengin said:

А при чём тут FSBL

При том, что он занимается конфигурированием периферии.

 

2 minutes ago, Vengin said:

исходники чего смотреть

FSBL

3 minutes ago, des00 said:

он работал с портами PS_ХХ

Именно менял назначение PS_MIOxx?

Хотя, подумалось вот, можно попробовать поиграть с Device Tree Overlays, явно прописывая порты в pinctrl. В теории может и прокатить.

Share this post


Link to post
Share on other sites
4 minutes ago, gosha-z said:

Именно менял назначение PS_MIOxx?

Да. При совместной отладке, я отметил что в проекте Vivado конфиурация переферии, в графическом инстансе, не соответствует плате. Как я понимаю это то, что идет в FSBL. На что мне дали ответ что без разницы что там стоит, т.к. переферия конфигурируется как надо, перед запуском линух, в убуте.

Share this post


Link to post
Share on other sites

C тонкостями FSBL практически не знаком и предполагал, что он больше отвечает за нюансы загрузки. Бегло просмотрел сейчас раздел "Boot and Configuration" в ug585-Zynq-7000-TRM - как-то не особо помогло. В исходникак FSBL тоже не совсем понятно, что смотреть. Да, есть вызов функции ps7_init(). Есть ещё кстати макросы SlcrLock()/SlcrUnlock(). Но даже в какую сторону копать не совсем понятно. Допустим, в FSBL (в post_config?) переключили интерфейс, а что дальше? В моём понимании FSBL ведь выполняется 1 раз? Как это поможет "динамически" и многократно переключать интерфейсы PS_MIO?

 

Продублировал вопрос на форуме Xilinx, глядишь там помогут. Просто сейчас стоит задача понять, возможно ли это в принципе (динамически переключать PS_MIO интерфейсы), или нужно переделывать плату.

 

Да, кстати, там в плане схематики ещё есть нюанс. Дело в том, что этот shared MIO[40-45] интерфейс выводится через коннектор на другую плату. Если прводить оба интерфейса по отдельности, может не хватить места в коннектере.

Share this post


Link to post
Share on other sites
31 minutes ago, Vengin said:

возможно ли это в принципе (динамически переключать PS_MIO интерфейсы)

Читать сюда и сюда

Share this post


Link to post
Share on other sites
19 минут назад, gosha-z сказал:

Читать сюда и сюда

Интересно. Но это всё применимо только для linux kernel. А для bare-metal тогда как? Кажется, что должна быть более низкоуровневая и универсальная возможность.

Но в целом это всё предполагает, что переключение в принципе возможно. А вот как узнать наверняка ...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now