|
Память M95-256, stm32f100+M95-256 |
|
|
|
Apr 12 2016, 12:23
|

Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Apr 13 2016, 06:25
|

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

|
Цитата(AHTOXA @ Apr 12 2016, 16:15)  Не вижу включения тактирования AFIO. Это тактирование альтернативных функций. Нужно почти всегда. Добавьте в начало что-то вроде RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); Добавила. Но что-то не помогло. Где-то в другом косяк...
|
|
|
|
|
Apr 13 2016, 09:15
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Вы вообще неправильно работаете с SPI. SPI_I2S_SendData(); - просто записывает байт в регистр передатчика. После надо опрашивать статус, чтобы узнать, когда данные отправятся. (Удобно ждать, когда взведётся бит RXNE). Перед снятием CS надо подождать ещё немножко, потому что флаг RXNE может взводиться немного раньше, чем завершается передача байта. Ногу MISO я конфигурирую не как PUSH-PULL, а как INPUT. Прерывание пока уберите, сделайте просто опросом: Код unsigned char SpiRw(unsigned char out) { SPI_I2S_SendData(SPI1,out); while (!(SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)); return SPI_I2S_ReceiveData(SPI1);; }
void smallDelay() { volatile int i; for (i = 0; i < 100; ++i) {} }
unsigned char RDSR() { unsigned char ret; Port->ODR|=W; Port->ODR&=~S; ret = SpiRw(0b00000101); smallDelay(); Port->ODR|=S; return ret; }
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Apr 13 2016, 11:28
|

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

|
Хм... ща попробуем
Спасибо Вам за ответы)))
Вот думаю... может я неправильно подключила.... У меня память М95-256. Есть у нее вход-Q, выход - D, выбор чипа S, С- тактирование. согласно с принципами SPI, MOSI соединяю c Q, MISO - c D, CS - S, NSS - C... HOLD и W - настраиваю как выходы, кидаю на свободные пины.
Хм.... почему же на MISO мк висит единица, просто единица... 255 гонит и все тут. Хотя команда проходит
|
|
|
|
Сообщений в этой теме
Ekka Память M95-256 Apr 12 2016, 12:23     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 Хорошо, едем дальше…
В п/п вам надо 2 раза знать ... Apr 14 2016, 10:02 Ekka Спасибо за разъяснение, Obam, т.е. функция должна ... Apr 14 2016, 10:16  Obam Цитата(Ekka @ Apr 14 2016, 14:16) Спасибо... Apr 14 2016, 11:01   Ekka Да. Но с пониманием туго( Apr 14 2016, 11:14    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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|