Перейти к содержанию

artos5

Moderators
  • Постов

    3 089
  • Зарегистрирован

  • Посещение

  • Победитель дней

    7

artos5 стал победителем дня 22 января 2013

artos5 имел наиболее популярный контент!

1 Подписчик

Информация о artos5

  • День рождения 05.05.1985

Контакты

  • Skype
    artyomugr
  • ICQ
    436015834

Информация

  • Пол
    Мужчина
  • Город
    Украина, Ахтырка

Электроника

  • Стаж в электронике
    10-20 лет
  • Сфера радиоэлектроники
    Цифровая электроника, Силовая электроника, Аудио
  • Оборудование
    UNI-T UT71B, MASTECH MS8260E , LUKEY 852D, Паяльник 30W с тонким керамическим жалом, держатель плат с лупой.

Посетители профиля

30 275 просмотров профиля

Достижения artos5

Опытный

Опытный (11/14)

  • Преданный
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме
  • 10 лет  на форуме

Последние значки

321

Репутация

  1. Угу, сработало )) Попробовал вычитать 4096 байт, вычитанное посмотрел в терминале. И сохранил в файл. В итоге ровно 4096 байт прочиталось. 001.txt
  2. К переменной sector нужно единичку прибавлять и передавать в w25_read ? Есть косяк с чтением данных. Что то я на мудрил все-таки. Вот есть пример, так тут вообще все просто. Сектор и есть абсолютным адресом: DRESULT USER_read ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { if (pdrv || !count) return RES_PARERR; if (Stat & STA_NOINIT) return RES_NOTRDY; if (!(sdinfo.type & 4)) sector *= 512; /* Convert to byte address if needed */ if (count == 1) /* Single block read */ { SD_Read_Block(buff,sector); //—читаем блок в буфер count = 0; } else /* Multiple block read */ { } SPI_Release(); return count ? RES_ERROR : RES_OK; return RES_OK; /* USER CODE END READ */ }
  3. Так сектор имеет же абсолютный адрес? зачем его еще на cnt умножать?
  4. Вот так подправил код, и теперь читает больше 512 байт. Все-таки проблема была в процедуре чтения... Осталось только проверить корректно считывает или нет. DRESULT disk_read ( BYTE pdrv, /* Physical drive nmuber (0) */ BYTE *buff, /* Pointer to the data buffer to store read data */ DWORD sector, /* Start sector number (LBA) */ UINT count /* Number of sectors to read */ ) { uint32_t cnt=0; while(count > 0) { w25qReadPage(buff + 1 * cnt, sector * 2); w25qReadPage(buff + 256 + 1 * cnt, sector * 2 + 1); buff += 512; cnt += 512; //sprintf((char*)buff1, "diskread: sector=%lu; count=%d\r\n", sector, count); Usart1_Send_String((char*)buff1); count--; } return RES_OK; } @donec - Тебе большое спасибо за терпение и помощь!
  5. Думаю что вряд-ли . Там просто буфер передается , и по символьно печатается.
  6. Проверил точно поведение программы. В общем, если читаешь меньше 512 и файл больше 512 байт, то тоже нормально все читается. Если файл больше 512 и читаешь больше 512, то не читает вообще ничего из файла. Но при этом отображается что прочитаны байты все.
  7. Смотри, может это наведет на мысли что не так? Когда читаешь данные меньше 512 (именно когда файл содержит меньше 512 байт данных), то читается нормально. Но вот когда файл более 512 байт, то не читается вообще ничего. Даже первые 512 байт.
  8. Размер буфера 4096 , а больше 512 байт прочитать не может.
  9. Осталось победить корректное чтение более 512 байт))) До 512 байт читает нормально. Более 512 байт данных просто вообще не выводит. Получается проблема в обработчике чтения. while(count > 0) { w25qReadPage(buff, sector * 2); w25qReadPage(buff + 256, sector * 2 + 1); buff += 512; sprintf((char*)buff1, "diskread: sector=%lu; count=%d\r\n", sector, count); Usart1_Send_String((char*)buff1); count--; }
  10. Program start!.... diskread: sector=0; count=1 disk_mount=0 #disk= Странно... А может это из-за того что это текстовый файл, и в нем мало данных? В текстовом файле содержится строка: Test data Fatfs! Как раз 16 байт)) Дописал символы: Test data Fatfs!12345 Победа похоже близка )))) Нужно проверить как будет читать более крупные файлы!
  11. Скинь пожалуйста свои библиотеки, которые работают у тебя... Кстати в секции read я прописал так: while(count > 0) { w25qReadPage(buff, sector * 2); w25qReadPage(buff + 256, sector * 2 + 1); buff += 512; sprintf((char*)buff1, "diskread: sector=%lu; count=%d\r\n", sector, count); Usart1_Send_String((char*)buff1); count--; }
  12. Поставил на diskini...() заглушку return 0; Выдает что инициализация успешна и прочитаны байты успешно, но самого текста не видно. То есть либо ошибка в блоке чтения либо еще что то. Program start!.... diskread: sector=0; count=1 disk_mount=0 #disk=Ð5 diskread: sector=32; count=1 diskread: sector=33; count=1 diskread: sector=34; count=1 diskread: sector=35; count=1 diskread: sector=36; count=1 diskread: sector=37; count=1 diskread: sector=38; count=1 diskread: sector=39; count=1 diskread: sector=40; count=1 diskread: sector=41; count=1 diskread: sector=42; count=1 diskread: sector=43; count=1 diskread: sector=44; count=1 diskread: sector=45; count=1 diskread: sector=46; count=1 diskread: sector=47; count=1 diskread: sector=48; count=1 diskread: sector=49; count=1 diskread: sector=50; count=1 diskread: sector=51; count=1 diskread: sector=52; count=1 diskread: sector=53; count=1 diskread: sector=54; count=1 diskread: sector=55; count=1 diskread: sector=56; count=1 diskread: sector=57; count=1 diskread: sector=58; count=1 diskread: sector=59; count=1 diskread: sector=60; count=1 diskread: sector=61; count=1 diskread: sector=5582; count=1 Test data Fatfs!=5582; count=1 read_File_complite! Test=16 open_File_OK1! Тестовый код: int saccess = 0; Usart1_Send_String(buf1); char disk[8]; res = f_mount(&FatFs, disk, 1); sprintf(buf1, "disk_mount=%d #disk=%s\r\n", res, disk); Usart1_Send_String(buf1); if(res !=FR_OK) { Usart1_Send_String("Error_f_mount!\r\n"); } else { if(f_open(&File,"01.txt",FA_READ)!=FR_OK) //f_open(&, ptr, (BYTE)p1) { Usart1_Send_String("Error_open_File1!\r\n"); } else { UINT testBytes=0; f_read(&File, buff1, 256, &testBytes); Usart1_Send_hex((char*)buff1, strlen((char*)buff1)); sprintf((char*)buff1, "\r\nread_File_complite! Test=%d\r\n", testBytes); Usart1_Send_String((char*)buff1); f_close(&File); Usart1_Send_String("open_File_OK1!\r\n"); } А как номер диска узнать? пытаюсь подставить массив текстовый при монтировании , номер диска не показывает: char disk[5]={'T','E', 'S', 'T', 0}; res = f_mount(&FatFs, disk, 1); sprintf(buf1, "disk_mount=%d #disk=%s\r\n", res, disk); Выдает: Program start!.... diskread: sector=0; count=1 disk_mount=0 #disk=TEST
  13. Скачал библиотеку с сайта автора и подключил к проекту. Все снова прописал. И выдает также код 3! FR_NOT_READY, /* (3) The physical drive cannot work */ Вот: Program start!.... disk_mount=3 Error_f_mount! У меня уже голова закипает Что я еще забыл там прописать? Кстати в блок DRESULT disk_read () теперь не заходит, даже при монтировании. backup1.rar
  14. когда убрал первый пункт стало возвращать постоянно значение 3 при монтировании. А это: FR_OK = 0, /* (0) Succeeded */ FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */ FR_INT_ERR, /* (2) Assertion failed */ FR_NOT_READY, /* (3) The physical drive cannot work */
×
×
  • Создать...