Например TDA7294

Форум РадиоКот • Просмотр темы - Работа LPT порта в SPI режиме. Проблема записи SPI Flash.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 20:30:04

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


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



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Работа LPT порта в SPI режиме. Проблема записи SPI Flash.
СообщениеДобавлено: Пн окт 03, 2016 23:19:53 
Друг Кота

Карма: -39
Рейтинг сообщений: -170
Зарегистрирован: Пн окт 03, 2016 22:50:22
Сообщений: 3421
Рейтинг сообщения: 0
Здравствуйте. Решил реализовать программную SPI шину на LPT порту компьютера. Написал драйвер для прямого доступа в программе к порту LPT и общение с шиной ассемблерными вставками (in/out). удалил драйвер по умолчанию установленный в Windows 7 для LPT порта, чтобы не мешал общению и не было коллизий.

BIOS: LPT режим: ECP

Аппаратная реализация LPT <-> "мост" буфер 74HC244 <-> SPI флешка
1 pin 378h - MOSI
2 pin 379h - MISO
3 pin 37Ah - CLOCK
4 pin 37Ah - CS

Реализовал программное общение с флешкой по SPI, корректно получил: ID, type, density флешки, корректно прочитал содержимое флешки.

Вот только уже второй день не могу записать флешку Winbond W25Q80, использовал другую флешку MX25L1606E такая же проблема

Флешка Winbond W25Q80:

Код:

//Открываю запись
SPI_Start();
SPI_Transmit(0x06); //WREN
SPI_Stop();

//Проверяю статус
SPI_Start();
SPI_Transmit(0x05); //RDSR
Status=SPI_Receive();
SPI_Stop();

Получаю Status = DEC: 2  или BIN: 0000 0010


