Товарищи, прошу помощи , несколько недель мучаюсь с организацией совместной работы карты памяти ММС и микроконтроллера pic 16f877. излазил кучу форумов . Задача стоит такая надо разобраться в алгоритме работы с картой памяти (запись, чтение. и тд.), не надо подсовывать алгоритмы с разных сайтов если не знаете что там и где . С библиотекой Petit FatFs не совсем разобрался в файле diskio.c необходимо прописать низкоуровневую работу(пока туда не лез). Предлагаю вашему вниманию часть программы, программа компилируется и записывает только 512 байт (1 блок) , при записи нескольких блоков записывает пробелы . Проверял в Протеусе, схему не собирал.
1) вопрос как организовать запись нескольких блоков да и комарду CMD 23 (только для ММС) Распишите .
#include <pic.h>
#define _XTAL_FREQ 20e6
extern void SerString (const char *str);
extern char SPI (char d);
extern char Command (char befF,/*unsigned char AdrH,*/ unsigned char AdrL,char befH );
extern char bhf ;
char df=0;
void read ();
void write ( char x)
{
if (Command(24, 0, 0xff)!=0) {
SerString("Write Error");
}
SerString ("writing mmc");
//while (SPI(0xFF)!=0) ;
SPI (0xff);
SPI (0xff);
SPI (0xfe);
for (int g =0; g< 512; g++){
SPI ('f');
}
SPI (0xff);
SPI (0xff);
while ((SPI(0xff) | 0b00011111) == 0x05);
while (SPI(0xff) != 0xff);
//for (char i=0; i<100 ;i++);
SerString("writi complit");
}
void read (){
char i;
if (Command(0x51,512,0xFF) !=0) SerString("Lese_resp_Fehler ");
while(SPI(0xFF) != 0xFE); // Ожидание 0xFE – начала каждой передачи данных
for(i=0; i < 512; i++)
{
while(!TXIF); // Проверка, пуст ли регистр TXREG
TXREG =SPI(0xFF); // Передача байта данных
}
SPI(0xFF); // В конце два незначимых байта
SPI(0xFF);
}
Забыл добавить с кодом программы уже экспериментировал много так что он может немножко корявый.
Раздел: Алгоритмы
1) вопрос как организовать запись нескольких блоков да и комарду CMD 23 (только для ММС) Распишите .
#include <pic.h>
#define _XTAL_FREQ 20e6
extern void SerString (const char *str);
extern char SPI (char d);
extern char Command (char befF,/*unsigned char AdrH,*/ unsigned char AdrL,char befH );
extern char bhf ;
char df=0;
void read ();
void write ( char x)
{
if (Command(24, 0, 0xff)!=0) {
SerString("Write Error");
}
SerString ("writing mmc");
//while (SPI(0xFF)!=0) ;
SPI (0xff);
SPI (0xff);
SPI (0xfe);
for (int g =0; g< 512; g++){
SPI ('f');
}
SPI (0xff);
SPI (0xff);
while ((SPI(0xff) | 0b00011111) == 0x05);
while (SPI(0xff) != 0xff);
//for (char i=0; i<100 ;i++);
SerString("writi complit");
}
void read (){
char i;
if (Command(0x51,512,0xFF) !=0) SerString("Lese_resp_Fehler ");
while(SPI(0xFF) != 0xFE); // Ожидание 0xFE – начала каждой передачи данных
for(i=0; i < 512; i++)
{
while(!TXIF); // Проверка, пуст ли регистр TXREG
TXREG =SPI(0xFF); // Передача байта данных
}
SPI(0xFF); // В конце два незначимых байта
SPI(0xFF);
}
Забыл добавить с кодом программы уже экспериментировал много так что он может немножко корявый.
Раздел: Алгоритмы