Перейти к содержанию
    

FatFS и 3 физических диска одновременно!

Собственно вопрос к светилам в особенности по fatfs, есть 3 физ. диска - sd-карта, усб флешка и флеш контроллера, который используется как диск на 512Кбайт.

 

Нижний уровень работает исправно, т.е. по "отдельности" доступ к дискам есть, все читает и записывает,

но вместе (например копирование с диска на диск) не работает, причем отследил, что фатфс просто не обращается к процедурам чтения-записи соотв диска. Предполагаю, что фатфс не запоминает, к какому из дисков нужно обратиться, хотя в f_mount четко определяю номер 0,1 или 2 и открываю файл, где перед именем тоже указываю соотв диск - "1:filename.ext"

 

Смотрел доки, там что-то мутное по поводу одновременной работы дисков, макросы типа LD2PD и тп. Я не использую логические диски в пределах одного физического. Как настроить фатфс для такого режима работы?

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот пример совмещеной работы на два физических носителя.

DRESULT disk_read (
    BYTE drv,
    BYTE* buff,
    DWORD lba,
    BYTE count
)
{
    switch (drv) {
    case DN_NAND:
        return NAND_read(buff, lba, count);
    case DN_MCI:
        return MCI_read(buff, lba, count);
    }
    return RES_PARERR;
}

 

Более полную информацию можте подчерпнуть из примеров чана ffsample для lpc23xx

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в ffconf.h указать не забыли?

/*---------------------------------------------------------------------------/
/ Physical Drive Configurations
/----------------------------------------------------------------------------*/

#define _VOLUMES    3
/* Number of volumes (logical drives) to be used. */

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот пример совмещеной работы на два физических носителя.

DRESULT disk_read (
    BYTE drv,
    BYTE* buff,
    DWORD lba,
    BYTE count
)
{
    switch (drv) {
    case DN_NAND:
        return NAND_read(buff, lba, count);
    case DN_MCI:
        return MCI_read(buff, lba, count);
    }
    return RES_PARERR;
}

 

Более полную информацию можте подчерпнуть из примеров чана ffsample для lpc23xx

 

 

Это все у меня работает, я написал, что нижний уровень читает и записывает.

Мне интересна настройка самой фатфс, для одновременной работы с несколькими дисками...

Нужно-ли использовать для этого настройки partition или еще что...

 

"в ffconf.h указать не забыли?" нет, нге забыл :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все работает по умолчанию. только подправить _VOLUMES и все. Вот простейший пример.

fftest.rar

Изменено пользователем Intel4004

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все работает по умолчанию. только подправить _VOLUMES и все. Вот простейший пример.

fftest.rar

 

Диски физические или один с тремя лог. разделами?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Диски физические или один с тремя лог. разделами?

 

После первого запуска получим три файла (disk0.bin, disk1.bin, disk2.bin) - три виртуальных физических диска.

Это пример. Компиляется обычным bcc32.

Там исходников - пара десятков строчек в test\, разобраться - 5 минут.

doc\ и src\ - это собственно последний ff и есть. Всех изменений в ffconf.h:

#define _USE_MKFS 1 //0

#define _CODE_PAGE 866 //932

#define _VOLUMES 3 //1

Кстати, именно таким способом я делаю первоначальный дамп для заливки на носитель.

Изменено пользователем Intel4004

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

После первого запуска получим три файла (disk0.bin, disk1.bin, disk2.bin) - три виртуальных физических диска.

 

#define _VOLUMES 3 //1

 

Вот и дело-то в том, что он с реальными физ дисками не работает! Т.е. в качестве параметра для disk_read выдает 0 при обращении к различным дискам, #define _VOLUMES 3 поставлено.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот и дело-то в том, что он с реальными физ дисками не работает! Т.е. в качестве параметра для disk_read выдает 0 при обращении к различным дискам, #define _VOLUMES 3 поставлено.

Скачайте. Скомпиляйте. Запустите. Посмотрите на экран. Увидите что то вроде:

disk 0: read: 00000000[00000001]

disk 1: read: 00000000[00000001]

disk 2: read: 00000000[00000001]

disk 0: write: 000001e0[00000001]

disk 1: write: 000001e0[00000001]

disk 2: write: 000001e0[00000001]

Посмотрите в test\diskio.c. Убедитесь, что цифры 0,1,2 после слова disk - это на самом деле параметр BYTE pdrv. Т.е. в качестве параметра для disk_read выдает номер диска(а не 0) при обращении к различным дискам. Посмотрите в свои исходники. Сравните. Определите чем отличаются и почему у вас этот параметр всегда равен нулю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...