Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-дек-16 17:51

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: 2017-ноя-16 10:08 
Не в сети

Зарегистрирован: 2015-сен-10 10:29
Сообщения: 16
Здравствуйте, пытаюсь наладить взаимодействие флэшки K1636РР2У с контроллером 1986ВЕ1Т. Контроллер переведен в 8-ми битный режим. При взаимодействии с флэшкой на внешней шине, контроллер считывает информцию с шины данных только с адресов кратных 4, по остальным адрессам читает 0x00, хотя на шине данные есть. В чем может быть дело? Спасибо.


Пример:
*( (volatile unsigned char*) (0xA0000000) ) = (0xAA)
val =*( (volatile unsigned char*) (0xA0000000) )
Получим val = 0xAA


*( (volatile unsigned char*) (0xA0000001) ) = (0xBB)
val =*( (volatile unsigned char*) (0xA0000001) )
Получим val = 0x00


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-ноя-20 12:22 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 49
Откуда: ПКК "Миландр"
1. Как произведено включение линий адреса?
МК: MEM:
А0 - A0
А1 - A1
.....

2. ВЕ[] не подключены?

3. EXT_BUS_CONTROL: LOW8 = 1, LOW16 = 0 ?

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-ноя-20 14:16 
Не в сети

Зарегистрирован: 2015-сен-10 10:29
Сообщения: 16
Vasiliy писал(а):
1. Как произведено включение линий адреса?
МК: MEM:
А0 - A0
А1 - A1
.....

2. ВЕ[] не подключены?

3. EXT_BUS_CONTROL: LOW8 = 1, LOW16 = 0 ?


1.
МК: МЕМ:
A0 - A0
A1 - A1
........
AN - AN

2. BE не подключены.

3. Да LOW8 =1, LOW16 = 0.
EBC_InitStruct.EBC_DataAlignment = EBC_EBC_DATA_ALIGNMENT_8;

П.С. Кстати, запись по не кратным 4-м адресм, проходит нормально. Данные на шине выставляются правильные, проблема наблюдается именно при чтении шины данных.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-ноя-24 12:40 
Не в сети

Зарегистрирован: 2015-сен-10 10:29
Сообщения: 16
Господа-товарищи, есть какие-нибудь идеи и предложения?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-ноя-27 11:24 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 49
Откуда: ПКК "Миландр"
Проверил работу шины на плате расширения с 4-мя 1636РР1У. Это отдельная плата которая вставляется в мезонинный разъем на демо-плате 1986ВЕ1Т.
В архиве лежат схемотехнические файлы, чтобы сверить включение микросхем, и проект который записывает 4-ре тестовых 32-разрядных значения.
Эти значения считываются различными способами, в том числе проверяется побайтовое считывание с одной из микросхем.

Данный модуль памяти подключается МК.А2 к мем.А0, поэтому адреса в МК инкрементируются по +4, что для внешней памяти дает байтовый доступ +1.
Вариант с включением МК.А0 к мем.А0, пока проверить не на чем.

Но выставляя при считывании адрес нечетным в TestBus_D8() возвращаются те-же значения байтов, т.е. не кратные 4 адреса не возвращают нули:
arr[i] = *( (volatile uint8_t*) (EXTBUS_ADDR + i * 4 + 1) );
возвращает тоже, что и
arr[i] = *( (volatile uint8_t*) (EXTBUS_ADDR + i * 4) );

То-есть, на мой взгляд, вариант с МК.А0 к мем.А0 тоже будет работать. О чем есть утверждения на форуме.

Надеюсь прилагаемая информация как-то поможет.


Вложения:
Комментарий к файлу: Тест внешней шины
ExtBusD8_Test.zip [205.64 КБ]
Скачиваний: 9

_________________
Отдел технической поддержки support@milandr.ru
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-дек-05 11:42 
Не в сети

Зарегистрирован: 2015-сен-10 10:29
Сообщения: 16
Спасибо, за ответы. Причина обнаружена. Оказалось просто не срабатывает такое определение выравнивания:
EBC_InitStruct.EBC_DataAlignment = EBC_EBC_DATA_ALIGNMENT_8;
МК стал работать в нормальном 8-ми битном режиме, если инициировать режим так:
EBC_InitStruct.EBC_Mode = EBC_MODE_RAM | EBC_EBC_DATA_ALIGNMENT_8;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-дек-07 18:05 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 49
Откуда: ПКК "Миландр"
Странно, поле EBC_InitStruct->EBC_DataAlignment внутри EBC_Init() как раз примешивается к другим флагам, вместе с EBC_InitStruct->EBC_Mode. Все это уходит в регистр MDR_EBC->CONTROL.

Но должно быть выставлено определение USE_MDR1986VE1T, которое в паке выставляется автоматически с выбором микроконтроллера. Иначе его необходимо указать в опциях проекта в закладке C++ в поле Define.

_________________
Отдел технической поддержки support@milandr.ru


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

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


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

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


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB