Не так давно разбираюсь с платой SK-AT91SAM9260-S3E, сейчас заткнулся на задаче конфигурации ПЛИС при помощи ARM/Linux. Пока думаю подключить JTAG ПЛИС к ARM через GPIO.
Может быть, кто-нибудь уже сталкивался с подобной задачей и может предложить более красивое/удобное решение? В любом случае буду рад любым советам по организации процесса загрузки конфигурации в ПЛИС через GPIO->JTAG (установка таймера, DMA).
О заливке конфигурации через реализацию протоколов JTAG с ARM-а лучше забыть, если нет особого академического желания.
Ну а по существу задачи, конфигурационный вход FPGA запараллелен на ARM и "задвинуть" туда BIT-ник особого труда не должно составить.
Возникла та же проблема. Правильно ли я понимаю, что SPI на FPGA с контроллера все-таки не заведен?
Таким образом, пробую заливать через GPIO. Делаю так:
1. Устанавливаю все пины в режим GPIO
- PC9 (PROG_B) - output
- PC7 (DIN) - output
- PC6 (CCLK) - output
- PC4 (DONE) - input
INIT_B (FB56), я так понимаю, никуда не заведен, только на X12, т.е. программно ошибку заливки никак не проверить
2. Дергаю PROG_B, DONE на плате гаснет
3. Начинаю слать данные Bit-Banging'ом побитно:
- Выставляю выход DIN (PC7) в соответствии с текущим битом данных
- Делаю задержку в 10 мкс
- Выставляю CCKL (PC6) в 1
- Делаю задержку в 10 мкс
- Выставляю CCKL (PC6) в 0
- и так далее в цикле, пока не кончатся данные
По идее должно работать, но не работает... Пробовал мониторить INIT_B светодиодом на X12 (между пином 30 и 4 (+3.3В)). Когда дергаю PROG_B, INIT_B гаснет и загарается снова, т.е. из 0 в 1 и опять в 0.
Также, в мануале есть такая фраза, что для конфигурирования ПЛИС может потребоваться больше синхроимпулсов, чем количество бит в прошивке. Как это понимать?
Есть ли у кого-то удачный опыт заливки контроллером? Заранее спасибо за помощь
Может еще нужно кому-то :)
Код компилировался с помощью IAR. Под линух думаю перепишите. Изначально вызов Init, потом передаем битник с помощью SendPart и Finish.
erma2002, спасибо, сейчас более чем актуально :) DataFlash умерла похоже - FPGA с нее перестал грузиться и JTAG'ом не пишется больше...
Под линукс портировал, точнее копи-пастнул, обернул в драйвер, все работает. Как руки дойдут почищу и выложу
PS Нашел два косяка почему мог не работать мой вариант - в одном месте опечатка (жертва копи-пасты), а второе - пытался залить не *.bin, а *.bit, а он с заголовком
У меня .bit не заливался. Что-то мне подсказывает, что он контрольную сумму еще считает и проверяет. .bin наверняка зальется. Еще кстати про фразу : Также, в мануале есть такая фраза, что для конфигурирования ПЛИС может потребоваться больше синхроимпулсов, чем количество бит в прошивке. Как это понимать? Без этого работает, так что кусок в финалайзе закоментирован. В теории все таки надо слать еще поток мусора пока DONE не перейдет в 1.
Кстати, никто случайно не писал процедуру сжатия битника? Пока не актуально, поэтому лень бьет писать :) Для линуха проблема вроде как проще решается, а вот когда делаешь свою прошивку тут граблей хватает.