//Пытаюсь записать в флешку
SPI_Start();
SPI_Transmit(0x02); //WRITE
SPI_Transmit((0&0x0000ffff)>>8);
SPI_Transmit((0&0x000000ff);
SPI_Transmit(0,0);

for (i=0;i<256;i++)
{
SPI_Transmit(0x88); //Заполняю блок 256 байт, байтом 0x88
}

SPI_Stop();


Sleep(7000);

//Читаю из флешки
SPI_Start();
SPI_Transmit(0x03); //READ
SPI_Transmit(0x00);
SPI_Transmit(0x00);
SPI_Transmit(0x00);

unsigned char OutBufer[2097152];

//16777216 бит / 8 бит = 2097152 байт
for (i=0;i<2097152;i++)
{
OutBufer[i]=SPI_Receive();
}

SPI_Stop();


Далее записываю содержимое OutBufer[] в файл и просматриваю в HEX редакторе




Нулями 0x00 заполняется, а вот отличным от нулей байты не получается. :(

Либо я чего то недопонимаю


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа LPT порта в SPI режиме. Проблема записи SPI Flash
СообщениеДобавлено: Вт окт 04, 2016 11:30:19 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14053
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Для LPT под ХР реальна работа только по аналогии/применении схемы от программатора STK200.
Т.е. использование той же линии (и адреса порта) для сигналов mosi,miso и sck. Там нюанс по возвратному сигналу - иная конфигурация проблемна для программиста. Для загрузки данных в выходной регистр порта (0х0378) в любом случае проблем не будет. В остальные адреса - защита системы весьма пакостна - работа идет только через драйвера.
Возможно и с семеркой получится.
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа LPT порта в SPI режиме. Проблема записи SPI Flash
СообщениеДобавлено: Чт окт 06, 2016 02:25:55 
Держит паяльник хвостом

Карма: 10
Рейтинг сообщений: 160
Зарегистрирован: Чт апр 03, 2014 23:16:55
Сообщений: 963
Откуда: Россия
Рейтинг сообщения: 0
Transformer-V писал(а):
Флешка Winbond W25Q80:
Код:
//Открываю запись...
//Проверяю статус...
Получаю Status = DEC: 2  или BIN: 0000 0010
Тут видно, что все три бита защиты памяти равны 0. Значит включена защита всей памяти.
Transformer-V писал(а):
//Пытаюсь записать в флешку
SPI_Start();
SPI_Transmit(0x02); //WRITE
SPI_Transmit((0&0x0000ffff)>>8);
SPI_Transmit((0&0x000000ff);
SPI_Transmit(0,0);
[/code]
Вот тут странно, почему бы просто не передать три байта адреса, без сдвигов?
Например, так:
Код:
SPI_Transmit((0xff);
SPI_Transmit((0xff);
SPI_Transmit(0);
Но, прежде чем передавать адрес и данные для записи, надо указать какую область памяти открываете для записи.
То есть дать команду SPI_Transmit(0x01); и далее по даташиту, записать в STATUS REGISTER, например: BP1 и BP2 = 1.
Это будет означать доступ ко всей памяти, адреса с 000000h по 0FFFFFh. Не придется ломать голову, какой блок открыт, какой
закрыт, просто сразу все разрешили, мне кажется так удобнее. И записывать для теста лучше сначала, чтобы не колдовать с адресом.
Только после этого можно приступать к записи данных. Но лучше сначала прочитать STATUS REGISTER и убедиться, что биты
WEL, BP1 и BP2 = 1. Попробуйте, думаю все получится, расскажите потом, что и как :)


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Работа LPT порта в SPI режиме. Проблема записи SPI Flash
СообщениеДобавлено: Чт окт 06, 2016 03:16:32 
Друг Кота

Карма: -39
Рейтинг сообщений: -170
Зарегистрирован: Пн окт 03, 2016 22:50:22
Сообщений: 3421
Рейтинг сообщения: 0
BOB51 писал(а):
Для LPT под ХР реальна работа только по аналогии/применении схемы от программатора STK200.
Т.е. использование той же линии (и адреса порта) для сигналов mosi,miso и sck. Там нюанс по возвратному сигналу - иная конфигурация проблемна для программиста. Для загрузки данных в выходной регистр порта (0х0378) в любом случае проблем не будет. В остальные адреса - защита системы весьма пакостна - работа идет только через драйвера.
Возможно и с семеркой получится.
:roll:


Переключил выводы CS, CLOCK, MOSI на порт 378h и все удачно записалось и считалось :)) Спасибо

Добавлено after 4 minutes 41 second:
Rtmip писал(а):
Transformer-V писал(а):
Флешка Winbond W25Q80:
Код:
//Открываю запись...
//Проверяю статус...
Получаю Status = DEC: 2  или BIN: 0000 0010
Тут видно, что все три бита защиты памяти равны 0. Значит включена защита всей памяти.
Transformer-V писал(а):
//Пытаюсь записать в флешку
SPI_Start();
SPI_Transmit(0x02); //WRITE
SPI_Transmit((0&0x0000ffff)>>8);
SPI_Transmit((0&0x000000ff);
SPI_Transmit(0,0);
[/code]
Вот тут странно, почему бы просто не передать три байта адреса, без сдвигов?
Например, так:
Код:
SPI_Transmit((0xff);
SPI_Transmit((0xff);
SPI_Transmit(0);
Но, прежде чем передавать адрес и данные для записи, надо указать какую область памяти открываете для записи.
То есть дать команду SPI_Transmit(0x01); и далее по даташиту, записать в STATUS REGISTER, например: BP1 и BP2 = 1.
Это будет означать доступ ко всей памяти, адреса с 000000h по 0FFFFFh. Не придется ломать голову, какой блок открыт, какой
закрыт, просто сразу все разрешили, мне кажется так удобнее. И записывать для теста лучше сначала, чтобы не колдовать с адресом.
Только после этого можно приступать к записи данных. Но лучше сначала прочитать STATUS REGISTER и убедиться, что биты
WEL, BP1 и BP2 = 1. Попробуйте, думаю все получится, расскажите потом, что и как :)


Три байта без сдвигов убрал из кода, насчет защиты и открытия записи определенного блока незнал спасибо за информацию, запрограммировалось после смены порта и команды полного стирания 0xc7 :)


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

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

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


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

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


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

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


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