может дело в разводке переходника? проверьте пожалуйста, хотя делал все согласно даташиту) дорожки между собой не коротят..
- Вложения
-
- переходник.jpg
- (140.47 КБ) 565 скачиваний
Не вдаваясь в подробности - протокол SPI. Есть линия данных, линия тактирования и линия выбора устройстваRuslan-maniak писал(а):Последовательный код ... взял его таким: линия данных, линия клок, и линия с сигналом который принимает значение 1 при отправке первого бита и становится равным нулю при отправке последнего бита 4-байтового пакета.
Рассмотрим вариант решения. Имеем:Ruslan-maniak писал(а): Если честно, я не очень понял что вы мне посоветовали? Под сигналом записи фифо вы подразумеваете сигнал на разрешение записи, или клок для фифо? И как это ставить автомат в режим ожидания?
ximik писал(а):может дело в разводке переходника? проверьте пожалуйста, хотя делал все согласно даташиту) дорожки между собой не коротят..
Нет не так. Заводить с частотой FIFO в сдвиговый регистр сигнал присутствия данных. И в этом буфере искать момент окончания передачи, иными словами максимально синхронно выделять задний фронт импульса(см файл). Затем уже записывать в память.Ruslan-maniak писал(а):Значит основная идея - это в сдвиговый регистр вместе с тактовой частотой протокола ввода данных, также ввести частоту которой тактируется FIFO. И уже от неё плясать(по времени) при выдачи сигнала разрешения записи. Так?
Вы не первый - мозг надо переформатировать, а на это надо времяRuslan-maniak писал(а): С МК как-то проблематично перейти на плисы для меня.
ibiza11 писал(а):
соединил все VCC и GND проводком припаянном к мк, как и предполагалось не помоглоEngineer_Keen писал(а):GND действительно должны коротить, но все равно неплохо бы соединить их внешней разводкой
Надеюсь это следует читать как все VCC и все GND, а не все VCC с GND одним проводкомximik писал(а):соединил все VCC и GND проводком припаянном к мк
Так их соединили вместе или нет?ximik писал(а):между VCC и AVCC есть некое большое сопротивление их не коротил)
1) естественно + с - сом не коротил)Engineer_Keen писал(а):Надеюсь это следует читать как все VCC и все GND, а не все VCC с GND одним проводкомximik писал(а):соединил все VCC и GND проводком припаянном к мк
Так их соединили вместе или нет?ximik писал(а):между VCC и AVCC есть некое большое сопротивление их не коротил)
Engineer_Keen писал(а):![]()
Так о чем речь шла уже несколько постов. VCC и AVCC нужно соединить.
Можно и по-другому. Сдвиговый регистр тактировать частотой SPI. Но тогда будут 2 клок-домена: один с частотой SPI, другой - с частотой FIFO (100 МГц). При переходе из одного домена в другой нужно не забыть о синхронизаторах. Именно на реализации SPI (принимал данные с микоконтроллера в ПЛИС) первый и единственный раз нарвался на метастабильность. Вот моя реализация SPI для Cyclone на AHDL. Правда, там много специфики: каждый пакет, передаваемый по SPI, содержал 8 разрядов адреса и 32 разряда данных. В ПЛИС адресовалось 20 регистров по 32 разряда.Ruslan-maniak писал(а):Значит основная идея - это в сдвиговый регистр вместе с тактовой частотой протокола ввода данных, также ввести частоту которой тактируется FIFO. И уже от неё плясать(по времени) при выдачи сигнала разрешения записи. Так? Чёт туплю я. С МК как-то проблематично перейти на плисы для меня.
Код: Выделить всё
SPICnt[].(clk, clrn) = (GSPICLK, !nSPIFS & nGCLR);
SPICnt[] = SPICnt[] + 1;
SPIDinReg[].(clk, ena, clrn) = (GSPICLK, !nSPIFS, nGCLR);
SPIDinReg[30..0] = SPIDinReg[31..1]; -- SPI data in shift register
SPIDinReg[31] = SPIDATAIN; -- input data
SPIAddrReg[].(clk, ena, clrn) = (!GSPICLK, SPICnt[] == 8, nGCLR);
SPIAddrReg[] = SPIDinReg[31..24]; -- address
SPIBuffReg[].(clk, ena, clrn) = (GCLK, SPIRd, nGCLR); -- SPI buffer register
SPIDoutReg[].(clk, ena, clrn) = (!GSPICLK, !nSPIFS, nGCLR);
IF SPICnt[] == 8
THEN SPIDoutReg[] = SPIBuffReg[]; -- load data
ELSE SPIDoutReg[30..0] = SPIDoutReg[31..1]; -- shift data
END IF;
DOUTTri.(in, oe) = (SPIDoutReg[0], !nSPIFS & SPIAddrReg[7]); -- output data
SPIDATAOUT = DOUTTri;
SPIWs = DFF(DFF(SPICnt[] == 40, !GSPICLK, nGCLR, ), GCLK, nGCLR, );
SPIWe = DFF(SPIWs, GCLK, , nGCLR);
SPIWr = DFF(SPIWs & !SPIWe, GCLK, nGCLR, );
SPIRs = DFF(DFF(SPICnt[] == 7, GSPICLK, nGCLR, ), GCLK, nGCLR, );
SPIRe = DFF(SPIRs, GCLK, , nGCLR);
SPIRd = DFF(SPIRs & !SPIRe, GCLK, nGCLR, );
FOR i IN 0 TO 19
GENERATE
Wr[i] = !SPIAddrReg[7] & SPIWr & SPIAddrReg[4..0] == i;
Rd[i] = SPIDinReg[31] & SPIRd & SPIDinReg[28..24] == i;
END GENERATE;
Между ними диод. Обычный диод.между VCC и AVCC есть некое большое сопротивление их не коротил)
Нууу... уж Вы преувеличиваете, проф. инструмент это слабенький(на мой взгляд), хотя конечно могу ошибаться. Я уже написал НЧ фильтр на VHDL, моделируется всё прально, но посмотреть действие того, как дьявольская машина мне на экране синусоиды рисует и действие своего кода в железяке это совсем разные вещи. Но к сожалению, плата с ПЛИСиной довольно дорогая штука (раза в 2 дороже техасской) меня жаба душит. А самому сидеть ваять - выйдет по цене как техасская, а по виду как говно тузикина грелка. А тут и ЦСП и С я не знаю, будит хороший повод выучить, приятное с полезным короче...КРАМ писал(а):Странное желание начать с профессионального инструмента.