Например TDA7294

Форум РадиоКот • Просмотр темы - stm32f4+FRAM по spi (FM25CL64)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн июл 28, 2025 01:28:10

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Сб авг 04, 2018 13:14:01 
Родился

Зарегистрирован: Пн янв 26, 2009 22:49:48
Сообщений: 10
Рейтинг сообщения: 0
Здравствуйте! Прошу помощи :cry: ! Столкнулся со следующей проблемой пытаюсь подключить к контроллеру по spi память FRAM FM25CL64 ,компилятор keil , пытаюсь записать одно число и его же считать, а осциллографом вижу, что считывается не то, что записывал. Пытался в разные ячейки памяти разные числа - считываются разные числа, но не те. Пишу 0x2F считывается 0x1С, пишу 0xFF считывается 0xFE, пишу 0x99 считывается 0x20 - ерунда какая то.



Куски кода привел ниже:
Код:
int main(void)
{
   
   SystemCoreClockUpdate();
   SysTick_Config(SystemCoreClock/1000);//1ms
   LEDs_ini();
   Button_ini();
   SPI3_FRAM_ini();
        delay_ms(50);

   //проверим FRAM начало запись 1 байта
       CS_FRAM_ON();//
       while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};
       SPI_I2S_SendData(SPI3, 0x06);//Set Write Enable Latch 6
       while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};
       while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется
       CS_FRAM_OFF();
       delay_us(3);   //на самом деле задержка выходит около 500нс
     
        CS_FRAM_ON();   
   while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};
   SPI_I2S_SendData(SPI3, 0x02);// Write    

        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется

   SPI_I2S_SendData(SPI3, 0x10);// 13 битный адрес
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется   
   SPI_I2S_SendData(SPI3, 0x00);// 13 битный адрес
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется
   SPI_I2S_SendData(SPI3, 0x2F);// данные
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется
   
        CS_FRAM_OFF();
        delay_us(3);//на самом деле задержка выходит около 500нс
        //проверим FRAM конец запись  1 байта

        //проверим FRAM начало чтение 1 байта
        CS_FRAM_ON();//
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};

   SPI_I2S_SendData(SPI3, 0x03);// Read    

        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется

   SPI_I2S_SendData(SPI3, 0x10);// 13 битный адрес
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется   
   SPI_I2S_SendData(SPI3, 0x00);// 13 битный адрес
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется
   SPI_I2S_SendData(SPI3, 0x00);// пишем 0 для считывания
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};
        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется
        CS_FRAM_OFF();

//проверим FRAM конец чтение 1 байта   
   
   //LED1_OFF;
   
   while(1)
   {




настройки spi:
Код:
SPI_Init_user3.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
   SPI_Init_user3.SPI_Mode = SPI_Mode_Master;
   SPI_Init_user3.SPI_DataSize = SPI_DataSize_8b;
   SPI_Init_user3.SPI_CPOL = SPI_CPOL_High;//SPI_CPOL_Low
   SPI_Init_user3.SPI_CPHA = SPI_CPHA_2Edge;
   SPI_Init_user3.SPI_NSS = SPI_NSS_Soft;
   SPI_Init_user3.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;//4
   SPI_Init_user3.SPI_FirstBit = SPI_FirstBit_MSB;
        SPI_Init_user3.SPI_CRCPolynomial = 7;
   
   SPI_Init(SPI3, &SPI_Init_user3);


контакты вроде все пересмотрел, думал провода может длинноваты, клок spi настраивал на разную частоту уменьшал до 1МГц - не влияет, пробовал делать паузу между командой WREN и командой записи 15мс, а записью и считыванием 20мс, всё то же самое не помогло..

Осциллограмма всех посылок WREN, WITE, READ (тактовый сигнал ch1 и miso FRAM ch2) (синий луч отношения к делу не имеет)
Изображение

Осциллограмма команды WREN (тактовый сигнал ch1 и miso FRAM ch2)(синий луч отношения к делу не имеет)
Изображение

Осциллограмма команды WITE (тактовый сигнал ch1 и miso FRAM ch2)
Изображение

Осциллограмма считанного значения записывал 0x2F, считал 0x1C (тактовый сигнал ch1 и mosi FRAM ch2)
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Сб сен 08, 2018 08:43:39 
Опытный кот
Аватар пользователя

Карма: 4
Рейтинг сообщений: 7
Зарегистрирован: Вт окт 23, 2012 13:17:25
Сообщений: 823
Откуда: Киселевск
Рейтинг сообщения: 0
Для начало избавиться от портянок и писать прямо через CMSIS + научиться строить логику программы и оформлять код.

_________________
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Пн сен 10, 2018 10:42:49 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 14, 2012 22:53:50
Сообщений: 225
Рейтинг сообщения: 0
Как раз на днях писал либу для SST25LF040A под STM32F103 с HAL. Тоже поначалу не хотело работать как надо. Пришлось вкуривать даташит, где попалось, в частности, и такое
СпойлерThe Enable-Write-Status-Register (EWSR) instruction
arms the Write-Status-Register (WRSR) instruction and
opens the status register for alteration. The Enable-Write-
Status-Register instruction does not have any effect and
will be wasted, if it is not followed immediately by the Write-
Status-Register (WRSR) instruction. CE# must be driven
low before the EWSR instruction is entered and must be
driven high before the EWSR instruction is executed.


Причем делать это надо перед каждым новым байтом, если пишем побайтово.

После добавления этой процедуры в код все заработало. Ах да, и еще, таких вот
Код:
while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};

