реклама на сайте
подробности

 
 
> Дайте совет: USB+sam7x+flash
Freeuser
сообщение Nov 18 2009, 11:50
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718



В общем задача такая: записать на SD-карту данные, без всякой файловой системы, сплошным потоком. Данных ~ 200 метров, и находятся они на компе. Собственно вопрос: как реализовать сие??? Моё видение - организовать передачу через USB в контроллер (at91sam7x256), который будет запихивать их на карту памяти. Но дело в том что с ARM'ми я знаком недавно, с USB - тоже. На данный момент реализовано чтение и запись на карту памяти. Поделитесь мнениями, может быть данную задачу можно решить другим путем.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vmp
сообщение Nov 19 2009, 08:22
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Из-под виндов есть как минимум 2 способа:
Прямой доступ к устройству (читать MSDN на тему CreateFile):
Код
sprintf(path, "\\\\.\\PhysicalDrive%d", devno);

hDisk =   CreateFile(path,
           GENERIC_READ | GENERIC_WRITE,
           FILE_SHARE_READ | FILE_SHARE_WRITE,
           NULL,
           OPEN_EXISTING,
           FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH,
           NULL);
if (hDisk == INVALID_HANDLE_VALUE)
  {
   return 1;
  }

if (!DeviceIoControl(hDisk,
  FSCTL_LOCK_VOLUME,           // dwIoControlCode
  NULL,                        // lpInBuffer
  0,                           // nInBufferSize
  NULL,                        // lpOutBuffer
  0,                           // nOutBufferSize
  &BytesReturned,              // number of bytes returned
  NULL))                       // OVERLAPPED structure
  {
   CloseHandle(hDisk);
   return 2;
  }
return 0;

int WriteSect(int sect, void *buf)
{
DWORD NumberOfBytesWritten;

if (SetFilePointer(hDisk,      //  HANDLE hFile,
   sect * 512,                  //  LONG lDistanceToMove,
   NULL,                        //  PLONG lpDistanceToMoveHigh,
   FILE_BEGIN)                  //  DWORD dwMoveMethod
    == -1)
  {
    return 1;
  }
if (!WriteFile(hDisk,     //  HANDLE hFile,
   buf,                    //  LPVOID lpBuffer,
   512,                    //  DWORD nNumberOfBytesToRead,
   &NumberOfBytesWritten,  //  LPDWORD lpNumberOfBytesRead,
   NULL))                  //  LPOVERLAPPED lpOverlapped
  {
   return 2;
  }
if (NumberOfBytesWritten != 512)
  {
    return 3;
  }
return 0;
}



И более хитрый способ для работы с файловой системой без файловой системы.
Берем карту памяти, форматируем на писишке в FAT, создаем один большой файл во всю свободную область. В этом случае файл получается непрерывный. В начало файла пишем какую-нибудь уникальную сигнатуру + доп информацию типа размера файла.
В устройстве при запуске сканируем карту в поисках сигнатуры. Найдя ее - имеем начало файла и размер. Далее просто читаем или пишем данные, не трогая заголовок.
В итоге устройство ничего не знает о файловой системе, а на писюке можно работать с файлами стандартными способами.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 03:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.03092 секунд с 7
ELECTRONIX ©2004-2016