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

 
 
> Память M95-256, stm32f100+M95-256
Ekka
сообщение Apr 12 2016, 12:23
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250



Ребята, доброго времени суток) Бьюсь над памятью М95-256. Пишу на Си. МК -stm32f100. Хочу просто считать статусный регистр. Документация мною более-менее изучена. Не могу понять, где ошибка. Почему возвращает 255... иногда 7 возвращается. Может кто-то работал с этой зверь-машиной? Может неверный алгоритм, код, какой-то вообще левый косяк? Я в начинающих пока что. Соображаю медленно.

#include <stm32f10x.h>
#include <stm32f10x_gpio.h>
#include <stm32f10x_rcc.h>
#include <stm32f10x_spi.h>
#include <misc.h>

#define S GPIO_Pin_4
#define Port GPIOA
#define D GPIO_Pin_7
#define Q GPIO_Pin_6
#define C GPIO_Pin_5
#define W GPIO_Pin_2
#define HOLD GPIO_Pin_3

void RDSR()
{
Port->ODR|=W;
Port->ODR&=~S;
SPI_I2S_SendData(SPI1,0b00000101);
Port->ODR|=S;
}

int main(void)
{
SPI_Master_Conf();
RDSR();
while(1);
}


void SPI_Master_Conf()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

GPIO_InitTypeDef port;
port.GPIO_Mode = GPIO_Mode_AF_PP;
port.GPIO_Pin = C|Q|D;
port.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(Port, &port);


GPIO_InitTypeDef port1;
port1.GPIO_Mode = GPIO_Mode_Out_PP;
port1.GPIO_Pin = W|S|HOLD;
port1.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(Port, &port1);

Port->ODR|=S;
Port->ODR&=~(HOLD|W);

SPI_InitTypeDef spi;
SPI_StructInit(&spi);
spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
spi.SPI_Mode = SPI_Mode_Master;
spi.SPI_DataSize = SPI_DataSize_8b;
spi.SPI_CPOL = SPI_CPOL_Low;
spi.SPI_CPHA = SPI_CPHA_2Edge;
spi.SPI_NSS = SPI_NSS_Soft;
spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
spi.SPI_FirstBit = SPI_FirstBit_MSB;
spi.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &spi);
SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE);
SPI_I2S_ClearITPendingBit(SPI1,SPI_I2S_IT_RXNE);
NVIC_EnableIRQ(SPI1_IRQn);
SPI_Cmd(SPI1, ENABLE);
}

u32 answer=0;
void SPI1_IRQHandler()
{
if(SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==1)
{
SPI_I2S_ClearITPendingBit(SPI1,SPI_I2S_IT_RXNE);
answer=(u32)SPI_I2S_ReceiveData(SPI1);
}

}


Сообщение отредактировал Ekka - Apr 12 2016, 12:25
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Obam
сообщение Apr 14 2016, 10:02
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Хорошо, едем дальше…

В п/п вам надо 2 раза знать статус памяти?
"void RDSR()
{
Port->ODR&=~S;
SPI_I2S_SendData(SPI1,0b00000101);

// где ожидание окончания передачи/приёма и вычитка DR? При этом здесь не будет действительных данных от памяти.

SPI_I2S_SendData(SPI1,0b00000000);
// где ожидание окончания передачи/приёма и вычитка DR? А здесь данные будут.

SPI_I2S_SendData(SPI1,0b00000000);
// где ожидание окончания передачи/приёма и вычитка DR? И здесь будут.
// while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==0));
answer=SPI_I2S_ReceiveData(SPI1);
Port->ODR|=S;
}
"
SPI - интерфейс синхронный и двунаправленный: синхроимпульсы мастера тактируют и данные от мастера в ведомого и одновременно данные из ведомого. На каждый переданный байт ведомому мастер получает байт от ведомого.





--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Ekka
сообщение Apr 14 2016, 10:16
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250



Спасибо за разъяснение, Obam, т.е. функция должна быть такой???

