реклама на сайте
подробности

 
 
> STM342F4 и FSMC, эксплуатация
__inline__
сообщение Jun 27 2018, 07:47
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126



Использую отладочную плату STM32F4Discovery (контроллер STM32F407) и LCD, подключенный по FSMC (дисплей от телефона Sony Ericsson K800i).

Обмен данными с дисплеем идёт нормально до частоты процессора 112 МГц.

Стоит поднять частоту до 168 МГц - при записи в видеопамять дисплея возникают сбои: неправильная запись данных или декодирует их как команды (при этом дисплею окончательно сносит крышу). Пробовал выставлять разные Address_Setup, Data_Setup - не помогло.

Обнаружил, если снизить частоту тактирования на линию порта GPIO D7 - это !CS LCD до 2 МГц, или подсоединить этот вывод через резистор 820 Ом (с меньшими значениями не игрался), то всё работает корректно. Причём, дисплей заводится на сверх-быстрых времянках!

В принципиальной схеме на телефон на каждой линии "дисплей-процессор" стоит конденсатор 33 пФ на землю.

Дисплей соединён с отладочной платой "макаронами" длиной 10 см. На шине больше ничего кроме дисплея нет.

Какие причины столь странного поведения? От чего без резистора на линии !CS дисплей глючит?

Код настройки GPIO и FSMC ниже(работает):

CODE
void GPIO(void)
{
GPIO_InitTypeDef gpio;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_
GPIOE,ENABLE);

//LCD
GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC); // D0
GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC); // D1
GPIO_PinAFConfig(GPIOD,GPIO_PinSource0 ,GPIO_AF_FSMC); // D2
GPIO_PinAFConfig(GPIOD,GPIO_PinSource1 ,GPIO_AF_FSMC); // D3
GPIO_PinAFConfig(GPIOE,GPIO_PinSource7 ,GPIO_AF_FSMC); // D4
GPIO_PinAFConfig(GPIOE,GPIO_PinSource8 ,GPIO_AF_FSMC); // D5
GPIO_PinAFConfig(GPIOE,GPIO_PinSource9 ,GPIO_AF_FSMC); // D6
GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC); // D7
GPIO_PinAFConfig(GPIOD,GPIO_PinSource11,GPIO_AF_FSMC); //A16 => RS
GPIO_PinAFConfig(GPIOD,GPIO_PinSource7 ,GPIO_AF_FSMC); //NE1 => CS !!! ВОСПРИИМЧИВ К ПОМЕХАМ !!! РЕЗИСТОР ИЛИ ПОНИЗИТЬ ЧАСТОТУ GPIO D7
GPIO_PinAFConfig(GPIOD,GPIO_PinSource4 ,GPIO_AF_FSMC); //NOE => RD
GPIO_PinAFConfig(GPIOD,GPIO_PinSource5 ,GPIO_AF_FSMC); //NWE => WR

gpio.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_11
|GPIO_Pin_14|GPIO_Pin_15;
gpio.GPIO_Mode=GPIO_Mode_AF;
gpio.GPIO_Speed=GPIO_Speed_100MHz;
gpio.GPIO_OType=GPIO_OType_PP;
gpio.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD,&gpio);

gpio.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
gpio.GPIO_Mode=GPIO_Mode_AF;
gpio.GPIO_Speed=GPIO_Speed_100MHz;
gpio.GPIO_OType=GPIO_OType_PP;
gpio.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOE,&gpio);

//LCD !RST B11
gpio.GPIO_Pin=GPIO_Pin_11;
gpio.GPIO_Mode=GPIO_Mode_OUT;
gpio.GPIO_Speed=GPIO_Speed_2MHz;
gpio.GPIO_OType=GPIO_OType_PP;
gpio.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB,&gpio);

//LCD WSYNC B3
gpio.GPIO_Pin=GPIO_Pin_3;
gpio.GPIO_Mode=GPIO_Mode_IN;
gpio.GPIO_Speed=GPIO_Speed_2MHz;
gpio.GPIO_OType=GPIO_OType_PP;
gpio.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB,&gpio);

//LED TEST D12
gpio.GPIO_Pin=GPIO_Pin_12;
gpio.GPIO_Mode=GPIO_Mode_OUT;
gpio.GPIO_Speed=GPIO_Speed_2MHz;
gpio.GPIO_OType=GPIO_OType_PP;
gpio.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD,&gpio);
}

void FSMC(void) //!!! HCLK=168 MHz
{
FSMC_NORSRAMTimingInitTypeDef fsmcTimingRead,fsmcTimingWrite;
FSMC_NORSRAMInitTypeDef fsmc;

RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);

fsmcTimingRead.FSMC_AddressSetupTime=1; //!!!
fsmcTimingRead.FSMC_AddressHoldTime=0;

fsmcTimingRead.FSMC_DataSetupTime=13; //RD

fsmcTimingRead.FSMC_BusTurnAroundDuration=0;
fsmcTimingRead.FSMC_CLKDivision=0;
fsmcTimingRead.FSMC_DataLatency=0;
fsmcTimingRead.FSMC_AccessMode=FSMC_AccessMode_A;

memcpy(&fsmcTimingWrite,&fsmcTimingRead,sizeof(fsmcTimingRead));

fsmcTimingWrite.FSMC_DataSetupTime=2; //WR

fsmc.FSMC_Bank=FSMC_Bank1_NORSRAM1;
fsmc.FSMC_DataAddressMux=FSMC_DataAddressMux_Disable;
fsmc.FSMC_MemoryType=FSMC_MemoryType_SRAM;
fsmc.FSMC_MemoryDataWidth=FSMC_MemoryDataWidth_8b;
fsmc.FSMC_BurstAccessMode=FSMC_BurstAccessMode_Disable;
fsmc.FSMC_WaitSignalPolarity=FSMC_WaitSignalPolarity_Low;
fsmc.FSMC_WrapMode=FSMC_WrapMode_Disable;
fsmc.FSMC_WaitSignalActive=FSMC_WaitSignalActive_BeforeWaitState;
fsmc.FSMC_WriteOperation=FSMC_WriteOperation_Enable;
fsmc.FSMC_WaitSignal=FSMC_WaitSignal_Disable;
fsmc.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
fsmc.FSMC_ExtendedMode=FSMC_ExtendedMode_Enable; //For Different Read & Write Timings !!!
fsmc.FSMC_WriteBurst=FSMC_WriteBurst_Disable;

fsmc.FSMC_ReadWriteTimingStruct=&fsmcTimingRead;
fsmc.FSMC_WriteTimingStruct=&fsmcTimingWrite;

FSMC_NORSRAMInit(&fsmc);
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1,ENABLE);
}


Сообщение отредактировал IgorKossak - Jun 29 2018, 11:34
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
__inline__
сообщение Jul 5 2018, 11:04
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126



Обнаружил, что я не одинок, глюк присутствует ещё у одного товарища: https://community.st.com/thread/49249-stm32...spurious-writes

Цитата
A single uint16_t write under 0x68000000 address results in 4 writes to memory, out of which first write is valid data, and rest are 0, as seen on logic analyser snapshot.

Прикрепленное изображение


Вот первый блин комом как говорится. santa2.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- __inline__   STM342F4 и FSMC   Jun 27 2018, 07:47
- - ViKo   Глючит от отражений в линии. Спасают резисторы пос...   Jun 27 2018, 08:03
|- - __inline__   Цитата(ViKo @ Jun 27 2018, 09:03) Глючит ...   Jun 27 2018, 12:12
- - k155la3   Надо посмотреть по док. на дисплей, выдерживаются ...   Jun 27 2018, 08:54
- - ViKo   Тогда нужно нарисовать на бумаге временную диаграм...   Jun 27 2018, 12:20
|- - __inline__   Цитата(ViKo @ Jun 27 2018, 13:20) Тогда н...   Jun 27 2018, 13:27
- - ViKo   По моему, шину нужно 8-битовой определить. А посыл...   Jun 27 2018, 14:10
|- - __inline__   Цитата(ViKo @ Jun 27 2018, 15:10) По моем...   Jun 28 2018, 00:41
|- - VladislavS   Цитата(__inline__ @ Jun 28 2018, 03:41) И...   Jun 28 2018, 04:15
- - ViKo   Дергается на каждый байт. Как для обычных 8 битовы...   Jun 28 2018, 05:38
|- - VladislavS   Цитата(ViKo @ Jun 28 2018, 08:38) Дергает...   Jun 28 2018, 06:54
|- - __inline__   Цитата(VladislavS @ Jun 28 2018, 06:54) Е...   Jun 28 2018, 11:27
|- - VladislavS   Цитата(__inline__ @ Jun 28 2018, 14:27) С...   Jun 28 2018, 12:02
|- - jcxz   Цитата(VladislavS @ Jun 28 2018, 15:02) п...   Jun 28 2018, 22:27
|- - VladislavS   Цитата(jcxz @ Jun 29 2018, 01:27) А зачем...   Jun 29 2018, 01:58
|- - jcxz   Цитата(VladislavS @ Jun 29 2018, 04:58) Н...   Jun 29 2018, 04:41
- - __inline__   Ещё проделал эксперимент. Устройство на шине одно...   Jun 28 2018, 06:13
- - ViKo   Адресом разделяйте.   Jun 28 2018, 06:20
- - __inline__   Разобрался с быстрым копированием по 128 байт за р...   Jul 1 2018, 14:07
- - __inline__   Дисплей активно работает по FSMC, сбоев не замечен...   Jul 2 2018, 09:59
- - __inline__   Подключил дисплей к Nucleo-144 STM32H743. Переста...   Jul 3 2018, 14:10
- - k155la3   Поосторожнее с "касанием пинцетом". Смен...   Jul 3 2018, 15:28
|- - __inline__   Цитата(k155la3 @ Jul 3 2018, 15:28) Поост...   Jul 4 2018, 07:30
- - k155la3   Я не полагался бы так стопроцентно на HAL куба. Ск...   Jul 5 2018, 04:05
|- - __inline__   Цитата(k155la3 @ Jul 5 2018, 04:05) Я не ...   Jul 5 2018, 07:12
|- - jcxz   Цитата(__inline__ @ Jul 5 2018, 14:04) Об...   Jul 5 2018, 11:18
|- - __inline__   Цитата(jcxz @ Jul 5 2018, 11:18) И что ха...   Jul 5 2018, 12:55
|- - jcxz   Цитата(__inline__ @ Jul 5 2018, 15:55) Ну...   Jul 5 2018, 14:50
- - __inline__   Вопрос по поводу кеша возник не случайно. Так как ...   Jul 5 2018, 16:50
- - __inline__   Всё просто замечательно! Подключил дисплей...   Jul 6 2018, 10:11
|- - jcxz   Цитата(__inline__ @ Jul 6 2018, 13:11) Ви...   Jul 6 2018, 12:18
|- - __inline__   Цитата(jcxz @ Jul 6 2018, 13:18) При FPS=...   Jul 6 2018, 12:24
|- - jcxz   Цитата(__inline__ @ Jul 6 2018, 15:24) 24...   Jul 6 2018, 12:29
|- - __inline__   Цитата(jcxz @ Jul 6 2018, 13:29) Я это по...   Jul 6 2018, 13:26
|- - jcxz   Цитата(__inline__ @ Jul 6 2018, 16:26) Та...   Jul 6 2018, 16:37
|- - __inline__   Цитата(jcxz @ Jul 6 2018, 17:37) 320*240/...   Jul 7 2018, 04:10
|- - jcxz   Цитата(__inline__ @ Jul 7 2018, 07:10) 2 ...   Jul 7 2018, 06:35
|- - __inline__   Цитата(jcxz @ Jul 7 2018, 07:35) Я понима...   Jul 7 2018, 06:47
|- - jcxz   Цитата(__inline__ @ Jul 7 2018, 09:47) То...   Jul 7 2018, 06:56
|- - __inline__   Цитата(jcxz @ Jul 7 2018, 07:56) Туннель ...   Jul 7 2018, 07:10
- - __inline__   Собственно, что мы затеваем: http://vrtp.ru/index....   Jul 9 2018, 09:37


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 22:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01558 секунд с 7
ELECTRONIX ©2004-2016