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

 
 
> STM32F100 + флешка EN25T80 + soft SPI, не удаётся прочитать данные
Artos5
сообщение Aug 10 2014, 20:53
Сообщение #1


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

Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613



Добрый вечер дорогие форумчане! Помогите пожалуйста решить проблему....

значит проблема такая:
Ни в какую не удаётся прочитать данные из флешки. Почему то , ее выход "болтается в воздухе" HI-Z состояние . Потому как в момент чтения , если приблизить руку к ней - данные хаотично принимаются.

код при обращении такой:

Код
soft_spi_write_instruct(SPI_FLASH_INS_READ); // comand
     soft_spi_write_addr(0x000000); // adress


Код
// в вечном цикле читаю данные и вывожу прямо на экран дисплея + показываю считанный байт

sprintf(buffer, "A=%x  P=%d         ", soft_spi_read(), y++); // колл. этапов
lcd_xy(3,1);
lcd_out(buffer);



библиотека такая , сильно не пинайте , писал на скорую руку , да и опыта конечно не много в этом деле sm.gif :

CODE
файл .С


#include "EN25T80.h"

#define DLY 10000

void delay(long x)
{
while(x)
{
x--;
}
}

void soft_spi_init()
{


//GPIOC->CRH |=0x24200000; //
//GPIOD->CRL |=0x00000002; //
}

void soft_spi_write_instruct(unsigned char instruct)
{
char x;
SPI_CS_CLR;
delay(DLY);
for(x=0;x<8;x++) // instruction
{
if (0x80 & instruct)
{
SPI_DATA1;
}
else
{
SPI_DATA0;
}

SCK_SPI_CLR;
delay(DLY);
SCK_SPI_SET;


instruct = instruct<<1;

delay(DLY);
}
SPI_CS_SET;
}

void soft_spi_write_addr(long addr_dev)
{
char x;

SPI_CS_CLR;
delay(DLY);
for(x=0;x<24;x++) // instruction
{
if (0x800000 & addr_dev)
{
SPI_DATA1;
}
else
{
SPI_DATA0;
}

SCK_SPI_CLR;
delay(DLY);
SCK_SPI_SET;
addr_dev = addr_dev<<1;

delay(DLY);
}
SPI_CS_SET;
}

int soft_spi_read()
{
int data_buff=0;
char x;

SPI_CS_CLR;
delay(DLY);

for(x=0;x<8;x++)
{
SCK_SPI_CLR;
delay(DLY);

if (SPI_IN)
{
data_buff |=1;
}
data_buff = data_buff<<1;

SCK_SPI_SET;
SPI_DATA1;



delay(DLY);
}

SPI_CS_SET;

return data_buff;
}

файл .Н

#include "stm32f10x_gpio.h"



#define BIT_IN (1<<1) // номер бита входа SPI
#define SCK_SPI_SET GPIO_SetBits(GPIOC, GPIO_Pin_1)
#define SCK_SPI_CLR GPIO_ResetBits(GPIOC, GPIO_Pin_1)

#define SPI_DATA1 GPIO_SetBits(GPIOC, GPIO_Pin_0)
#define SPI_DATA0 GPIO_ResetBits(GPIOC, GPIO_Pin_0)

#define SPI_CS_SET GPIO_ResetBits(GPIOC, GPIO_Pin_2)
#define SPI_CS_CLR GPIO_SetBits(GPIOC, GPIO_Pin_2)


//****************** SPI Definitions **************//
//#define CHIP_SELECT_AT25 PORTE.3=0;delay_ms(100);
//#define CHIP_UNSELECT_AT25 PORTE.3=1;delay_ms(100);
//******************* SPI Definitions *************//

//******************* Instruction Set ************//
// Read Commands
#define SPI_FLASH_INS_READ 0x03 // Read array
#define SPI_FLASH_INS_FAST_READ 0x0B // Read array(low frequency)

// Program and Erase Commands
#define SPI_FLASH_INS_BLOCK_ERASE_4K 0x20 // Sector erase
#define SPI_FLASH_INS_BLOCK_ERASE_32K 0x52 // Sector erase
#define SPI_FLASH_INS_BLOCK_ERASE_64K 0xD8 // Sector erase
#define SPI_FLASH_INS_CHIP_ERASE_1 0x60 // Sector erase
#define SPI_FLASH_INS_CHIP_ERASE_2 0xC7 // Sector erase
#define SPI_FLASH_INS_PAGE_PROGRAM 0x02 // Byte/Page program

