Easyelectronics.ru

Электроника для всех
Текущее время: 19 ноя 2017, 08:15

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



    • 10 шт. 2-слоя 100*100mm 2$. Быстрый заказ: JLCPCB.com
    • JLCPCB - это крупнейшая фабрика PCB прототипов в Китае.
    • Имеющий более 290,000 клиентов и выполняющий более 8,000 заказов в день.
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: [РЕШЕНО] AT91SAM7SE512 чтение и запись 8и и 16и бит данных
СообщениеДобавлено: 09 июн 2013, 23:30 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1013
Откуда: Германия
День добрый!
Тут проблемка нарисовалась с данным процом и внешней памятью SDRAM.
Схема сделана по аппноту и даташитке к этому процу в конфигурации из двух чипов на 32бит шину данных.

Вроде как запустил на плате этой FreeRTOS. Крутятся три задачие и не падают!.
Программа сама лежит во флеш, а вот данные лежат в SDRAM. Ее инициализирую по аппноту, так как чипы памяти такие же как и в аппноте взял.
Вроде как все работает нормально до того момента, как вставляем SD-MMC Карточку, так как драйвер сей периферии использует не только 32 битные данные, как FreeRTOS, но и 16и и 8и битные данные.
Вот тут начинаются интересности именно с памятью.

Чтение байтов с массива вроде как происходит правильно, а вот запись довольно своеобразно:

Код:
      char * pShortName = new char[ FAT_SHORT_NAME_LEN ];
....
      for( int i = 0; i < FAT_SHORT_NAME_LEN ; i++ )
      {
        volatile char chr = toupper( pShortName[i] ) & 0xFF;
        pShortName[i] = chr;
      }

Казалось бы нормальный код, а на деле , когда пишем в 0й элемент в массив pShortName , то байт записывается в нулевой, но и так же в 4й! Пишем в 1й, пишется в 1й и в 4й!, во 2й - во 2й и 4й! и т.д. Пишем в 4й, пишется в 4й и в 8й! и так далее.
Но как только переходим на 32х битные данные, то все в ажуре, пишется именно в парвильные 4е байта и ни в какие больше. Но постоянно читать, менять, записывать, это надо все драйвера тогда переделывать, которые к этому процу написаны.

Никто с таким не сталкивался? Мож где надо в компиляторе сказать, что бы он там код правильней генерил для 8ми битных данных?

Плата собрана вроде как правильно, все подключено по даташитке, Инициализация так же по даташитке.

Чего то намучено с компилятором в плане доступа к 8ми и 16ти битным данным в 32х битной среде, как мне кажется. Вот только чего?

Заранее спасибо,
Алексей

_________________
Мои поделки
http://www.fun-electronic.net/


Последний раз редактировалось MasterAlexei 10 июн 2013, 15:03, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AT91SAM7SE512 чтение и запись 8и и 16и битных данных в DRAM
СообщениеДобавлено: 10 июн 2013, 08:35 
Заглядывает иногда

Зарегистрирован: 21 фев 2012, 10:14
Сообщения: 63
MasterAlexei писал(а):
День добрый!
Тут проблемка нарисовалась с данным процом и внешней памятью SDRAM.
Схема сделана по аппноту и даташитке к этому процу в конфигурации из двух чипов на 32бит шину данных.

Вроде как запустил на плате этой FreeRTOS. Крутятся три задачие и не падают!.
Программа сама лежит во флеш, а вот данные лежат в SDRAM. Ее инициализирую по аппноту, так как чипы памяти такие же как и в аппноте взял.
Вроде как все работает нормально до того момента, как вставляем SD-MMC Карточку, так как драйвер сей периферии использует не только 32 битные данные, как FreeRTOS, но и 16и и 8и битные данные.
Вот тут начинаются интересности именно с памятью.

Чтение байтов с массива вроде как происходит правильно, а вот запись довольно своеобразно:

Код:
      char * pShortName = new char[ FAT_SHORT_NAME_LEN ];
....
      for( int i = 0; i < FAT_SHORT_NAME_LEN ; i++ )
      {
        volatile char chr = toupper( pShortName[i] ) & 0xFF;
        pShortName[i] = chr;
      }