Код
Port->ODR&=~S; //выбираем чип
    SPI_I2S_SendData(SPI1,0b00000101); //команда СЧИТАТЬ РЕГИСТР
    while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_TXE)==0));//ждем, пока данные отправятся
    SPI_I2S_SendData(SPI1,0b00000000); //отправляем пустую команду, чтобы считать байт
    while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_TXE)==0)); //ждем, пока отправится
    while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==0)); //ждем, когда можно будет считать
    answer=SPI_I2S_ReceiveData(SPI1);//считываем байт
    Port->ODR|=S; //сброс чипа


что-то тут не так... ждем много. И там ли я поставила ожидание.

А если просто не сбрасывать чип и сделать так?
Код
Port->ODR&=~S; //выбираем чип
    SPI_I2S_SendData(SPI1,0b00000101); //команда СЧИТАТЬ РЕГИСТР
    while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_TXE)==0));//ждем, пока данные отправятся
    while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==0)); //ждем, когда можно будет считать
    answer=SPI_I2S_ReceiveData(SPI1);//считываем байт
Go to the top of the page
 
+Quote Post
Obam
сообщение Apr 14 2016, 11:01
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(Ekka @ Apr 14 2016, 14:16) *
Спасибо за разъяснение, Obam, т.е. функция должна быть такой???

Код
Port->ODR&=~S; //выбираем чип
    SPI_I2S_SendData(SPI1,0b00000101); //команда СЧИТАТЬ РЕГИСТР
    while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_TXE)==0));//ждем, пока данные отправятся
    SPI_I2S_SendData(SPI1,0b00000000); //отправляем пустую команду, чтобы считать байт
    while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_TXE)==0)); //ждем, пока отправится
    while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==0)); //ждем, когда можно будет считать
    answer=SPI_I2S_ReceiveData(SPI1);//считываем байт
    Port->ODR|=S; //сброс чипа


что-то тут не так... ждем много. И там ли я поставила ожидание.


Ну ё-моё ): разъяснение не подействовало?

Код
Port->ODR&=~S; //выбираем чип
    SPI_I2S_SendData(SPI1,0b00000101); //команда СЧИТАТЬ РЕГИСТР
    while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==0));//ждем, пока данные отправятся и можно будет считать
    answer=SPI_I2S_ReceiveData(SPI1);//считываем байт - здесь фиктивный

    SPI_I2S_SendData(SPI1,0b00000000); //отправляем пустую команду, чтобы считать байт
    while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==0)); //ждем, пока отправится и можно будет считать
        answer=SPI_I2S_ReceiveData(SPI1);//считываем байт
    Port->ODR|=S; //сброс чипа


Вы картиночку Fig.225 на стр.524 в cd00246267.pdf видели?


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Ekka
сообщение Apr 14 2016, 11:14
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250



