Easyelectronics.ru

Электроника для всех
Текущее время: 23 окт 2019, 23:31

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



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

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

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

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


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

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

Код:
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
Сообщения: 745
Yoda писал(а):
Через указатель память заполняется, а через секцию sdram и прямой доступ нет.

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

_________________
Потоковая OS


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

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


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

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


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

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


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

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


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

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


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

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


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

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

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


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

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


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


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

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

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

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


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

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


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


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

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


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

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


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

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 63
Откуда: Минск Беларусь
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
Сообщения: 5692
Завтра скину инит. Потерпите.
Ну да что-то зашкалило насчет чехов.
Но секцию здесь добавлять абсолютно не стоит.

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


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

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


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

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 745
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
Сообщения: 1027
Yoda писал(а):
По поводу второго, я не знаю, как объяснить. На каком-то зарубежном сайте видел, что человек указал линкеру, что будет новая секция размером столько-то. Переменные объявляют с директивой указания секции. Это упрощает ведь работу или я не прав?
Всё верно, так и надо делать. Размещать данные в памяти это работа линкера. Единственное условие - инициализировать память надо до инициализации данных, то есть, в SystemInit.


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

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


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

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5692
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
Сообщения: 63
Откуда: Минск Беларусь
Спасибо


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

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


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

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


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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