Казалось бы нормальный код, а на деле , когда пишем в 0й элемент в массив pShortName , то байт записывается в нулевой, но и так же в 4й! Пишем в 1й, пишется в 1й и в 4й!, во 2й - во 2й и 4й! и т.д. Пишем в 4й, пишется в 4й и в 8й! и так далее.
Но как только переходим на 32х битные данные, то все в ажуре, пишется именно в парвильные 4е байта и ни в какие больше. Но постоянно читать, менять, записывать, это надо все драйвера тогда переделывать, которые к этому процу написаны.

Никто с таким не сталкивался? Мож где надо в компиляторе сказать, что бы он там код правильней генерил для 8ми битных данных?

Плата собрана вроде как правильно, все подключено по даташитке, Инициализация так же по даташитке.

Чего то намучено с компилятором в плане доступа к 8ми и 16ти битным данным в 32х битной среде, как мне кажется. Вот только чего?

Заранее спасибо,
Алексей

В ARM7 нет выравнивания памяти в отличие от кортексов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AT91SAM7SE512 чтение и запись 8и и 16и битных данных в DRAM
СообщениеДобавлено: 10 июн 2013, 09:17 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1013
Откуда: Германия
elesy_ural писал(а):
В ARM7 нет выравнивания памяти в отличие от кортексов

Хм. А пацаны-то атмеловцы не знают. Надо им рассказать.
Если бы не было выравнивания, он бы иначе не вываливался при каждом не ровном "чихе" в DataAbortVector, что он делает с завидным постоянством, как только пытаешься считать 32 бит или 16 бит по неровному адресу.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО] AT91SAM7SE512 чтение и запись 8и и 16и бит данных
СообщениеДобавлено: 10 июн 2013, 15:07 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1013
Откуда: Германия
Нашел баг. Забыл переконфигурить пин NBS3, который как раз отвечает за доступ вот такой вот половинчатый. А не целиком слова.

Про DataAbort Vector это не ARM7 виноват, а Memory Controller именно этого проца, который следит за тем, что если доступ 32битный, а последние 2 бита адреса не равны 0, то он вылетает в DataAbort с указанием адреса инструкции и адреса данных, чтобы лучше было ловить ошибки в софте.
Эт мой вольный перевод даташита на 512й, страница 91ю Путнкт 18.4.4, если кому интересно.

Всем спасибо за внимание. Пошел заводить FatFS от Chan'а.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AT91SAM7SE512 чтение и запись 8и и 16и битных данных в DRAM
СообщениеДобавлено: 11 июн 2013, 06:25 
Заглядывает иногда

Зарегистрирован: 21 фев 2012, 10:14
Сообщения: 63
MasterAlexei писал(а):
elesy_ural писал(а):
В ARM7 нет выравнивания памяти в отличие от кортексов

Хм. А пацаны-то атмеловцы не знают. Надо им рассказать.
Если бы не было выравнивания, он бы иначе не вываливался при каждом не ровном "чихе" в DataAbortVector, что он делает с завидным постоянством, как только пытаешься считать 32 бит или 16 бит по неровному адресу.


Тогда приводите полный код и схему, что б не ломать голову


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AT91SAM7SE512 чтение и запись 8и и 16и битных данных в DRAM
СообщениеДобавлено: 11 июн 2013, 09:10 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1013
Откуда: Германия
elesy_ural писал(а):
MasterAlexei писал(а):
elesy_ural писал(а):
В ARM7 нет выравнивания памяти в отличие от кортексов

Хм. А пацаны-то атмеловцы не знают. Надо им рассказать.
Если бы не было выравнивания, он бы иначе не вываливался при каждом не ровном "чихе" в DataAbortVector, что он делает с завидным постоянством, как только пытаешься считать 32 бит или 16 бит по неровному адресу.


Тогда приводите полный код и схему, что б не ломать голову

Я выше написал причину такого поведения проца:
MasterAlexei писал(а):
Про DataAbort Vector это не ARM7 виноват, а Memory Controller именно этого проца, который следит за тем, что если доступ 32битный, а последние 2 бита адреса не равны 0, то он вылетает в DataAbort с указанием адреса инструкции и адреса данных, чтобы лучше было ловить ошибки в софте.
Эт мой вольный перевод даташита на 512й, страница 91. Путнкт 18.4.4, если кому интересно.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

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


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

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


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

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

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