Да. Но с пониманием туго( smile3046.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ekka   Память M95-256   Apr 12 2016, 12:23
- - AHTOXA   Не вижу включения тактирования AFIO. Это тактирова...   Apr 12 2016, 15:15
|- - Ekka   Цитата(AHTOXA @ Apr 12 2016, 16:15) Не ви...   Apr 13 2016, 06:25
|- - Ekka   Могут ли быть мною опущены какие-то временные заде...   Apr 13 2016, 08:08
|- - AHTOXA   Вы вообще неправильно работаете с SPI. SPI_I2S_Sen...   Apr 13 2016, 09:15
|- - Ekka   Хм... ща попробуем Спасибо Вам за ответы))) Вот ...   Apr 13 2016, 11:28
|- - AHTOXA   Цитата(Ekka @ Apr 13 2016, 16:28) Хм.... ...   Apr 13 2016, 12:03
||- - Ekka   А так можно написать? #include <stm32f10x.h...   Apr 13 2016, 12:06
||- - AHTOXA   Цитата(Ekka @ Apr 13 2016, 17:06) unsigne...   Apr 13 2016, 12:25
||- - Ekka   если я убираю это. Цикл WHILE , который ждет, пока...   Apr 13 2016, 12:46
||- - AHTOXA   Цитата(Ekka @ Apr 13 2016, 17:46) если я ...   Apr 13 2016, 13:25
||- - Ekka   Спасибо за Ваши ответы))) Микросхема начала отвеча...   Apr 14 2016, 08:07
|- - Obam   Цитата(Ekka @ Apr 13 2016, 15:28) Хм... щ...   Apr 14 2016, 08:40
|- - Ekka   Цитата(Obam @ Apr 14 2016, 09:40) Разреши...   Apr 14 2016, 09:20
- - Obam   Кодом в меня тыкать не надо (: Смысл моего замеча...   Apr 14 2016, 09:28
|- - Ekka   Цитата(Obam @ Apr 14 2016, 10:28) Кодом в...   Apr 14 2016, 09:38
|- - Obam   Цитата(Ekka @ Apr 14 2016, 15:14) Да. Но ...   Apr 14 2016, 11:57
|- - Ekka   Цитата(Obam @ Apr 14 2016, 12:57) Так при...   Apr 14 2016, 12:42
|- - Obam   Цитата(Ekka @ Apr 14 2016, 16:42) Только ...   Apr 14 2016, 12:49
|- - Ekka   Нет... что-то не так. Микросхема не отвечает. Хотя...   Apr 14 2016, 13:05
|- - Obam   Цитата(Ekka @ Apr 14 2016, 17:05) Нет... ...   Apr 14 2016, 13:12
|- - Ekka   Такая штука... как только я использую ожидание фла...   Apr 14 2016, 13:16
- - Obam   Не нервничайте, спокойно читайте datasheet и RefMa...   Apr 14 2016, 13:35
|- - Ekka   Код#include <stm32f10x.h> #include <st...   Apr 15 2016, 07:24
|- - Ekka   возник др.вопрос. Чтобы считать что-нибудь из памя...   Apr 15 2016, 11:51
|- - Ekka   Вроде разобралась как принять байт из памяти. Нача...   Apr 15 2016, 13:18
|- - Ekka   Ребята, снова стучу в эту тему((( Недавно обнаружи...   May 17 2016, 07:41
- - Obam   Вот без обид: datasheet на память надо прочитать х...   May 17 2016, 07:45
|- - Ekka   Цитата(Obam @ May 17 2016, 07:45) Вот без...   May 17 2016, 07:49
- - Obam   Всё ж пояснил; в свой код гляньте: ф-ия READ и дал...   May 17 2016, 07:53
|- - Ekka   Так... у меня получается... SPI настроен на 8 бит....   May 17 2016, 08:00
- - Obam   Адрес в память в два приёма должен выдаваться.   May 17 2016, 08:01
|- - Ekka   вот же ж... попробуем   May 17 2016, 08:03
|- - Ekka   но ведь принимаю я 1 байт...так? Data out1 и Dat...   May 17 2016, 08:14
|- - Ekka   УРА)) УРА) УРА) надеюсб, не зря радуюсь хоть.... С...   May 17 2016, 08:45
|- - Ekka   Спасибо всем, кто помогал и тратил свои нервы и зн...   May 17 2016, 09:51
|- - Obam   Цитата(Ekka @ May 17 2016, 13:51) Все пол...   May 17 2016, 09:55
- - Obam   Вы бы взяли рисуночек со стр.23 datasheet-а и отме...   May 17 2016, 08:11
- - Obam   На колу мочало - начинаем сказку с начала: 1 (проп...   May 17 2016, 08:23
- - Obam   Вот здесь самое время остановиться и начать штудир...   May 17 2016, 08:58
|- - Ekka   такой нюанс "На колу мочало - начинаем сказк...   May 17 2016, 09:12
- - Obam   Фиктивные (ладно - пусть не фиктивные. Безсмысленн...   May 17 2016, 09:27


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

 


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


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