Easyelectronics.ru

Электроника для всех
Текущее время: 24 сен 2020, 07:01

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 20:39 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 175
Откуда: Минск Беларусь
dosikus_2 писал(а):
Инит тактовой мой или свой прикрутили?

Я взял полностью ваш проект и закоментил всё про дисплей. Остальное не трогал. Через указатель память заполняется, а через секцию sdram и прямой доступ нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 20:53 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5883
О каком доступе " поуказателям" и "прямом доступе" речь?

Код:
for(i = SDRAM_BASE; i < SDRAM_BASE +(240*320)*2; i +=2)
      *(uint16_t *)i = LCD_COLOR_GREEN ;

Здесь 16битный доступ ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 20:56 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 832
Yoda писал(а):
Через указатель память заполняется, а через секцию sdram и прямой доступ нет.

Ну так посмотри, где находится первое чтение/запись в область sdram. Если таковое имеется до инициализации интерфейса - то это и является причиной сбоя.

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 20:59 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 175
Откуда: Минск Беларусь
Совсем ничего не понимаю. Ведь я явно указал линкеру, что хочу сделать буфер в области sdram. Дальше я ведь могу работать с этим буфером, как с буфером в обычной памяти? Так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 21:01 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5883
И я не понимаю зачем линкер дергать , если и так все работает. Достаточно лишь писать/читать начиная с базового адреса SDRAM.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 21:18 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 175
Откуда: Минск Беларусь
Так, если можно так сделать, то ведь удобнее, чем каждый раз обращаться к памяти через указатель. Не пойму почему, но ваш архив работает. У меня же в кеиле, нету функции начальной инициализации частоты. Поэтому я написал свою и вот с ней, файлы отсюда http://en.radzio.dxp.pl/stm32f429idiscovery/sdram.html не работают.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 21:30 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5883
Через какой указатель еще раз спрашиваю?
У меня прямой доступ, но доступ как к слову а не байту. Инит тактовой завтра выложу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 21:39 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Проверьте адреса в секции линкера. Я на память не помню в каком банке сидит СДРАМ на плате. Но сверьтесь с документацией! Установите адреса именно того банка, на котором сидит СДРАМ.
Потому как я сам наблюдал такой глюк, когда обращаешься по адресам не из того банка, сдрам работает очень странно, часть данных записывается, а часть - нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 21:46 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 175
Откуда: Минск Беларусь
dosikus_2 писал(а):
Через какой указатель еще раз спрашиваю?
У меня прямой доступ, но доступ как к слову а не байту. Инит тактовой завтра выложу.
Попробуйте у себя в программе создать массив 1024х1024 слова. Вам линкер ругнётся, что нету места в секции IRAM1. И обращаться к памяти в вашем проекте нужно через указатели. Вы сами пример привели, где цикл по два байта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 21:49 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 175
Откуда: Минск Беларусь
BusMaster писал(а):
Проверьте адреса в секции линкера. Я на память не помню в каком банке сидит СДРАМ на плате. Но сверьтесь с документацией! Установите адреса именно того банка, на котором сидит СДРАМ.
Потому как я сам наблюдал такой глюк, когда обращаешься по адресам не из того банка, сдрам работает очень странно, часть данных записывается, а часть - нет.

На дискавери плате память сидит на шестом банке. Начальный адрес 0xD0000000. Конечный адрес 0xD07FFFFF.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 21:54 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5883
Yoda писал(а):
dosikus_2 писал(а):
Через какой указатель еще раз спрашиваю?
У меня прямой доступ, но доступ как к слову а не байту. Инит тактовой завтра выложу.
Попробуйте у себя в программе создать массив 1024х1024 слова. Вам линкер ругнётся, что нету места в секции IRAM1. И обращаться к памяти в вашем проекте нужно через указатели. Вы сами пример привели, где цикл по два байта.


Зачем мне создавать массив который однозначно не влезет в SDRAM ? Зачем вы говорите что там обращение по указателю если там всего навсего обращение к слову (16бит) . Вы не знаете Си и не умеете считать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 21:55 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5883
Yoda писал(а):
BusMaster писал(а):
Проверьте адреса в секции линкера. Я на память не помню в каком банке сидит СДРАМ на плате. Но сверьтесь с документацией! Установите адреса именно того банка, на котором сидит СДРАМ.
Потому как я сам наблюдал такой глюк, когда обращаешься по адресам не из того банка, сдрам работает очень странно, часть данных записывается, а часть - нет.

На дискавери плате память сидит на шестом банке. Начальный адрес 0xD0000000. Конечный адрес 0xD07FFFFF.

