Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

SST25VF016B
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10156
Страница 1 от 3

Автор:  eddiesoft [ Вто Май 22, 2012 7:11 pm ]
Заглавие:  SST25VF016B

Здравейте, опитвам се да пиша и съответно да чета тази SPI Falsh със STM32. Всичко останало работи, но има някакъв проблем с тази памет и не мога да разбера в инициализацията ли бъркам или къде.
Това ми е инициализацията на пиновете за SPI1
//инциализация пиновете за флаша ------------------------------------------------------------------------------------------
//SCK - PA5 ; MSIO - PA6 ; MOSI - PA7
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_5 | GPIO_Pin_7;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//CS - PA4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_4); //SPI CS
//--------------------------------------------------------------------------------------------------------------------------
а това ми е инициализацията на SPI
void SPI1_Init(void)
{

DeSelect_Flash();

SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 , ENABLE);

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_SSOutputCmd(SPI1,ENABLE);
SPI_Cmd(SPI1, ENABLE);


}

Опитвам се да запиша един байт и да го прочета и не става. Някой ако може да даде някаква идея - бирата му е в кърка вързана

Автор:  fan [ Вто Май 22, 2012 7:57 pm ]
Заглавие:  Re: SST25VF016B

Здравей! А ти клоковете на портовете и AFIO пускаш ли? Конфигурира ли и самите алтернативни пинове(ремапване)?
Това ли ти е целия код за конфигуриране?

Автор:  Zdrav [ Вто Май 22, 2012 9:50 pm ]
Заглавие:  Re: SST25VF016B

Едно от нещата, които понякога се пропускат е че има период от време след power up, през който устройствата не са достъпни или не изпълняват коректно командите.
Сложи един таймаут в кода си веднага след reset на процесора и преди да си пуснал първия байт по SPI към SST25VF016B. Виж "Power-Up Specifications" в datasheet-а на SST25VF016B.

Автор:  eddiesoft [ Вто Май 22, 2012 10:19 pm ]
Заглавие:  Re: SST25VF016B

Клоковете са пуснати. Има още няколко периферни устройства които си работят нормално. Вярно, че не са на SPI1, но работят нормално...
А таймаута след вдигане а захранването го имам. А и дори да го няма - има тфт дисплей, на който се рисува лого, седи известно време и тогава вече започва работа всичко останало.
Някакви други идеи?

Автор:  fan [ Вто Май 22, 2012 10:30 pm ]
Заглавие:  Re: SST25VF016B

@ zdrav Да, точно! Пък то понякога трябва и човек(визирам себе си) да погледне и в кода на питащия за да открие проблема, а последния да чете повечко документацията и примерите! :)

-For alternate function inputs, the port must be configured in Input mode
(floating, pullup or pull-down) and the input pin must be driven externally.

-For alternate function outputs, the port must be configured in Alternate Function Output
mode (Push-Pull or Open-Drain).

-For bidirectional Alternate Functions, the port bit must be configured in Alternate
Function Output mode (Push-Pull or Open-Drain). In this case the input driver is
configured in input floating mode

Нещо от рода на:
Код:
  /* Configure SPI1 pins: SCK, MISO and MOSI ---------------------------------*/
  /* Confugure SCK and MOSI pins as Alternate Function Push Pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  /* Confugure MISO pin as Input Floating  */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

Автор:  eddiesoft [ Вто Май 22, 2012 10:37 pm ]
Заглавие:  Re: SST25VF016B

И това да го направа вход съм го пробвал, нищо, че не намерих пример в който да е така конфигуриран, но и това съм го пробвал. И това не е ключа за палатката...

Автор:  fan [ Вто Май 22, 2012 10:41 pm ]
Заглавие:  Re: SST25VF016B

Примери има колкото щеш по въпроса, погледни ги в стандартната STM32F1x библиотека.
Проблема е при теб, но къде точно вече си е хардуерно-софтуерна загатка на предклавиатурното устройство, прегледай внимателно и какво и как си навързал?! :)

Автор:  eddiesoft [ Вто Май 22, 2012 11:06 pm ]
Заглавие:  Re: SST25VF016B

То е ясно, че проблема е някъде в задклавиатурното устройство. Всичко е навързано правилно. На всички пинове (вход, изход, клок, чип селект) на флашчето с осцилоскопа се виждат видимо нормални импулси. Вярно, че нямам логик анализатор да ги видя какво е....

Автор:  fan [ Вто Май 22, 2012 11:12 pm ]
Заглавие:  Re: SST25VF016B

Ами след инициализацията следва логиката на писане и четене, там как е? Направи ли си функциите и последователността?

Автор:  eddiesoft [ Вто Май 22, 2012 11:36 pm ]
Заглавие:  Re: SST25VF016B

Ами и тях няколко пъти ги писах. И от примери готови вземах и пак съм на същата начална позиция

Автор:  Zdrav [ Сря Май 23, 2012 6:20 am ]
Заглавие:  Re: SST25VF016B

Не съм проверявал точно какво правиш в инициализацията, но ето още един вариант:
Преди време имах проблем с SPI на STM32F103. Всичко тръгна когато ремапнах, сигнали от други периферии, които споделяха пиновете с SPI. Ремапнах ги настрани от пиновете на SPI. Или може и да бъркам, може би просто използвах другия комплект пинове за SPI, които не бяха споделени с други периферии. Все още бях на ниво експериментална платка и имах такава възможност.
Има описани подобни фийчъри в ератата.

Автор:  fan [ Чет Май 24, 2012 12:55 pm ]
Заглавие:  Re: SST25VF016B

... да още една грешка:
Код:
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;

трябва да е:
Код:
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;


Иначе ако искаш тази настройка да остане трябва да промениш:
Код:
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;


на:
Код:
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;


Правих преди време библиотека точно за този чип - за PIC18 и с леки корекции за MSP430. Сега я преправих за STM32L.
Работи с горепосочените настройки.

Автор:  eddiesoft [ Нед Май 27, 2012 6:28 pm ]
Заглавие:  Re: SST25VF016B

И това не оправи ситуацията....
Пробвах и четирите комбинации за всеки случай. Дигах и прескалера (свалях скоростта)... пак няма желание...
Някакви други идеи или някоя работеща библиотека за тая пущина някой да даде?

Автор:  eddiesoft [ Чет Май 31, 2012 12:33 pm ]
Заглавие:  Re: SST25VF016B

Написах си целия SPI, без да използвам този на STM-ката за да избегна неправилната инициализация, но пак не стана. Смених и паметта. Крайният резултат е същия. Някой може ли да даде някакво решение, че останалия проект е готов и по незнайно какви си нейни причини :) паметичката просто не проявява желание да ми съдейства...
Някой ще удари ли едно рамо, че има едни бири които чакат новия си собственик

Автор:  Цецо [ Чет Май 31, 2012 1:11 pm ]
Заглавие:  Re: SST25VF016B

Ти осцилоскоп нямаш ли?

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/