// Protection commands
#define SPI_FLASH_INS_WRITE_ENABLE 0x06 // Write enable
#define SPI_FLASH_INS_WRITE_DISABLE 0x04 // Write disable
#define SPI_FLASH_INS_PROTECT_SECTOR 0x36 // Write disable
#define SPI_FLASH_INS_UNPROTECT_SECTOR 0x39 // Write disable

// Status register commands

#define SPI_FLASH_INS_READ_STATUS_REGISTER 0x05 // Read status register
#define SPI_FLASH_INS_WRITE_STATUS_REGISTER 0x01 // Write status register

// Miscellanous Commands
#define SPI_FLASH_INS_READ_DEVICE_ID 0x9F // Read identification
#define SPI_FLASH_INS_DEEP_POWER_DOWN 0xB9 // Deep power-down
#define SPI_FLASH_INS_RESUME_FROM_DEEP_POWER_DOWN 0xAB // Release from deep power- down

#define SPI_IN ((GPIOA->IDR & BIT_IN)==BIT_IN)

void soft_spi_init();
void soft_spi_write_instruct(unsigned char instruct);
void soft_spi_write_addr(long addr_dev);
int soft_spi_read();



Подскажите пожалуйста что я делаю не так.......
ПС: клок от МК присутствует , и чип селект тоже.

Даташит взял отсюда : http://www.suwa-koubou.jp/micom/TempLogger/EN25T80.pdf

Буду крайне благодарен за любую помощь в решении данной проблемы....
С уважением Артем Угримов.

Сообщение отредактировал IgorKossak - Aug 11 2014, 07:56
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Artos5   STM32F100 + флешка EN25T80 + soft SPI   Aug 10 2014, 20:53
- - Golikov A.   #define SPI_CS_SET GPIO_ResetBits(GPIOC, GPIO_Pin_...   Aug 11 2014, 05:58
|- - Artos5   Цитата(Golikov A. @ Aug 11 2014, 08:58) т...   Aug 11 2014, 06:52
- - Genadi Zawidowski   А что, снимать чипселект после команды, опять став...   Aug 11 2014, 06:57
- - Artos5   Я уже так делал, это проблему не решает.... я сейч...   Aug 11 2014, 07:01
- - Genadi Zawidowski   ЦитатаЯ уже так делал, это проблему не решает.... ...   Aug 11 2014, 07:08
|- - Artos5   Цитата(Genadi Zawidowski @ Aug 11 2014, 10...   Aug 11 2014, 07:29
- - Golikov A.   я чет не понимаю... soft_spi_write_instruct начи...   Aug 11 2014, 08:35
|- - Artos5   Цитата(Golikov A. @ Aug 11 2014, 11:31) я...   Aug 11 2014, 09:26
- - Genadi Zawidowski   Чипселект ДОЛЖЕН быть опущен в "0" на вс...   Aug 11 2014, 09:43
|- - Artos5   Цитата(Genadi Zawidowski @ Aug 11 2014, 12...   Aug 11 2014, 09:49
- - Golikov A.   мда... soft_spi_write_instruct смотрим тело функ...   Aug 11 2014, 09:47
|- - Artos5   Цитата(Golikov A. @ Aug 11 2014, 12:47) м...   Aug 11 2014, 10:17
- - Golikov A.   я бы сделал функцию WriteSPIData(int8_t data_out...   Aug 11 2014, 09:50
- - Genadi Zawidowski   Сделать так: Код SCK_SPI_CLR; delay(DLY...   Aug 11 2014, 14:11
- - Artos5   Так все в железе и заработало. По крайней мере чте...   Aug 11 2014, 14:25
|- - Genadi Zawidowski   Цитата(Artos5 @ Aug 11 2014, 18:25) Так в...   Aug 11 2014, 14:40
- - Artos5   Да скорость пока не важна. Не те задачи нужно реша...   Aug 11 2014, 14:43
- - Artos5   Возникла вторая проблема. Память не стирается и не...   Aug 11 2014, 17:55
- - Genadi Zawidowski   Команду WRITE ENABLE (код 0x06) кто даст?   Aug 11 2014, 18:34
- - Artos5   Цитата(Genadi Zawidowski @ Aug 11 2014, 21...   Aug 11 2014, 18:39


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:38
Рейтинг@Mail.ru


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