0xC0000000 в примере чехов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 22:05 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 175
Откуда: Минск Беларусь
dosikus_2 писал(а):
Yoda писал(а):
dosikus_2 писал(а):
Через какой указатель еще раз спрашиваю?
У меня прямой доступ, но доступ как к слову а не байту. Инит тактовой завтра выложу.
Попробуйте у себя в программе создать массив 1024х1024 слова. Вам линкер ругнётся, что нету места в секции IRAM1. И обращаться к памяти в вашем проекте нужно через указатели. Вы сами пример привели, где цикл по два байта.


Зачем мне создавать массив который однозначно не влезет в SDRAM ? Зачем вы говорите что там обращение по указателю если там всего навсего обращение к слову (16бит) . Вы не знаете Си и не умеете считать?


Массив 2 мегабайта, память 8 мегабайт. Почему не влезет? По поводу второго, я не знаю, как объяснить. На каком-то зарубежном сайте видел, что человек указал линкеру, что будет новая секция размером столько-то. Переменные объявляют с директивой указания секции. Это упрощает ведь работу или я не прав?

Цитата:
0xC0000000 в примере чехов.
Кто такие чехи?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 22:12 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5883
1024*1024*16=16 777 216
Работа с SDRAM в моем примере с сайта чехов. Ссылку уже давал ранее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 22:19 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 175
Откуда: Минск Беларусь
dosikus_2 писал(а):
1024*1024*16=16 777 216
Работа с SDRAM в моем примере с сайта чехов. Ссылку уже давал ранее.
Если вы имеете в виду, тот синий сайт, то он польский и там адрес 0xD0000000. Вы посчитали в битах. В байтах получается 2 мегабайта. А память на плате стоит 8.

А по поводу проблемы моей - похоже всё дело в инициализации тактовой частоты контроллера. Я создал пустой проект, добавил свою инициализацию и те файлы с синего сайта. Память не работает вообще.

Вот чуть дополненная моя инициализация контроллера. Всё делал по даташиту. Пробовал и на 180 и на 168 - без разницы.

Код:
RCC->CR |= RCC_CR_HSEON; // start up HSE
   while((RCC->CR & RCC_CR_HSERDY) == 0) {}; // wait for HSE 1 flag
   
    RCC->APB1ENR |= RCC_APB1ENR_PWREN; // Select regulator voltage output Scale 1 mode
    PWR->CR |= PWR_CR_VOS;
      
   FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;
      
   RCC->CR &= ~RCC_CR_PLLON; // switch OFF pll
   while(RCC->CR & RCC_CR_PLLRDY) {}; // wait for PLL 0
      
   RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE; // select HSE for PLL clock source

      
      
   RCC->PLLCFGR &= ~RCC_PLLCFGR_PLLM; // clear PLLM
   RCC->PLLCFGR |= 8UL; // set PLLM = 8
      
   RCC->PLLCFGR &= ~RCC_PLLCFGR_PLLN; // clear PLLN
   RCC->PLLCFGR |= 336UL << 6; // set PLLN = 360
      
   RCC->PLLCFGR &= ~RCC_PLLCFGR_PLLP; // clear PLLP = 2

      
   RCC->PLLCFGR &= ~RCC_PLLCFGR_PLLQ; // clear PLLQ
   RCC->PLLCFGR |= 8UL << 24; // set PLLQ = 8 ???
   
      
      
   RCC->CFGR &= ~RCC_CFGR_PPRE2; // clear PPRE2
   RCC->CFGR |= 4UL << 13; // DIV2 set APB2ENR to 90 mHz
      
   RCC->CFGR &= ~RCC_CFGR_PPRE1; // clear PPRE1
   RCC->CFGR |= 5UL << 10; // DIV4 set APB1ENR to 45 mHz
   
   RCC->CFGR &= ~RCC_CFGR_HPRE; // clear HPRE -> 180 mHz
   //RCC->CFGR |= 8UL << 4; // DIV2 set AHB3ENR to 90 mHz
   
   RCC->CR |= RCC_CR_PLLON; // PLL ON
   while((RCC->CR & RCC_CR_PLLRDY) == 0) {}; // wait for PLL 1
   
      
   // overdrive
    PWR->CR |= PWR_CR_ODEN;
    while((PWR->CSR & PWR_CSR_ODRDY) == 0) {}
    PWR->CR |= PWR_CR_ODSWEN;
    while((PWR->CSR & PWR_CSR_ODSWRDY) == 0) {}
      
      
      
   RCC->CFGR &= ~RCC_CFGR_SW; // clear system clock source
   RCC->CFGR |= 2UL; // set PLL for system clock source

   while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL) {}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 22:27 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5883
Завтра скину инит. Потерпите.
Ну да что-то зашкалило насчет чехов.
Но секцию здесь добавлять абсолютно не стоит.

