Jump to content

    
Sign in to follow this  
Salamander

Проблема с записью в sdram.

Recommended Posts

Добрый день.

Настраиваю связку MT48LC4M32B2P-6A + stm32f7

Первоначально память завелась сразу, я написал коротенький код, заполняющий буфер, копирующий из буфера в sdram, а затем читающий из сдрам в другой буфер. Сверил оба буфера, все ОК. И успокоился. После этого я много чего настраивал, менял, возможно поменял что-то, не касающееся сдрам напрямую, но влияющее га ее работу. А может быть и память накрылась

Короче, когда я снова попытался поработать с памятью - данных при чтении не получил. Отладка показала, что генерируется прерывание HardFault на строке, которая пишет в память по определенному адресу.

Скажите, этот факт, он как то может свидетельствовать о том, что проблема га в микросхеме памяти, а в коде или в настройках контроллера? Я к тому, что, насколько я представляю себе принцип работы sdram, у контроллера нет обратной связи с микросхемой при записи, контроллер дрыгает ногами и не получает от микросхемы какого либо подтверждения исполнения. Другими словами, если микросхему вообще выпаять, или если она в силу неисправности не будет отвечать, то к зависанию в микроконтроллере это не приведет, программа после попытки записи двинется дальше, а при чтении получит нули, правильно?

или возможны варианты? Аналогичной микросхемы, чтобы путем перепаивания, проверить, у меня нет, код весь излазил, не пойму в чем причина. 

Edited by Salamander

Share this post


Link to post
Share on other sites
50 minutes ago, Salamander said:

если микросхему вообще выпаять, или если она в силу неисправности не будет отвечать, то к зависанию в микроконтроллере это не приведет, программа после попытки записи двинется дальше, а при чтении получит нули, правильно?

Правильно

Share this post


Link to post
Share on other sites

Возможно физическое повреждение чипа памяти. В частности серия MT имеет очень нежные контакты, +4в уже дохнут. Мой чип памяти на отладке сдох от болтающегося провода дежурки +5в.

2 hours ago, Salamander said:

возможно поменял что-то

Для таких ситуаций существует система контроля версий, откатиться назад - посмотреть изменения. Для программного кода есть несколько бесплатных программ, лично мне нравится черепаха TortoiseHg.

Share this post


Link to post
Share on other sites
7 minutes ago, AVI-crak said:

Возможно физическое повреждение чипа памяти. В частности серия MT имеет очень нежные контакты, +4в уже дохнут. Мой чип памяти на отладке сдох от болтающегося провода дежурки +5в.

И как это приводит к зависанию контррллера? Он ведь, в конечном счете дрыгает ногами. Во время записи обратной информации не получает. Даже ноги свои в режим чтения не переводит.

В общем, наверное я сделаю вот что.... отключу fmc совсем. И попробую записать. Sdram, конечно, в этом случае не будет влиять, но вот другой вопрос  - не свихнется ли контроллер от попытки обратиться по несуществующему адресу?

Share this post


Link to post
Share on other sites
1 hour ago, Salamander said:

Ок, а что тогда может вызывать зависание на, строке

Hard Fault - это не зависание.

 

17 minutes ago, Salamander said:

но вот другой вопрос  - не свихнется ли контроллер от попытки обратиться по несуществующему адресу?

Внезапно, получите тот же Hard Fault.

Share this post


Link to post
Share on other sites

А если не отключать fmc,  но не инициализировать сдрам, будет фаульт?

18 minutes ago, aaarrr said:

Hard Fault - это не зависание.

 

Ну допустим, что может его вызвать?

Share this post


Link to post
Share on other sites
16 minutes ago, Salamander said:

Ну допустим, что может его вызвать?

Например, чтение или запись по запрещённому адресу (запись во флеш микроконтроллера или выполнение кода из IO-памяти). Или обращение по невыровненному адресу.

Тут лучше читать первоисточники.

Share this post


Link to post
Share on other sites
17 minutes ago, haker_fox said:

Или обращение по невыровненному адресу.

А вот с этого момента поподробнее.

Я, кстати, когда все работало, игрался с шириной шины (ставил в настройках 16 бит), с форматом записываемых данных (писал 32 битные данные) и у меня не всегда получалось их потом правильно прочесть. Жаль, не проверял тогда - есть ли hard fault.

Ответьте на ряд вопросов по адресации sdram.

1. Влияет ли как-то ширина шины sdram, на то, как я буду читать из нее данные программным кодом, обращаясь как единому адресному пространству?

Для примера у меня 32 битная сдрам. Начальный адрес 0хc0000000. Я хочу записать 4 байта. Эти 4 байта влезут в одну ячейку памяти, по одному ее физическому адресу. Но в адресное пространство эти байты будут записаны по адресам 0хс000000-0хс0000003, так?

А если я запишу 32 битное слово, то в едином адресном пространстве оно так же будет располагаться по адресам 0-3? А если я захочу прочитать 32 битное слово, которое я раньше записал по адресу 0хс0000000, то контроллер возьмет эти данные из одной ячейки микросхемы сдрам, спроецирует их в адрсное пространство по адресам 0-3, а мне выдаст в виде склеенных четырех байт . 

 

