mantech 121 September 14, 2013 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 16 September 16, 2013 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 September 16, 2013 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 121 September 16, 2013 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 September 17, 2013 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 121 September 17, 2013 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 September 17, 2013 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 121 September 17, 2013 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 September 17, 2013 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...