По нужде пробую после МК ПЛИСы, а именно DE0-NANo SOC (ALtera Cyclon V)
Задача считывать 8 каналов цифровых данных и записывать сразу в SDRAM.
Когда запись закончиться, надо будет перенести все данные на карточку памяти MicroSD.
ПЛИСы для меня новы. Подскажите как это правильней сделать?
Счетчик (хелло ворлд) делал. Правда почему то все сбивается от отключения питания.
Добрый день!
Пытаюсь запустить SDRAM M12L16161 "ногодрыгом" на stm32f103.
Это вообще возможно осуществить, дрыгая ногами (CLK, CKE, CS, RAS, CAS, BA, A0-A10, WE, LDQM, UDQM) в ручном режиме,
в соответствии с временными диаграммами, приведёнными в даташите?
Есть ли ограничения минимальной частоты сигнала CLK и особые требования к его стабильности?
Может ли негативно влиять тот факт, что интервалы между положительными фронтами CLK постоянно меняются ("ногодрыг", а не по таймеру)?
[uquote="pinchemierda",url="/forum/viewtopic.php?p=3840802#p3840802"]Пытаюсь запустить SDRAM M12L16161 "ногодрыгом" на stm32f103.[/uquote]
Я бы лучше взял какую-то QSPI PSRAM, типа такой. Учитывая простоту протокола по 4 бита может даже быстрее будет работать, чем твоя SDRAM по 16-ть. И F1 самая медленная серия при работе с портами, его бы заменил на F303, там ногодрыг наоборот самый быстрый.
Да, походу не укладываюсь в CLK cycle time max = 1000 нс.
40 тактов уходит на то, чтобы один бит порта пнуть регистром GPIOx->BSRR или BRR !!! Как так то!?
А с помощью битбэндинга не быстрее будет?
Я может смотрю не туда, или кнопки не те нажимаю))
В отладке встаю на строку (хочу например PA15 сделать HIGH) GPIOA->BSRR |= 1<<15;
Открываю Systick, записываю текущее значение в калькулятор, шагаю на следующую строчку.
В Systick уже новое значение (меньше предыдущего, т.к. считает назад). По разнице определяю количество тактов (40).
Тактирование Systick 72MHz, оптимизация 0.
Тут все неправильно, начиная с того, что BSRR - это write-only регистр. И SysTick может тикать пока отладчик пытается пошагово команды выполнять, если хочется примерно замерять такты таким образом, то нужно использовать DWT->CYCCNT.
Reflector, большое спасибо за DWT->CYCCNT, не знал про это. От SysTick такого не ожидал.
Получилось 20 тактов при нулевой оптимизации (при О2 снижается до 12 тактов).
А с BSRR что не так? Он вроде и нужен (в том числе) для того чтобы "атомарно" устанавливать один или несколько битов порта.
[uquote="pinchemierda",url="/forum/viewtopic.php?p=3840895#p3840895"]А с BSRR что не так? Он вроде и нужен (в том числе) для того чтобы "атомарно" устанавливать один или несколько битов порта.[/uquote]
Именно, BSRR нужен чтобы не делать неатомарный RWM используя ODR, но читать из BSRR зачем? Работать то будет, хотя не гарантированно для новых серий, но медленнее.
Последний раз редактировалось Reflector Ср май 13, 2020 14:09:33, всего редактировалось 1 раз.
[uquote="pinchemierda",url="/forum/viewtopic.php?p=3840898#p3840898"]Я вроде не читал...
Писал только GPIOA->BSRR |= 1<<15; (сорян, если туплю)[/uquote]
И как можно модифицировать BSRR не читая его значение? Ты же листинг приводил, там LDR/ORR/STR...
Может проще было взять китайскую плату с STM32F407ZGT6, напаять на ее метровую статическую память и работать через FSMC? Это быстрее и проще и удобнее чем через ногодрыг.
Да такая платка есть. Sram к ней докупать надо, а sdram полно валяется.
Со статической ещё успею наиграться.
Весь интерес был именно sdram и ногодрыгом
Добрый день! Столкнулся с необъяснимым поведением микросхемы памяти SDRAM HY57V561620FT. Прошу помощи в понимании происходящего.
При подачи команды чтения, после задержки CAS Latency выводы данных DQ должны переходить из Hi-Z в состояние выхода данных (+3.3В либо GND). Так и происходит с выводами DQ(0,2,4,6,9,11,13,15), а вот выводы DQ(1,3,5,7,8,10,12,14) остаются в состоянии высокого импеданса.
Подумал, может быть микросхема не исправна. Перепаял её на другую, тоже самое. Проверил разводку питания микросхемы, питание и земля корректно подведены к выводам VDD, VDDQ, VSS и VSSQ. При пайке не перегревал особо. Если дело всё таки в паяльнике, то смущает, что две микросхемы от разных производителей ведут себя одинаково. И почему страдает именно эта половина выводов DQ? Может кто сталкивался с таким?
Замедлил тактирование до 1 Гц и отлаживался по светодиодам.
Да уже разобрался с проблемой. Паяльник заземлил и новую микросхему припаял и всё ОК стало.