Jump to content

    

Проблема подключения sdram к stm32

Имеется плата с микроконтроллером STM32F769II и микросхемой sdram MT48LC4M16A2. Прошил мк тестовой программой. В ней на sdram записывается информация из одного буфера, а затем читается в другой. Проблема в том, что этого не происходит, второй буфер остаётся пустой. Сигналов WE и CS с помощью логического анализатора (макс. 24 МГц) не увидел. Простым "ногодрыгом" удостоверился, что ножки МК в принципе живые. Вопрос такой, может ли в данном случае неграмотная разводка платы (а в том, что она неграмотная сомневаться не приходиться) сделать устройство полностью неработоспособным. Устройство разведено на 4-х слойной печатной плате. В основном вся разводка выполнена на внутренних слоях, а значит почти у всех дорожек есть два переходных отверстия. Верхние два слоя залиты, насколько возможно, GND полигонами, два нижних слоя залиты VCC полигонами. Ещё есть такой момент, уже не касательно разводки ПП. Я заметил что всех отладочных платах от STM для тактирования МК используется кварц на 25 МГц, я же использую 10 МГц, при этом скорректировав все делители и умножители так, чтобы тактирование ядра и FMC совпадало с примерами, но вдруг всё же мистическим образом это не правильно и нужно использовать именно 25 МГц?

боттом леер.PNG

мид1 леер.PNG

мид2 леер.PNG

Снимок.PNG

топ леер.PNG

Share this post


Link to post
Share on other sites

Я не вижу ничего неправильного в разводке связей контроллера с sdram на этой плате. Переходные отверствия на этих частотах ни на что не повлияют. Единственно - не вижу блокировочных конденсаторов у памяти по питанию. И неизвестно правильно ли память принципиально подключена к контроллеру. Но что уж точно - вы должны были бы видеть сами сигналы на ножках адресса памяти ну и такты на неё , при любом виде разводки. Сомневаюсь что можно так коряво развести плату чтобы МК не завёлся. Тут уж точно такого нет - это по разводке. 

з.ы.

Давайте схему подключения микроконтроллера и код инициализации частот.

Share this post


Link to post
Share on other sites
3 минуты назад, Lmx2315 сказал:

Я не вижу ничего неправильного в разводке связей контроллера с sdram на этой плате. Переходные отверствия на этих частотах ни на что не повлияют. Единственно - не вижу блокировочных конденсаторов у памяти по питанию. И не известно правильно ли память принципиально подключена к контроллеру.

С блокировочными конденсаторами, по питанию sdram действительно всё не так хорошо, как должно быть. Там есть две штуки 0805 под ней.

Снимок2.PNG

Share this post


Link to post
Share on other sites
14 минут назад, Nowsan сказал:

С блокировочными конденсаторами, по питанию sdram действительно всё не так хорошо, как должно быть. Там есть две штуки 0805 под ней.

Этого достаточно.

Вы когда ногодрыгом проверяли МК убедились что у вас частоты адекватные? 

Share this post


Link to post
Share on other sites
38 minutes ago, Lmx2315 said:

Этого достаточно.

Вы когда ногодрыгом проверяли МК убедились что у вас частоты адекватные? 

Да скорее всего непропай. Шелкография поверх площадок за себя говорит. 

Share this post


Link to post
Share on other sites
31 минуту назад, Lmx2315 сказал:

Этого достаточно.

Вы когда ногодрыгом проверяли МК убедились что у вас частоты адекватные? 

Сейчас решил всё ещё раз проверить и заметил несколько особенностей, которые не заметил ранее. Программа проверки sdram состоит в следующем: всевозможная инициализация, затем каждые две секунды буфер Tx (размер каждого элемента 2 байта) заполняется новыми значениями, потом этот массив отправляется на sdram и тут же считывается обратно в Rx буфер (размер каждого элемента 2 байта). Не знаю как я мерил вчера, но сейчас увидел активность на ножках WE и CS (рис. 1 и 2), правда непонятно почему на ножке CS активность постоянная. В режиме отладки проверил содержимое Rx буфера, и оказалось, что в нём значения равны последнему элементу Tx буфера, но если между записью и  считыванием добавить задержку, скажем, 100 мс (рис. 3), то содержимое Rx буфера по нулям. Насчёт ногодрыга, с ним всё в порядке в плане частот.

Снимок3.PNG

Снимок4.PNG

Снимок5.PNG

13 минут назад, AlexandrY сказал:

Да скорее всего непропай. Шелкография поверх площадок за себя говорит. 

Мультиметром в режиме прозвонки проверил наличие сигнала от ножки МК до ножки sdram, с этим всё в порядке.

Share this post


Link to post
Share on other sites

Вы свою прошивку в рабочем виде видели на отладке какой-нибудь?

