реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32F746 и внешняя SRAM, ошибка при чтении
Sagittarius
сообщение Mar 2 2017, 13:50
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Здравствуйте.

Возникла непонятная ситуация. Проц STM32F746, к нему подключено внешнее статическое ОЗУ, 16 бит данных. Скелет программы сгенерен в CubeMX, кеш на команды и данные отключен.
Тест простой - сначала пишу во внешнюю RAM 12 штук 32-бит слов (используя memcpy) потом читаю в цикле по одному uint32_t. В зависимости от наличия, частоты и длительности прерываний (простой таймер и инкрементом переменной во внутреннем ОЗУ), паузы между записью и чтением, уровнем оптимизации кода при компиляции иногда происходит сбой - циклов записи на внешней шине всегда 12 а вот циклов чтения иногда проскакивает только 11 (отсутствует выдача сигналов CS и OE). Судя по всему аппаратура проца пропускает первый запрос на чтение, при этом результатом самого чтения оказывается значение, которое последним записывалось во внешнюю RAM (продублированные последние записываемые 16 бит). В зависимости от каких то шаманских действий частота сбоев может быть от 1-2 в секунду до 1-го за 7-8 часов. Пробовал собирать проект в IAR и Keil. Может будут у кого какие мысли по этому поводу?

Спасибо.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 2 2017, 14:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 628
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Sagittarius @ Mar 2 2017, 16:50) *
Судя по всему аппаратура проца пропускает первый запрос на чтение, при этом результатом самого чтения оказывается значение, которое последним записывалось во внешнюю RAM (продублированные последние записываемые 16 бит). В зависимости от каких то шаманских действий частота сбоев может быть от 1-2 в секунду до 1-го за 7-8 часов.

Почему "сбой"? Это же фича - кеширование, нет?
Go to the top of the page
 
+Quote Post
Sagittarius
сообщение Mar 2 2017, 14:15
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Цитата(scifi @ Mar 2 2017, 17:07) *
Почему "сбой"? Это же фича - кеширование, нет?


1. кеширование отключено
2. чтение происходит ошибочно, если, к примеру, последним в адрес base[11] было записано число 0x1234xxxx то выполненное сразу после этого чтение по адресу base[0] выдаст 0x12341234, хотя по этому адресу лежит совсем другое значение (по останову в отладчике читается правильное). При этом сам цикл чтения на шине будет отсутствовать.
т.е. бага не просто в отсутствии цикла чтения на шине а в ошибочном результате самого чтения.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 2 2017, 14:20
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 628
Регистрация: 7-02-07
Пользователь №: 25 136



В еррате на STM32F42x есть вот такое:
Цитата
Corruption of data read from the FMC

Description

When the FMC is used as stack, heap or variable data, an interrupt occurring during a CPU
read access to the FMC may results in read data corruption or hard fault exception. This
problem does not occur when read accesses are performed by another master or when
FMC accesses are done when the interrupts are disabled.

Workaround

Two workarounds can be applied:
• Do not use the FMC as stack or heap, and make sure CPU read accesses to the FMC
are performed while interrupts are disabled
• Use only DMAs to perform read accesses to the FMC.
This limitation is present only in revision “A” devices. It is fixed in revision “Y”, “1” and “3”.

Теоретически могли по запарке перетащить в новый кристалл старую багу. Ну или новую багу сделали.
Go to the top of the page
 
+Quote Post
Sagittarius
сообщение Mar 2 2017, 14:25
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Цитата(scifi @ Mar 2 2017, 17:20) *
В еррате на STM32F42x есть вот такое:
Теоретически могли по запарке перетащить в новый кристалл старую багу. Ну или новую багу сделали.

О, спасибо! Коллега рядом как раз на подобное наткнулся, когда другая бага переехала из F4xx в F7xx, была в еррате на 4xx но отсутствовала в еррате на 7xx.
Действительно, если прерывания запрещать то все читается нормально.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 2 2017, 16:12
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 704
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



О! Тогда сразу видно, с какой версии кристалла можно его применять. rolleyes.gif
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Mar 2 2017, 16:17
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 16-10-15
Пользователь №: 88 894



В полях mpu для внешней памяти включить совместное использование. Тогда шина будет принудительно морозить cpu и dma на операциях чтения/записи до завершения цикла.
Актуально для М4-7.
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 14 2017, 08:21
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 200
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Здравствуйте! Раз уж разговор о памяти, чтоб не плодить тем, задам вопрос здесть, если можно. Для платки STM32F746-DISCOVERY пытаюсь сосдать проект в Keil5. Использую мастер. При линковке получил ошибку:
Код
.\Objects\F7dyscovery.axf: Error: L6982E: AT section glcd_746g_discovery.o(.ARM.__AT_0xC0000000) with base 0xc0000000 limit 0xc003fc00 overlaps address range with AT section lcdconf.o(.ARM.__AT_0xC0000000) with base 0xc0000000 limit 0xc005fa00.
Not enough information to list image symbols.
. Понятно, что связано с памятью. Что-то не так. Прошу подсказать. Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 14 2017, 09:20
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 201
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(smk @ Mar 14 2017, 10:21) *
Понятно, что связано с памятью. Что-то не так. Прошу подсказать. Спасибо.

Вероятно у Вас заданы две секции с одинаковым абсолютным адресом 0xc0000000. О чём и говорит компоновщик.
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 14 2017, 10:48
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 200
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Да. Два конфига одновременно.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th April 2017 - 18:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01432 секунд с 7
ELECTRONIX ©2004-2016