Если у меня 8битная память, то будет то же самое - в едином адресном пространстве по каждому адресу записано 8 бит, а захоти я прочитать или записать несколько 32 битных слов, мне просто нужно обращаться к адресам, кратным 4м?

 

Просто скажите, правильно ли я понял механизм?

10 minutes ago, golf2109 said:

какому адресу расположенo начало SDRAM?   C0000000?  ее размер?

0xc0000000, размер памяти 1м х 32 х 4 банка

ГУИ тут ни при чем, он не установлен, я ручками пишу и читаю.

Еще вопрос - особо волнует - в настройках сдрам можно выбрать ширину 32 бит. При этом есть еще одна опция byte enable. Она можеть быть отключена, может быть равна не только 32 бита, но и 16 бит? Как это понимать?

Share this post


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

Я, кстати, когда все работало, игрался с шириной шины (ставил в настройках 16 бит)

Зачем??? Вы не знаете как у Вас чип SDRAM подключен?? :wacko2:  Может стоит лучше найти принципиальную схему и посмотреть на неё, а не "играться"?

16 минут назад, Salamander сказал:

Если у меня 8битная память, то будет то же самое - в едином адресном пространстве по каждому адресу записано 8 бит, а захоти я прочитать или записать несколько 32 битных слов, мне просто нужно обращаться к адресам, кратным 4м?

Если всё проинициализировано правильно, то обращаться можете ровно также как к внутренней ОЗУ.

16 минут назад, Salamander сказал:

Еще вопрос - особо волнует - в настройках сдрам можно выбрать ширину 32 бит. При этом есть еще одна опция byte enable. Она можеть быть отключена, может быть равна не только 32 бита, но и 16 бит? Как это понимать?

Не понятно о каких настройках речь. Видимо о калокубовских. Тогда скорей всего мануал на FMC даже не открывали. :prankster2:

Советую открыть и прочитать - многое станет ясно.  

1 час назад, Salamander сказал:

А если не отключать fmc,  но не инициализировать сдрам, будет фаульт?

Ну допустим, что может его вызвать?

Видимо опять-же нужно открыть мануал на ядро и прочитать описание регистров, описывающих причину fault-а.

Share this post


Link to post
Share on other sites
41 minutes ago, jcxz said:

Зачем??? Вы не знаете как у Вас чип SDRAM подключен?? :wacko2:  Может стоит лучше найти принципиальную схему и посмотреть на неё, а не "играться"

Так принципиальную схему я и разрабатывал. У меня 32 бита. Все подключены. Когда спаял плату, корректно прочесть данные не получилось. Я достал из ящика плату дискавери. Посмотрел схему. На схеме 32 битная микросхема, у которой задействовано лишь 16 линий данных, остальные резистором притянуты к земле кажется. И в кубе пример для этой платы тоже настроен на 16 бит.

Сделал я проект, попробовал пописать в память на плате - ура, работает. Взял свою 32 битную плату, внушил ей, что на ней 16 битная память - ура, работает. Разбирательства почему у меня не работало на 32 битах, я оставил на потом. "Потом" настало вчера, но, как указано в начале темы,  я или что-то ковырнул, не подумав или спалил микросхему. О чем собственно и спросил, создав тему, мол может ли возникать хардфаульт при неисправной микросхеме. Из двух возможных вариантов ответа в теме прозвучало два.

Edited by Salamander

Share this post


Link to post
Share on other sites
10 minutes ago, Salamander said:

может ли возникать хардфаульт при неисправной микросхеме

При простом чтении-записи не может, ищите проблемы в софте.

Share this post


Link to post
Share on other sites
2 hours ago, Salamander said:

А вот с этого момента поподробнее.

Здесь перечислены команды, которые допускают невыровненный доступ. Остальные команды доступа к памяти вызовут UsageFault, который будет эскалирован до HardFault. Это при условии, что USageFault не включен.

2 hours ago, Salamander said:

Влияет ли как-то ширина шины sdram,

Не влияет. Вы конфигурируете EMC в соответствии со схемой подключения памяти.

2 hours ago, Salamander said:

оно так же будет располагаться по адресам 0-3?

Конечно, другого не дано.

2 hours ago, Salamander said:

несколько 32 битных слов, мне просто нужно обращаться к адресам, кратным 4м?

Если вы используете высокоуровневый язык (Си и т.п.), то вас нюансы железа уже не должны заботить. Компилятор сгенерирует нужные команды, а ЕМС, при условии, что он правильно настроен, доделает всю работу.

1 hour ago, Salamander said:

создав тему, мол может ли возникать хардфаульт при неисправной микросхеме.

Я думаю, что при неисправном железе, может быть всё, что угодно... Например, вы в памяти можете хранить адрес переменной (указатель в Си). И если микросхема вам выдала битый указатель, и МК пытается считать данные с Марса, то конечно возникнет хардфолт.

1 hour ago, aaarrr said:

При простом чтении-записи не может, ищите проблемы в софте.

+1. Правда мы не знаем, как автор тестирует свою микросхему.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this