Сначала нужно убедиться осцилографом что есть все сигналы на шине и они правильные.

Что есть запись, чтение , рефреши и т.д. 

з.ы.

У вас из приборов только мультиметр и тормозной логический анализатор?

От осцилографа на 200 Мгц было бы больше пользы.

Share this post


Link to post
Share on other sites

Тут много непонятно, начиная со схемы, которую не выложили, может там ошибка. Да разводка никакая с точки зрения правил разводки, но вполне может что то и работать. И таки ничего по вашей проге не написали, как конфигурили, как делители и тд. Для 10 мег тоже нужно все пересчитать правильно, учитывая всю структуру внутренних и наружных интерфейсов. Как то пересчитывал с 25 на 12 мгц, не все так хорошо получилось с Ethrenet10/100.

Share this post


Link to post
Share on other sites
9 минут назад, Aner сказал:

Да разводка никакая с точки зрения правил разводки.

И что же там не так, в этой разводке для частоты на которой может работать контролер sdram от этого мк ?

Плейны питания и земли - есть , блокировочные кондёры на ножках - есть, соединения короткие и прямые.

Микрухи стоят вплотную к друг другу.

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

Share this post


Link to post
Share on other sites

В той разводке все через Ж... , если правила знать или хотябы немного картинок посмореть их семинаров по разводке плат. Да и ТС похоже понимает это.

Share this post


Link to post
Share on other sites
1 час назад, Lmx2315 сказал:

Вы свою прошивку в рабочем виде видели на отладке какой-нибудь?

Сначала нужно убедиться осцилографом что есть все сигналы на шине и они правильные.

Что есть запись, чтение , рефреши и т.д. 

з.ы.

У вас из приборов только мультиметр и тормозной логический анализатор?

От осцилографа на 200 Мгц было бы больше пользы.

В качестве основы я брал код для отладочной платы STM32F769I_EVAL (если у Вас есть на компе CobeMX и все библиотеки обновлены, то этот пример Вы можете найти тут ...\CubeMxRepository\STM32Cube_FW_F7_V1.15.0\Projects\STM32F769I_EVAL\Examples\FMC\FMC_SDRAM). МК на отладочной плате почти такой же как и на моей, только корпус разный. Также на платах разные микросхемы sdram, но, судя по даташитам, тайминги совпадают. Из осциллографов есть только Hantek 6074BC  с полосой пропускания 70 МГц. И то ли у меня руки из одного места, то ли действительно ПО для данного осцилограффа не позволяет нормально снимать и сохранять данные с него для дальнейшего анализа.

Share this post


Link to post
Share on other sites
49 минут назад, Nowsan сказал:

В качестве основы я брал код для отладочной платы STM32F769I_EVAL ..

Я может куда не туда посмотрел конечно, но на STM32F769I_EVAL стоит 32 битная память , а у вас 16 битная и размер страницы разный - вы это учли в прошивке? 

49 минут назад, Nowsan сказал:

Из осциллографов есть только Hantek 6074BC  с полосой пропускания 70 МГц. 

С такой полосой можно смотреть цифровые сигналы частотой примерно до 20 МГц. И длительностью больше 40 нС.

Share this post


Link to post
Share on other sites
6 минут назад, Lmx2315 сказал:

Я может куда не туда посмотрел конечно, но на STM32F769I_EVAL стоит 32 битная память , а у вас 16 битная и размер страницы разный - вы это учли в прошивке? 

Всё верно. На отладочной плате стоит 32-х разрядная sdram, а у меня 16. Да я это учёл. Я использую библиотеку HAL, так что вполне возможно она где-то косячит.

Share this post


Link to post
Share on other sites
6 минут назад, Nowsan сказал:

Всё верно. На отладочной плате стоит 32-х разрядная sdram, а у меня 16. Да я это учёл. Я использую библиотеку HAL, так что вполне возможно она где-то косячит.

Если проверить прошивку негде , то я советую сначала разобраться с сигналами . Убедитесь что они все есть и правильные - для этого нужен осцилограф.

Один раз записать в память что-то простое , 0xffff чередуя c 0x0000 , а потом поставить на последовательное чтение и проверить осцилом что у вас данные считываются.

Share this post


Link to post
Share on other sites
1 минуту назад, Lmx2315 сказал:

Если проверить прошивку не где , то я советую сначала разобраться с сигналами . Убедитесь что они все есть и правильные - для этого нужен осцилограф.

Один раз записать в память что-то простое , 0xffff чередуя c 0x0000 , а потом поставить на последовательное чтение и проверить осцилом что у вас данные считываются.

Спасибо большое за советы, проверю ещё разочек все настройки инициализации, после чего буду искать осцилографф. Будем думать, будем смотреть. Когда (если) решу проблему, обязательно напишу.

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