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

 
 
> STM32F407IG, Prefetch Buffer
k000858
сообщение Mar 22 2013, 04:24
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



описываю траблу:
Обновил в проекте библиотеки CMSIS до 1.1.0, в которых включен Prefetch Buffer, после чего откомпилированная прога стала странно себя вести: загружаться через раз и работать с глюками.
Особенность проекта в том, что он запускается с 0x08020000 флэша (адрес указан линковщику в свойствах проекта), собирается в Keil'е. При выключении в system_stm32f4xx.c Prefetch Buffer (комментим FLASH_ACR_PRFTEN |) все работает как часы (как и до обновления библиотек).
так же хотелось бы отметить, что при запуске проекта с 0x08000000 и включенном Prefetch Buffer все работает. глюки наблюдаются только если прога запускается не с начала флэш

С чем это может быть связано?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
HHIMERA
сообщение Mar 22 2013, 19:27
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(k000858 @ Mar 22 2013, 08:24) *
описываю траблу:

А что говорит errata???
Go to the top of the page
 
+Quote Post
k000858
сообщение Mar 25 2013, 12:39
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(HHIMERA @ Mar 22 2013, 23:27) *
А что говорит errata???

в документе http://www.st.com/st-web-ui/static/active/.../DM00037591.pdf по ключевому слову Prefetch Buffer ничего не найдено

Цитата(ViKo @ Mar 22 2013, 21:07) *
Я библиотечными функциями не пользуюсь, сам биты в регистрах задаю, водя носом по мануалу. В stm32f4xx.h должна быть задана рабочая частота, в соответствии с которой установится латентность буфера предвыборки.

в system_stm32f4xx.c настраиваются все частоты
думаю, тут так же все должно быть корректно. ведь когда прога запущена с 0x08000000 все ок.

CODE
* 5. This file configures the system clock as follows:
*==========================================================================
===
*==========================================================================
===
* Supported STM32F40xx/41xx/427x/437x devices
*-----------------------------------------------------------------------------
* System Clock source | PLL (HSE)
*-----------------------------------------------------------------------------
* SYSCLK(Hz) | 168000000
*-----------------------------------------------------------------------------
* HCLK(Hz) | 168000000
*-----------------------------------------------------------------------------
* AHB Prescaler | 1
*-----------------------------------------------------------------------------
* APB1 Prescaler | 4
*-----------------------------------------------------------------------------
* APB2 Prescaler | 2
*-----------------------------------------------------------------------------
* HSE Frequency(Hz) | 25000000
*-----------------------------------------------------------------------------
* PLL_M | 25
*-----------------------------------------------------------------------------
* PLL_N | 336
*-----------------------------------------------------------------------------
* PLL_P | 2
*-----------------------------------------------------------------------------
* PLL_Q | 7
*-----------------------------------------------------------------------------
* PLLI2S_N | NA
*-----------------------------------------------------------------------------
* PLLI2S_R | NA
*-----------------------------------------------------------------------------
* I2S input clock | NA
*-----------------------------------------------------------------------------
* VDD(V) | 3.3
*-----------------------------------------------------------------------------
* Main regulator output voltage | Scale1 mode
*-----------------------------------------------------------------------------
* Flash Latency(WS) | 5
*-----------------------------------------------------------------------------
* Prefetch Buffer | ON
*-----------------------------------------------------------------------------
* Instruction cache | ON
*-----------------------------------------------------------------------------
* Data cache | ON
*-----------------------------------------------------------------------------
* Require 48MHz for USB OTG FS, | Disabled
* SDIO and RNG clock |
*-----------------------------------------------------------------------------


Сообщение отредактировал IgorKossak - Mar 25 2013, 15:27
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 25 2013, 14:58
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(k000858 @ Mar 25 2013, 18:39) *
в документе http://www.st.com/st-web-ui/static/active/.../DM00037591.pdf по ключевому слову Prefetch Buffer ничего не найдено

А просто по Prefetch есть вот что:
Цитата
2.1.1 ART Accelerator prefetch queue instruction is not supported
Description
The ART Accelerator prefetch queue instruction is not supported on revision A devices.
This limitation does not prevent the ART Accelerator from using the cache enable/disable
capability and the selection of the number of wait states according to the system frequency.
Workaround
  • Revision A devices: none
  • Revision Z devices: fixed.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
k000858
сообщение Mar 25 2013, 17:17
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(AHTOXA @ Mar 25 2013, 18:58) *
А просто по Prefetch есть вот что:

на чипе написано
STM32
F457IGH6
HPAEZ VG
KOR ES 125

STM32 ST-LINK Utility показывает rev B


Цитата(adnega @ Mar 25 2013, 19:06) *
В некоторых случаях инициализировать периферию можно не сразу же после установки битов разрешения тактирования, а спустя несколько актов шины. "Шустрая" выборка может сказаться на этом процессе. Хотя, если Вы пользуетесь стандартной библиотекой... в ней этот момент должен быть учтен.

в том то и фишка, пользуюсь стандартными либами, в которых ничего не менял
и ведь все работает если прогу запустить с 0x08000000
а если залить через IAP загрузчик у 0x08020000 к примеру - сразу глюк!

при том, если Prefetch Buffer не включать, и точно так же залить в 0x08020000 - все идеально
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- k000858   STM32F407IG, Prefetch Buffer   Mar 22 2013, 04:24
- - KSN   Проверьте NVIC - начало таблицы прерываний.   Mar 22 2013, 05:16
|- - k000858   Цитата(KSN @ Mar 22 2013, 09:16) Проверьт...   Mar 22 2013, 05:27
- - редактор   Именно что линковщик автоматически переносит код н...   Mar 22 2013, 08:21
|- - k000858   Цитата(редактор @ Mar 22 2013, 12:21) Име...   Mar 22 2013, 08:40
- - k000858   в общем корректное размещение таблицы векторов пре...   Mar 22 2013, 12:19
- - ViKo   А количество тактов для буфера вы правильно задали...   Mar 22 2013, 13:41
|- - k000858   Цитата(ViKo @ Mar 22 2013, 17:41) А колич...   Mar 22 2013, 14:02
|- - ViKo   Цитата(k000858 @ Mar 22 2013, 17:02) если...   Mar 22 2013, 17:07
|- - vlad_new   Где то кто то недавно жаловался, что при смещении ...   Mar 22 2013, 18:01
- - adnega   В некоторых случаях инициализировать периферию мож...   Mar 25 2013, 15:06
- - _andru_   Столкнулся с похоже проблемой. Контроллер STM32F20...   Oct 9 2013, 12:25
- - _andru_   Отключение Prefetch Buffer не дало положительного ...   Oct 9 2013, 16:13


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:20
Рейтинг@Mail.ru


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