10.09.2013, 11:16
|
|
Прохожий
Регистрация: 23.12.2008
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Большое спасибо!!! Буду ждать с нетерпением.
|
|
|
|
12.09.2013, 15:07
|
|
Прохожий
Регистрация: 12.09.2013
Сообщений: 5
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Разбираюсь с stm32F407(168МГц) + FSMC(8bit) + ssd1963(WF57BTIBCDC#000). Возник вопрос: а эта связка вообще должна работать? В даташите на ssd1963 указано, что для режима 8080 (впрочем как и для 6800) защелкивание данных происходит по сигналу CS, т.е. CS должен быть вложен в сигнал WR! В даташите на stm32 /FSMC (да и по стандарту 8080) все наоборот: защелкивание по заднему фронту WR и WR вложен в CS. Подозреваю что таймингом для FSMC такое реализовать невозможно (NWE всегда будет вложен в NE1)??
Запрограммировал FSMC - индикатор не дышит (сигналы проверил осциллографом). Реализовал запись дата/код через пины - индикатор что то стал отображать (цвет по крайне мере меняется, хотя изображение плывет).
Просьба к "realid" указать тактовые частоты для своей STM, настройки пинов и какие нибудь, примитивные функции записи чего либо на экран.
|
|
|
|
12.09.2013, 15:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Периферии до лампочки, какой сигнал вложен, можно вообще один из них (cs или wr/rd) навсегда посадить на землю, и все будет работать. Все тайминги в даташите, и если импульсы не короче минимальных, то все работает
|
|
|
|
12.09.2013, 16:07
|
|
Прохожий
Регистрация: 12.09.2013
Сообщений: 5
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
В том то и дело, что в даташите на SSD1963 четко оговорено минимальное время между фронтами WR и CS - мин 1нс (напоминаю CS вложен в WR).
Если есть возможность выложите код настройки FSMC и SSD1963 (с указанием индикатора).
И еще вопрос, насколько критично питание индикатора. Я питаю индикатор от stm32f4-discovery (должно выдаваться 3.0В) на индикатор доходит 2.88. По даташиту на индикатор мин. 3.0, хотя для SSD1963 1.65V to 3.6V?
|
|
|
|
12.09.2013, 20:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Сообщение от pav256
|
четко оговорено минимальное время между фронтами WR и CS - мин 1нс (напоминаю CS вложен в WR).
|
Ещё раз посмотрите на диаграмму и переведите названия параметров. Address Setup/Hold Time - время, через которое чип начинает реагировать на остальные сигналы после спада на CS и в течении которого он ЕЩЁ реагирует после фронта на CS. Реально только в течении Hold Time нужно удерживать D/C и данные, RW может наступить в любой момент (хоть это и не отмечено на диаграмме). Запись произойдет по фронту CS _ИЛИ_ RW - какой наступит раньше...
У меня SSD1289 и ILI9320, это то же самое
Настройки FSMC под максимальную скорость
FSMC_Bank1-›BTCR[0] = 0x000010D8; //for 168 MHz
FSMC_Bank1-›BTCR[1] = 0x10110F10;
FSMC_Bank1-›BTCR[0] = 0x000010D9;
На дискавери-4 нормально работает от родного стабилизатора
|
|
|
|
12.09.2013, 21:04
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Сообщение от niXto
|
FSMC_Bank1-›BTCR[0] = 0x000010D8; //for 168 MHz
FSMC_Bank1-›BTCR[1] = 0x10110F10;
FSMC_Bank1-›BTCR[0] = 0x000010D9;
|
Это что, привычка от АлгоритмзаБулдыгера?
|
|
|
|
12.09.2013, 21:21
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Сообщение от niXto
|
FSMC_Bank1-›BTCR[0] = 0x000010D8; //for 168 MHz
FSMC_Bank1-›BTCR[1] = 0x10110F10;
FSMC_Bank1-›BTCR[0] = 0x000010D9;
|
Весьма информативно, можно еще в двоичной или восьмеричной записи .
Хедер stm32f4xx.h для лохов писан
Код:
|
typedef struct
{
__IO uint32_t BTCR[8]; /*!‹ NOR/PSRAM chip-select control register(BCR) and chip-select timing register(BTR), Address offset: 0x00-1C */
} FSMC_Bank1_TypeDef;
/**
* @brief Flexible Static Memory Controller Bank1E
*/
typedef struct
{
__IO uint32_t BWTR[7]; /*!‹ NOR/PSRAM write timing registers, Address offset: 0x104-0x11C */
} FSMC_Bank1E_TypeDef;
/**
* @brief Flexible Static Memory Controller Bank2
*/
typedef struct
{
__IO uint32_t PCR2; /*!‹ NAND Flash control register 2, Address offset: 0x60 */
__IO uint32_t SR2; /*!‹ NAND Flash FIFO status and interrupt register 2, Address offset: 0x64 */
__IO uint32_t PMEM2; /*!‹ NAND Flash Common memory space timing register 2, Address offset: 0x68 */
__IO uint32_t PATT2; /*!‹ NAND Flash Attribute memory space timing register 2, Address offset: 0x6C */
uint32_t RESERVED0; /*!‹ Reserved, 0x70 */
__IO uint32_t ECCR2; /*!‹ NAND Flash ECC result registers 2, Address offset: 0x74 */
} FSMC_Bank2_TypeDef;
....
/************************************************** ****************************/
/* */
/* Flexible Static Memory Controller */
/* */
/************************************************** ****************************/
/****************** Bit definition for FSMC_BCR1 register *******************/
#define FSMC_BCR1_MBKEN ((uint32_t)0x00000001) /*!‹Memory bank enable bit */
#define FSMC_BCR1_MUXEN ((uint32_t)0x00000002) /*!‹Address/data multiplexing enable bit */
#define FSMC_BCR1_MTYP ((uint32_t)0x0000000C) /*!‹MTYP[1:0] bits (Memory type) */
#define FSMC_BCR1_MTYP_0 ((uint32_t)0x00000004) /*!‹Bit 0 */
#define FSMC_BCR1_MTYP_1 ((uint32_t)0x00000008) /*!‹Bit 1 */
#define FSMC_BCR1_MWID ((uint32_t)0x00000030) /*!‹MWID[1:0] bits (Memory data bus width) */
#define FSMC_BCR1_MWID_0 ((uint32_t)0x00000010) /*!‹Bit 0 */
#define FSMC_BCR1_MWID_1 ((uint32_t)0x00000020) /*!‹Bit 1 */
#define FSMC_BCR1_FACCEN ((uint32_t)0x00000040) /*!‹Flash access enable */
#define FSMC_BCR1_BURSTEN ((uint32_t)0x00000100) /*!‹Burst enable bit */
#define FSMC_BCR1_WAITPOL ((uint32_t)0x00000200) /*!‹Wait signal polarity bit */
#define FSMC_BCR1_WRAPMOD ((uint32_t)0x00000400) /*!‹Wrapped burst mode support */
#define FSMC_BCR1_WAITCFG ((uint32_t)0x00000800) /*!‹Wait timing configuration */
#define FSMC_BCR1_WREN ((uint32_t)0x00001000) /*!‹Write enable bit */
#define FSMC_BCR1_WAITEN ((uint32_t)0x00002000) /*!‹Wait enable bit */
#define FSMC_BCR1_EXTMOD ((uint32_t)0x00004000) /*!‹Extended mode enable */
#define FSMC_BCR1_ASYNCWAIT ((uint32_t)0x00008000) /*!‹Asynchronous wait */
#define FSMC_BCR1_CBURSTRW ((uint32_t)0x00080000) /*!‹Write burst enable */ |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 12.09.2013 в 21:31.
|
|
|
|
12.09.2013, 22:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Время поджимало, не было возможности копи-пастом оформлять все исходники красиво. А потом так и осталось, когда заработало
Сейчас сделаю в своих исходниках покрасивей
Спасибо за замечание
|
|
|
|
13.09.2013, 11:10
|
|
Прохожий
Регистрация: 12.09.2013
Сообщений: 5
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Спасибо всем, связка "stm32 + FSMC + ssd1963" заработала.
Некоторые советы, основанные на личном опыте:
1. При запуске FSMC устанавливайте ВСЕ тайминги по мах (или с большим запасом), после того как индикатор заработает подбирайте минимальные. У меня к, примеру, индикатор подключен длинным шлейфом (~30см), к тому же через колодки, поэтому тайминги оказались больше чем все нарытые в интернете (FSMC_AddressSetupTime = 6; FSMC_AddressHoldTime = 1; FSMC_DataSetupTime = 15). Уверен на опытном образце тайминги уменьшатся.
2. Главное. В даташите "WINSTAR_TFT Application Note a-Si TFT for SSD1963 Controller" не корректно описана(написана) инициализация этих индикаторов. В частности отсутствует задержка на стабилизацию PLL, что может приводить к неверной дальнейшей инициализации индикатора. Привожу свою, рабочую, версию (для сравнения, закомментированный код из даташита) инициализации SSD1963:
Код:
|
//инициализация TFT WF67BTIBCDC#000 controller SSD1963
void instal_SSD1953(void)
{
CLR_RESET
delay(1000); //задержка в мкс
SET_RESET
delay(1000); //задержка в мкс
TFT_WR_CMD(CMD_SOFT_RESET)
delay(10000); //задержка в мкс
TFT_WR_CMD(CMD_SET_PLL_MN) //SET PLL freq=113.33MHz ;
TFT_WR_DATA(0x22)
TFT_WR_DATA(0x03)
TFT_WR_DATA(0x04)
TFT_WR_COMMAND(CMD_PLL_START, 0x01) //START PLL
delay(50000); //задержка в мкс
TFT_WR_COMMAND(CMD_PLL_START, 0x03) //LOCK PLL
TFT_WR_CMD(CMD_SET_PANEL_MODE) //SET TFT MODE SET TFT 18Bits MODE
TFT_WR_DATA(0x0C) //SET TFT MODE & hsync+Vsync+DEN MODE
TFT_WR_DATA(0x00) //SET TFT MODE & hsync+Vsync+DEN MODE
TFT_WR_DATA(0x01) //SET horizontal size=320-1 HightByte
TFT_WR_DATA(0x3f) //SET horizontal size=320-1 LowByte
TFT_WR_DATA(0x00) //SET vertical size=240-1 HightByte
TFT_WR_DATA(0xef) //SET vertical size=240-1 LowByte
TFT_WR_DATA(0x00) //SET even/odd line RGB seq.=RGB
TFT_WR_COMMAND(CMD_SET_DATA_INTERFACE, 0x00) // SET pixel data I/F format=8bit
TFT_WR_COMMAND(CMD_SET_PIXEL_FORMAT, 0x60) // SET R G B format = 6 6 6
/*
//в соответствии с "WINSTAR_TFT Application Note a-Si TFT for SSD1963 Controller"
TFT_WR_CMD(CMD_SOFT_RESET)
TFT_WR_CMD(CMD_SOFT_RESET)
TFT_WR_CMD(CMD_SOFT_RESET)
TFT_WR_COMMAND(CMD_PLL_START, 0x01) //START PLL
TFT_WR_COMMAND(CMD_PLL_START, 0x03) //LOCK PLL
TFT_WR_CMD(CMD_SET_PANEL_MODE) //SET TFT MODE SET TFT 18Bits MODE
TFT_WR_DATA(0x0C) //SET TFT MODE & hsync+Vsync+DEN MODE
TFT_WR_DATA(0x00) //SET TFT MODE & hsync+Vsync+DEN MODE
TFT_WR_DATA(0x01) //SET horizontal size=320-1 HightByte
TFT_WR_DATA(0x3f) //SET horizontal size=320-1 LowByte
TFT_WR_DATA(0x00) //SET vertical size=240-1 HightByte
TFT_WR_DATA(0xef) //SET vertical size=240-1 LowByte
TFT_WR_DATA(0x00) //SET even/odd line RGB seq.=RGB
TFT_WR_COMMAND(CMD_SET_DATA_INTERFACE, 0x00) //SET pixel data I/F format=8bit
TFT_WR_COMMAND(CMD_SET_PIXEL_FORMAT, 0x60) // SET R G B format = 6 6 6
TFT_WR_CMD(CMD_SET_PLL_MN) //SET PLL freq=113.33MHz ;
TFT_WR_DATA(0x22)
TFT_WR_DATA(0x03)
TFT_WR_DATA(0x04)
*/
TFT_WR_CMD(CMD_SET_PCLK) //SET PCLK freq=9MHz ; pixel clock frequency
TFT_WR_DATA(0x00)
TFT_WR_DATA(0xe7)
TFT_WR_DATA(0x4f)
TFT_WR_CMD(CMD_SET_HOR_PERIOD) //SET HBP
TFT_WR_DATA(0x01) //SET HSYNC Total = 440
TFT_WR_DATA(0xb8)
TFT_WR_DATA(0x00) //SET HBP = 68
TFT_WR_DATA(0x44)
TFT_WR_DATA(0x0f) //SET VBP 16 = 15 + 1
TFT_WR_DATA(0x00) //SET Hsync pulse start position
TFT_WR_DATA(0x00)
TFT_WR_DATA(0x00) //SET Hsync pulse subpixel start position
TFT_WR_CMD(CMD_SET_VER_PERIOD) //SET VBP
TFT_WR_DATA(0x01) //SET Vsync total 265 = 264 + 1
TFT_WR_DATA(0x08)
TFT_WR_DATA(0x00) //SET VBP = 19
TFT_WR_DATA(0x13)
TFT_WR_DATA(0x07) //SET Vsync pulse 8 = 7 + 1
TFT_WR_DATA(0x00) //SET Vsync pulse start position
TFT_WR_DATA(0x00)
TFT_WR_CMD(CMD_SET_COLUMN) //SET column address
TFT_WR_DATA(0x00) //SET start column address=0
TFT_WR_DATA(0x00)
TFT_WR_DATA(0x01) //SET end column address=320
TFT_WR_DATA(0x3f)
TFT_WR_CMD(CMD_SET_PAGE) //SET page address
TFT_WR_DATA(0x00) //SET start page address=0
TFT_WR_DATA(0x00)
TFT_WR_DATA(0x00) //SET end page address=240
TFT_WR_DATA(0xef)
TFT_WR_CMD(CMD_ON_DISPLAY) //SET display on
TFT_WR_CMD(CMD_WR_MEMSTART)
return;
} |
|
|
|
|
17.09.2013, 08:28
|
|
Прохожий
Регистрация: 23.12.2008
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Доброго всем дня.Облазил все форумы, но решения пока так и не нашел.Все еще нужен
демо-проектик STM32F4Discovery+SSD1963 в кокосе.
Помогите кто-нибудь! Готов оплатить проект.
Последний раз редактировалось KGA-1; 23.09.2013 в 09:13.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:47.
|
|