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