Хотя весь инит в system _stmxxx что в папке ST.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 16 сен 2019, 22:32 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 175
Откуда: Минск Беларусь
Я попробовал взять всю инициализацию из вашего проекта. Память, как не работала, так и не работает. Не знаю, что это просто мистика. Наверное, остаётся взять ваш проект за основу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 17 сен 2019, 01:33 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 832
Yoda писал(а):
Не знаю, что это просто мистика.

Ну так заведи себе черепаху https://tortoisehg.bitbucket.io
Ресурсов и денег не жрёт, историю помнит и умеет обрабатывать, дружит с бесплатным публичным хостингом https://bitbucket.org. И главное - никакой самодеятельности - исключительно ручное управление.
Если в проекте изменилась одна буква или символ на десятки/сотни страниц - то черепаха найдёт и покажет место и время.

И ещё.
Код:
RCC->CFGR &= ~RCC_CFGR_SW; // clear system clock source

RCC_CFGR_SW равен нулю, следовательно вся логическая операция не имеет смысла. Это простая ошибка, и если я её заметил - значится нечто подобное там в обилии.

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 17 сен 2019, 09:39 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1550
Yoda писал(а):
По поводу второго, я не знаю, как объяснить. На каком-то зарубежном сайте видел, что человек указал линкеру, что будет новая секция размером столько-то. Переменные объявляют с директивой указания секции. Это упрощает ведь работу или я не прав?
Всё верно, так и надо делать. Размещать данные в памяти это работа линкера. Единственное условие - инициализировать память надо до инициализации данных, то есть, в SystemInit.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 17 сен 2019, 10:46 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 175
Откуда: Минск Беларусь
AVI-crak писал(а):
И ещё.
Код:
RCC->CFGR &= ~RCC_CFGR_SW; // clear system clock source

RCC_CFGR_SW равен нулю, следовательно вся логическая операция не имеет смысла. Это простая ошибка, и если я её заметил - значится нечто подобное там в обилии.

Не знаю, чему у вас там равен этот дефайн, но у меня он равен 3. И применяя логическое И и инверсию, а очищаю биты 0 и 1 регистра RCC->CFGR.
Код:
#define  RCC_CFGR_SW                         ((uint32_t)0x00000003)        /*!< SW[1:0] bits (System clock Switch) */


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 17 сен 2019, 10:49 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 175
Откуда: Минск Беларусь
VladislavS писал(а):
Yoda писал(а):
По поводу второго, я не знаю, как объяснить. На каком-то зарубежном сайте видел, что человек указал линкеру, что будет новая секция размером столько-то. Переменные объявляют с директивой указания секции. Это упрощает ведь работу или я не прав?
Всё верно, так и надо делать. Размещать данные в памяти это работа линкера. Единственное условие - инициализировать память надо до инициализации данных, то есть, в SystemInit.
Ну вот, а dosikus_2 никак не мог понять, что я хочу от программы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 17 сен 2019, 11:27 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5883
Yoda писал(а):
Ну вот, а dosikus_2 никак не мог понять, что я хочу от программы.


Ну да, ибо читал по диагонали. У тебя SDRAM под данные а по дефолту SDRAM отведена под видео буферы , почему и не понял зачем ее линкеру на растерзание отдавать...

Держи , настройка тактовой http://mcu.goodboard.ru/viewtopic.php?id=11
создание проекта http://mcu.goodboard.ru/viewtopic.php?id=15


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 17 сен 2019, 12:02 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 175
Откуда: Минск Беларусь
Спасибо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 17 сен 2019, 15:29 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1550
Yoda писал(а):
Не знаю, чему у вас там равен этот дефайн, но у меня он равен 3. И применяя логическое И и инверсию, а очищаю биты 0 и 1 регистра RCC->CFGR.
Нельзя так делать. Очищая биты и записывая их в CFGR ты меняешь источник тактирования на какой-то промежуточный, а он может быть недоступен. Надо одним действием и очищать, и устанавливать биты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: И снова STM32 + SDRAM
СообщениеДобавлено: 17 сен 2019, 19:04 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 175
Откуда: Минск Беларусь
VladislavS писал(а):
Yoda писал(а):
Не знаю, чему у вас там равен этот дефайн, но у меня он равен 3. И применяя логическое И и инверсию, а очищаю биты 0 и 1 регистра RCC->CFGR.
Нельзя так делать. Очищая биты и записывая их в CFGR ты меняешь источник тактирования на какой-то промежуточный, а он может быть недоступен. Надо одним действием и очищать, и устанавливать биты.
В данном случае значение битов SW изначально равно нулю. Можно было даже не очищать их. Ошибкой это не считаю. Лучше скажите что-нибудь по теме, а не придирайтесь к мелочам.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу Пред.  1, 2, 3  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Minoru


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB