Easyelectronics.ru

Электроника для всех
Текущее время: 22 окт 2021, 11:36

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



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

Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: STM32F0 USB/CAN SRAM 8-битная запись
СообщениеДобавлено: 26 апр 2017, 17:53 
Только пришел

Зарегистрирован: 26 апр 2017, 17:19
Сообщения: 5
Здравствуйте. Разбираюсь с USB на STM32F042F6P6 и столкнулся с проблемой.
Вот код:
Код:
USART_WriteHEX(USB_DeviceDescriptor8, DEVICE_DESCRIPTOR_SIZE_BYTE);  //вывод в терминал дескриптора
for (i = 0; i < DEVICE_DESCRIPTOR_SIZE_BYTE; i++){                                 //Запись дескриптора в USB SRAM
   *(uint8_t *)(0x40006180 + i) = USB_DeviceDescriptor8[i];
}
USART_WriteHEX((uint8_t *)0x40006180, DEVICE_DESCRIPTOR_SIZE_BYTE);  //Вывод содержимого USB SRAM

Код функции USART_WriteHEX под спойлером.
Show

В терминале вижу это:
Вложение:
1.JPG
1.JPG [ 10.18 Кб | Просмотров: 929 ]

Видно, что каждый 2й байт затирает предыдущий.
Теперь пишу так:
Код:
USART_WriteHEX(USB_DeviceDescriptor16, DEVICE_DESCRIPTOR_SIZE_BYTE);  //вывод в терминал дескриптора
for (i = 0; i < DEVICE_DESCRIPTOR_SIZE_BYTE / 2; i++){                                 //Запись дескриптора в USB SRAM
   *(uint16_t *)(0x40006180 + i*2) = USB_DeviceDescriptor16[i];
}
USART_WriteHEX((uint8_t *)0x40006180, DEVICE_DESCRIPTOR_SIZE_BYTE);  //Вывод содержимого USB SRAM

Изменилась только запись (пишу по 16 бит). Вывод терминала:
Вложение:
2.JPG
2.JPG [ 10.41 Кб | Просмотров: 929 ]

Записалось и прочиталось правильно.
Чтобы удостовериться в правильности записи 1 варианта, изменяю адрес на любой в SRAM
Код:
USART_WriteHEX(USB_DeviceDescriptor8, DEVICE_DESCRIPTOR_SIZE_BYTE);  //вывод в терминал дескриптора
for (i = 0; i < DEVICE_DESCRIPTOR_SIZE_BYTE; i++){                                 //Запись дескриптора в SRAM
   *(uint8_t *)(0x20000180 + i) = USB_DeviceDescriptor8[i];
}
USART_WriteHEX((uint8_t *)0x20000180, DEVICE_DESCRIPTOR_SIZE_BYTE);  //Вывод содержимого SRAM

Вложение:
3.JPG
3.JPG [ 10.01 Кб | Просмотров: 929 ]

Все правильно.
В референсе пункт 30.6.2 написано:
Цитата:
The first packet memory location is located at 0x4000 6000. The buffer descriptor table entry associated with the USB_EPnR registers is described below. The packet memory should be accessed only by byte (8-bit) or half-word (16-bit) accesses. Word (32-bit) accesses are not allowed.

То есть 8 битный доступ разрешен. В чем может быть проблема?


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


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


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

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


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

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

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