mantech 1 Posted September 14, 2013 (edited) · Report post Собственно вопрос к светилам в особенности по fatfs, есть 3 физ. диска - sd-карта, усб флешка и флеш контроллера, который используется как диск на 512Кбайт. Нижний уровень работает исправно, т.е. по "отдельности" доступ к дискам есть, все читает и записывает, но вместе (например копирование с диска на диск) не работает, причем отследил, что фатфс просто не обращается к процедурам чтения-записи соотв диска. Предполагаю, что фатфс не запоминает, к какому из дисков нужно обратиться, хотя в f_mount четко определяю номер 0,1 или 2 и открываю файл, где перед именем тоже указываю соотв диск - "1:filename.ext" Смотрел доки, там что-то мутное по поводу одновременной работы дисков, макросы типа LD2PD и тп. Я не использую логические диски в пределах одного физического. Как настроить фатфс для такого режима работы? Edited September 14, 2013 by mantech Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
megajohn 0 Posted September 16, 2013 · Report post вот пример совмещеной работы на два физических носителя. 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 Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Intel4004 0 Posted September 16, 2013 · Report post в ffconf.h указать не забыли? /*---------------------------------------------------------------------------/ / Physical Drive Configurations /----------------------------------------------------------------------------*/ #define _VOLUMES 3 /* Number of volumes (logical drives) to be used. */ Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
mantech 1 Posted September 16, 2013 · Report post вот пример совмещеной работы на два физических носителя. 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: Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Intel4004 0 Posted September 17, 2013 (edited) · Report post Все работает по умолчанию. только подправить _VOLUMES и все. Вот простейший пример. fftest.rar Edited September 17, 2013 by Intel4004 Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
mantech 1 Posted September 17, 2013 · Report post Все работает по умолчанию. только подправить _VOLUMES и все. Вот простейший пример. fftest.rar Диски физические или один с тремя лог. разделами? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Intel4004 0 Posted September 17, 2013 (edited) · Report post Диски физические или один с тремя лог. разделами? После первого запуска получим три файла (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 Кстати, именно таким способом я делаю первоначальный дамп для заливки на носитель. Edited September 17, 2013 by Intel4004 Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
mantech 1 Posted September 17, 2013 · Report post После первого запуска получим три файла (disk0.bin, disk1.bin, disk2.bin) - три виртуальных физических диска. #define _VOLUMES 3 //1 Вот и дело-то в том, что он с реальными физ дисками не работает! Т.е. в качестве параметра для disk_read выдает 0 при обращении к различным дискам, #define _VOLUMES 3 поставлено. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Intel4004 0 Posted September 17, 2013 · Report post Вот и дело-то в том, что он с реальными физ дисками не работает! Т.е. в качестве параметра для 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) при обращении к различным дискам. Посмотрите в свои исходники. Сравните. Определите чем отличаются и почему у вас этот параметр всегда равен нулю. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...