|
|
  |
FatFS и 3 физических диска одновременно!, Как настроить сие чудо? |
|
|
|
Sep 14 2013, 18:01
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Собственно вопрос к светилам в особенности по fatfs, есть 3 физ. диска - sd-карта, усб флешка и флеш контроллера, который используется как диск на 512Кбайт.
Нижний уровень работает исправно, т.е. по "отдельности" доступ к дискам есть, все читает и записывает, но вместе (например копирование с диска на диск) не работает, причем отследил, что фатфс просто не обращается к процедурам чтения-записи соотв диска. Предполагаю, что фатфс не запоминает, к какому из дисков нужно обратиться, хотя в f_mount четко определяю номер 0,1 или 2 и открываю файл, где перед именем тоже указываю соотв диск - "1:filename.ext"
Смотрел доки, там что-то мутное по поводу одновременной работы дисков, макросы типа LD2PD и тп. Я не использую логические диски в пределах одного физического. Как настроить фатфс для такого режима работы?
Сообщение отредактировал mantech - Sep 14 2013, 18:06
|
|
|
|
|
Sep 16 2013, 06:42
|

Профессионал
    
Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143

|
вот пример совмещеной работы на два физических носителя. Код 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
--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
|
|
|
|
|
Sep 16 2013, 06:54
|

Участник

Группа: Участник
Сообщений: 48
Регистрация: 7-09-07
Из: Наб.Челны
Пользователь №: 30 364

|
в ffconf.h указать не забыли? Код /*---------------------------------------------------------------------------/ / Physical Drive Configurations /----------------------------------------------------------------------------*/ #define _VOLUMES 3 /* Number of volumes (logical drives) to be used. */
|
|
|
|
|
Sep 16 2013, 18:04
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(megajohn @ Sep 16 2013, 09:42)  вот пример совмещеной работы на два физических носителя. Код 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 указать не забыли?" нет, нге забыл
|
|
|
|
|
Sep 17 2013, 17:14
|

Участник

Группа: Участник
Сообщений: 48
Регистрация: 7-09-07
Из: Наб.Челны
Пользователь №: 30 364

|
Цитата(mantech @ Sep 17 2013, 20:49)  Диски физические или один с тремя лог. разделами? После первого запуска получим три файла (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 - Sep 17 2013, 17:24
|
|
|
|
|
Sep 17 2013, 17:50
|

Участник

Группа: Участник
Сообщений: 48
Регистрация: 7-09-07
Из: Наб.Челны
Пользователь №: 30 364

|
Цитата(mantech @ Sep 17 2013, 21:30)  Вот и дело-то в том, что он с реальными физ дисками не работает! Т.е. в качестве параметра для 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) при обращении к различным дискам. Посмотрите в свои исходники. Сравните. Определите чем отличаются и почему у вас этот параметр всегда равен нулю.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|