конструкций лучше избегать. Задержки не люблю, но в данной ситуации они меньшее зло. Функцию delay_us под армовский таймер написал первым делом, кстати.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Пн сен 17, 2018 09:45:23 
Потрогал лапой паяльник

Карма: 4
Рейтинг сообщений: 35
Зарегистрирован: Чт ноя 29, 2012 08:27:22
Сообщений: 311
Рейтинг сообщения: 0
Цитата:
Ах да, и еще, таких вот конструкций лучше избегать.
while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};


Почему ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Пн сен 17, 2018 09:51:43 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Ах да, и еще, таких вот
Код:
while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};

конструкций лучше избегать. Задержки не люблю, но в данной ситуации они меньшее зло. Функцию delay_us под армовский таймер написал первым делом, кстати.



Чтобы избегать их надо делать на DMA, а в данном случае задержки - совершенно неприемлемы...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Пт сен 21, 2018 17:52:17 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 14, 2012 22:53:50
Сообщений: 225
Рейтинг сообщения: 0
Цитата:
Ах да, и еще, таких вот конструкций лучше избегать.
while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};


Почему ?


Потому что бесконечные циклы и так зло, а бесконечные циклы в ожидании внешнего события это уже просто за гранью.

Цитата:
в данном случае задержки - совершенно неприемлемы

В данном случае вполне приемлемы, более того, при прототайпинге и отладке вообще оптимальны.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Сб сен 22, 2018 13:07:35 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
philosoraptor, вы утверждаете что задержки вместо ожидания флага не чушь собачья?
Вы окончательно в это уверовали?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Сб сен 22, 2018 13:27:58 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 14, 2012 22:53:50
Сообщений: 225
Рейтинг сообщения: 0
Именно так. Sue me.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Сб сен 22, 2018 14:15:16 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Угу , подобрали задержки, получили кое-какой результат теперь измените скорость SPI...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Сб сен 22, 2018 19:34:52 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 14, 2012 22:53:50
Сообщений: 225
Рейтинг сообщения: 0
Задержки не для тактирования SPI, а для того чтобы внешняя флешка успевала распихивать данные по ячейкам. Ничто не мешает заменить задержки автоматом состояний в конечной версии.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Сб сен 22, 2018 20:18:27 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
philosoraptor, вы свой первый пост в этой ветке перечитайте вдумчиво.
Заодно проштудируйте RM, а кокретно работу модуля SPI, возможно до вас дойдет что задержки там и на не вперлись.
А для отслеживания "распихивания данных" в спи флэш есть BUSy...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Сб сен 22, 2018 20:43:17 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 14, 2012 22:53:50
Сообщений: 225
Рейтинг сообщения: 0
Забавно, но написанная мной за пару вечеров программка читает и записывает данные на флеш с usb-cdc безупречно. Ну а так вообще ваше мнение мне очень интересно, конечно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Сб сен 22, 2018 21:06:48 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Ну да, забавно.
USB-CDC и SPI флэш, чего только не наг.кодиться на калокубе.


Изучайте...
http://cxem.net/mc/mc430.php
http://cxem.net/mc/mc432.php
http://cxem.net/mc/mc433.php


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Сб сен 22, 2018 21:20:40 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 14, 2012 22:53:50
Сообщений: 225
Рейтинг сообщения: 0
Еще как забавно. Некоторые даже родный язык, -тся/ться в частности освоить не в состоянии, even less likely they'd study K&R the way it should be studied.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4+FRAM по spi (FM25CL64)
СообщениеДобавлено: Сб сен 22, 2018 21:26:50 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Вы читайте, читайте...


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

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


Кто сейчас на форуме

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y