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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> 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
KSN
сообщение Mar 22 2013, 05:16
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Проверьте NVIC - начало таблицы прерываний.
Go to the top of the page
 
+Quote Post
k000858
сообщение Mar 22 2013, 05:27
Сообщение #3


Местный
***

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



Цитата(KSN @ Mar 22 2013, 09:16) *
Проверьте NVIC - начало таблицы прерываний.

вроде как при указании линковщику адреса старта программы в свойствах проекта все делается автоматически?
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
редактор
сообщение Mar 22 2013, 08:21
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Именно что линковщик автоматически переносит код на заданный адрес. А железка по привычке стартует с физически определенного разрабочиком.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
k000858
сообщение Mar 22 2013, 08:40
Сообщение #5


Местный
***

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



Цитата(редактор @ Mar 22 2013, 12:21) *
Именно что линковщик автоматически переносит код на заданный адрес. А железка по привычке стартует с физически определенного разрабочиком.

если я все верно понимаю, необходимо задать в system_stm32f4xx.c
#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */

Если код стартует с 0x08020000, какое задавать смещение? 0x20000?
Go to the top of the page
 
+Quote Post
k000858
сообщение Mar 22 2013, 12:19
Сообщение #6


Местный
***

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



в общем корректное размещение таблицы векторов прерываний проблему не решило. прошивка как и раньше запускается и корректно работает только при отключенном Prefetch Buffer
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 22 2013, 13:41
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



А количество тактов для буфера вы правильно задали? От частоты зависит.
Go to the top of the page
 
+Quote Post
k000858
сообщение Mar 22 2013, 14:02
Сообщение #8


Местный
***

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



Цитата(ViKo @ Mar 22 2013, 17:41) *
А количество тактов для буфера вы правильно задали? От частоты зависит.

если это задается system_stm32f4xx.c, то все по дефолту кроме смещения таблицы векторов прерывания
раз по дефолту Prefetch Buffer там включен, думаю, и остальные настройки, связанные с ним, должны быть корректны

странно, то, что глюк проявляется только если пускать программу не 0x08000000
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 22 2013, 17:07
Сообщение #9


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(k000858 @ Mar 22 2013, 17:02) *
если это задается system_stm32f4xx.c, то все по дефолту кроме смещения таблицы векторов прерывания
раз по дефолту Prefetch Buffer там включен, думаю, и остальные настройки, связанные с ним, должны быть корректны

Я библиотечными функциями не пользуюсь, сам биты в регистрах задаю, водя носом по мануалу. В stm32f4xx.h должна быть задана рабочая частота, в соответствии с которой установится латентность буфера предвыборки.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Mar 22 2013, 18:01
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Где то кто то недавно жаловался, что при смещении адреса, таблица векторов по дефаулту стала создается в RAM, а не во Flesh, в результате то же как то там через раз у него все работало. Подробностей не знаю, читал по диаганали.

Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Mar 22 2013, 19:27
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #13


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

Группа: Свой
Сообщений: 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
adnega
сообщение Mar 25 2013, 15:06
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



В некоторых случаях инициализировать периферию можно не сразу же после установки битов разрешения тактирования, а спустя несколько актов шины. "Шустрая" выборка может сказаться на этом процессе. Хотя, если Вы пользуетесь стандартной библиотекой... в ней этот момент должен быть учтен.
Go to the top of the page
 
+Quote Post
k000858
сообщение Mar 25 2013, 17:17
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 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

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:54
Рейтинг@Mail.ru


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