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

Инициализация Sd Карты Vinxfs (Help)


Vendein_RaZoR

Рекомендуемые сообщения

В общем кто работал с этой библиотекой может подсказать кое-чего ?)) Карта у меня Micro SD HC Transcend 4 GB FAT32

Во-первых, не понятно как надо подавать питание на SD карту, потому что после включения идёт несколько инструкций инициализации различной периферии и только потом уже SD карта. Поэтому приходится вынимать карту и заново вставлять. Питание получается надо подавать на карту сразу до начала работы с ней что ли ? :unknw:

Во-вторых, операция disk_initialize() проходит успешно и возвращается 0, а вот монтирование образа почему то как то странно идет. После монтирования какой то сбой в файловой системе происходит и на компе не распознается карта и предлагается форматирование в FAT32 опять. В чем может быть дело ? :unknw:

Petit FATFS для CVAVR качал отсюда http://chipenable.ru...-CodeVision.rar

Собственно код для монтирования образа не менял совсем, только низкоуровневые функции немного менял, но они работают, так как инициализация успешна.

FRESULT pf_mount (
FATFS *fs /* Pointer to new file system object (NULL: Unmount) */
)
{
BYTE fmt, buf[36];
DWORD bsect, fsize, tsect, mclst;

FatFs = 0;
if (!fs) return FR_OK; /* Unregister fs object */
if (disk_initialize() & STA_NOINIT) /* Check if the drive is ready or not */
return FR_NOT_READY;
/* Search FAT partition on the drive */
bsect = 0;
fmt = check_fs(buf, bsect); /* Check sector 0 as an SFD format */
if (fmt == 1) {	 /* Not an FAT boot record, it may be FDISK format */
/* Check a partition listed in top of the partition table */
if (disk_readp(buf, bsect, MBR_Table, 16)) { /* 1st partition entry */
fmt = 3;
} else {
if (buf[4]) {	 /* Is the partition existing? */
bsect = LD_DWORD(&buf[8]); /* Partition offset in LBA */
fmt = check_fs(buf, bsect); /* Check the partition */
}
}
}
if (fmt == 3) return FR_DISK_ERR;
if (fmt) return FR_NO_FILESYSTEM; /* No valid FAT patition is found */
/* Initialize the file system object */
if (disk_readp(buf, bsect, 13, sizeof(buf))) return FR_DISK_ERR;
fsize = LD_WORD(buf+BPB_FATSz16-13); /* Number of sectors per FAT */
if (!fsize) fsize = LD_DWORD(buf+BPB_FATSz32-13);
fsize *= buf[bPB_NumFATs-13];	 /* Number of sectors in FAT area */
fs->fatbase = bsect + LD_WORD(buf+BPB_RsvdSecCnt-13); /* FAT start sector (lba) */
fs->csize = buf[bPB_SecPerClus-13];	 /* Number of sectors per cluster */
fs->n_rootdir = LD_WORD(buf+BPB_RootEntCnt-13); /* Nmuber of root directory entries */
tsect = LD_WORD(buf+BPB_TotSec16-13); /* Number of sectors on the file system */
if (!tsect) tsect = LD_DWORD(buf+BPB_TotSec32-13);
mclst = (tsect	 /* Last cluster# + 1 */
- LD_WORD(buf+BPB_RsvdSecCnt-13) - fsize - fs->n_rootdir / 16
) / fs->csize + 2;
fs->n_fatent = (CLUST)mclst;
fmt = FS_FAT16;	 /* Determine the FAT sub type */
if (mclst < 0xFF7)	 /* Number of clusters < 0xFF5 */
#if _FS_FAT12
fmt = FS_FAT12;
#else
return FR_NO_FILESYSTEM;
#endif
if (mclst >= 0xFFF7)	 /* Number of clusters >= 0xFFF5 */
#if _FS_FAT32
fmt = FS_FAT32;
#else
return FR_NO_FILESYSTEM;
#endif
fs->fs_type = fmt; /* FAT sub-type */
if (_FS_FAT32 && fmt == FS_FAT32)
fs->dirbase = LD_DWORD(buf+(BPB_RootClus-13)); /* Root directory start cluster */
else
fs->dirbase = fs->fatbase + fsize; /* Root directory start sector (lba) */
fs->database = fs->fatbase + fsize + fs->n_rootdir / 16; /* Data start sector (lba) */
fs->flag = 0;
FatFs = fs;
release_spi();
return FR_OK;
}

Изменено пользователем Vendein_RaZoR
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

А может присмотреться к vinxfs?

https://github.com/vinxru/VinxFs

И еще, мое неподтвержденное ничем ИМХО - инициализировать spi нужно на низкой скорости, а потом уже можно и увеличить.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

А может присмотреться к vinxfs?

https://github.com/vinxru/VinxFs

И еще, мое неподтвержденное ничем ИМХО - инициализировать spi нужно на низкой скорости, а потом уже можно и увеличить.

Да VinxFS это ж кажется дальнейшее продолжение Petit Fat FS только ещё с плюшками всякими

Не знаю ничего насчет низкой скорости, но, по крайней мере, SRAM и LCD инициализируются нормально и на высокой.

В общем смонтировался у меня образ наконец то ))) Но вопрос остался. Питание надо подавать именно, непосредственно, сразу же до инициализации или можно подавать питание, инициализировать периферию по SPI и только потом уже SD HC карту и так тоже будет работать ??? :unknw:

И как раз после прошивки контроллера ISP программатором, файловая система слетает с SD карты и приходится её форматировать. А подключать приходится питание к SD карте только тогда, когда она присутствует в разъеме, какая то фигня в общем с питанием там происходит.

Изменено пользователем Vendein_RaZoR
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Вот мой опыт борьбы

http://forum.cxem.net/index.php?showtopic=153701#comment-2202913

Если подавать питание на МК и карту одновременно, то перед первым обращением к карте делается задержка.

Ссылка на комментарий
Поделиться на другие сайты

Вот мой опыт борьбы

http://forum.cxem.ne...01#comment-2202913

Если подавать питание на МК и карту одновременно, то перед первым обращением к карте делается задержка.

Делаю задержку даже в 1 секунду, все равно приходится питание карты переподключать после прошивки, первой подачи питания и перезасовывания карты в разъем, чтоб заработало

Насчет пониженной скорости не в курсе, у вас там преобразователь уровней на резисторах, а как дела были с разводкой ? На отладочной плате делали или уже готовый проект на плате прошивали ?

Просто делают все какие то простенькие проекты без периферии, кроме SD карты. А вот насчет конфликтов всяких по SPI когда периферии много - пока ни слова...

Изменено пользователем Vendein_RaZoR
Ссылка на комментарий
Поделиться на другие сайты

Я вот что думаю, раз все так плохо по питанию идет, может делать прерывание по обнаружению SD карты в разъеме (там механический контакт есть на разъеме), а уже потом инициализировать с подачей питания ? :unknw: Просто иначе если флешку вытаскиваем все равно приходится инициализировать заново же

Ладно, попробую VinxFS

Изменено пользователем Vendein_RaZoR
Ссылка на комментарий
Поделиться на другие сайты

Вот так как-то было. Правда потом оказалось, что разъем под карточку я зазеркалил и пришлось сверлить отверстия и переносить на другую сторону + немного МГТФ-а.

post-17417-0-89707900-1456545534_thumb.png

Ссылка на комментарий
Поделиться на другие сайты

Вот так как-то было.

В общем подключил я VinXFS и попробовал инициализацию провести и обнаружил что после посыла команды CMD0 в ответ у меня идет байт у которого 0 - третий байт (обозначил линиями измерительными)

eDiQBGJT5kw.jpg

Че то у меня такое ощущение, что VinXFS какое то ущербное продолжение PetitFAT fs, не в обиду конечно разработчику, но некоторые вещи приходится допиливать руками как в Petit FATFS... :crazy:

И по питанию кстати та же фигня происходит :vava:

Изменено пользователем Vendein_RaZoR
Ссылка на комментарий
Поделиться на другие сайты

В общем непойми чего с этим VinXFS, инициализация выдает ошибку на sd_check(). В чем может быть причина кто нибудь знает ? (хотя я уже чего-то не надеюсь на помощь ((( ) Даже в протеусе инициализация срывается на sd_check()

Изменено пользователем Vendein_RaZoR
Ссылка на комментарий
Поделиться на другие сайты

Запитывать карту можно сразу.

После включения выдерживается пауза в пару секунд, дергается только сброс карты.

Инициализация проходит на пониженой частоте. При увеличении частоты инита иногда выдает ошибки и ммс и сдшц и тд.

Ну и не забывать про подтяжку резисторами.

Изменено пользователем fuckir

В поисках работы..

Looking for job

Ссылка на комментарий
Поделиться на другие сайты

Запитывать карту можно сразу.

После включения выдерживается пауза в пару секунд, дергается только сброс карты.

Инициализация проходит на пониженой частоте. При увеличении частоты инита иногда выдает ошибки и ммс и сдшц и тд.

Ну и не забывать про подтяжку резисторами.

Подтяжку конечно не делал, но с ней, мне кажется, все равно работать должно нормально, импульсы то нормальные идут (там же нет каких нибудь открытых коллекторов на выходе, оно и видно), а задержку хоть 1, 2, 10, 20, 30 сек делал - все равно не помогает. На пониженной частоте тоже инициализировал, даже на fosc/128 - все равно та же ерунда, нужно переподключать питание для SD карты чтобы заработало.

Ссылка на комментарий
Поделиться на другие сайты

А вон оно как даже. А Атмел с Микрочипом и не знали, что можно обойтись без подтягивающих резисторов (хотя в определенных случаях и можно) и лепят их на отладки, а тут такое "ноу хау", да еще и с питанием.

С частотой тоже повеселили; Чан и Джасио наверное "самоустранились".

В поисках работы..

Looking for job

Ссылка на комментарий
Поделиться на другие сайты

А вон оно как даже. А Атмел с Микрочипом и не знали, что можно обойтись без подтягивающих резисторов (хотя в определенных случаях и можно) и лепят их на отладки, а тут такое "ноу хау", да еще и с питанием.

С частотой тоже повеселили; Чан и Джасио наверное "самоустранились".

Ну дык а что не так то тогда ?

Могу видео работы выложить, там видно четко, что не сразу когда я карту вставляю инициализация проходит успешно

http://vk.com/video164586788_172065445

Ссылка на комментарий
Поделиться на другие сайты

Сделай подтяжку линий данных и тогда сразу будет успешно проходить инициализацию

У меня вот проблема в другом, контроллер STM32F215 считываю и записываю в карту по блокам 512 байт без проблем. также прекрасно работает запись и чтение мультиблока по 51200 байт.

Подключил VinxFS, не могу элементарно создать файл на sd карте, код типа того:

fs_init();

sprintf((char *)buf, "DCIM/Doc.txt");

fs_create();

fs_write("привет", 6);

while(1){};

Файл не появляется, сомнения у меня в том, правильно ли я задаю имя файла в массив buf? Вроде как в h файле написано:

uint8_t fs_open0(uint8_t what); /* Открыть/создать файл или папку, имя в buf. Open/create file or foder, name in buf *//* Derived from the function fs_open0 */

/* Производные от функции fs_open0 */

uint8_t fs_open(); /* Открыть файл */

uint8_t fs_opendir(); /* Открыть папку */

#define fs_openany() fs_open0(OPENED_NONE) /* Открыть файл или папку */

#define fs_create() fs_open0(OPENED_FILE) /* Создать файл */

#define fs_createdir() fs_open0(OPENED_DIR) /* Создать папку */

Что я делаю не правильно? непонятно

Ссылка на комментарий
Поделиться на другие сайты

Так тоже не хочет, через дебаггер посмотрел по шагам, в общем после инициализации карты при поиске файловой системы на карте выдает ошибку:

/* Ищем файловую систему */

bsect = 0;

while(1)

{

if(sd_readBuf(bsect)) return 1;

uint16_t temp = LD_WORD(buf + 510);

if(temp == 0xAA55)

{

if(LD_WORD(buf + BS_FilSysType ) == 0x4146) break;

if(LD_WORD(buf + BS_FilSysType32) == 0x4146) break;

/* Возможно это MBR */

if(bsect == 0 && buf[MBR_Table+4])

{

bsect = LD_DWORD(buf + (MBR_Table + 8));

if(bsect != 0) continue;

}

}

abort_noFS:

lastError = ERR_NO_FILESYSTEM; return 1;

}

temp здесь у меня равен 65535, а должно быть АА55. Буду копать дальше. спасибо!

Ссылка на комментарий
Поделиться на другие сайты

Обнаружил что

Status = SD_ReadBlock(buf, sector, 512);

считывает всего 16 байт, остальное куда девается не понятно. Попробовал считать

SD_ReadMultiBlocks((uint8_t *)&StorageA, 0x00, 512, 24);

Считалось всё четко! Так что дальше копаю в направлении почему сингл блок неверно читается.

Ссылка на комментарий
Поделиться на другие сайты

А вон оно как даже

Могу видео работы выложить, там видно четко, что не сразу когда я карту вставляю инициализация проходит успешно

И что? Я вам уже написал, что для начала нужно... Делал когда-то макет. Тестил библиотеки Джасио и Чена, ну и свои писал:

youtube.com/watch?v=wDr4hh4CybE

Изменено пользователем fuckir

В поисках работы..

Looking for job

Ссылка на комментарий
Поделиться на другие сайты

Хм... А какую FS используете ? Можно ссылочку ?

Если от Чена, то там всё просто :

f_open - Open/Create a file

Единственное, что нужно, это разрешить ФС делать запись. Конфигурируется это в файле ffconf.h макросами _FS_READONLY и _FS_MINIMIZE

Ссылка на комментарий
Поделиться на другие сайты

В общем вроде как разобрался. Оказывается у меня проблема еще до файловой системы:

При обращении к функциям

Status = SD_ReadBlock(Buffer_Block_Rx, NumberOfBlock, BLOCK_SIZE);

Status = SD_WrietBlock(Buffer_Block_Tx, NumberOfBlock, BLOCK_SIZE);

передавая параметру NumberOfBlock значение 0 всё работает замечательно. При других значениях система зависала в дебрях DMA в ожидании завершении операции чтения или записи.

Думал передавая ему значение 1,2 и т.д. я задаю адрес блока (сектора) оказывается этот адрес должен быть кратно размеру сектора. то есть надо было писать:

Status = SD_ReadBlock(Buffer_Block_Rx, NumberOfBlock * BLOCK_SIZE, BLOCK_SIZE);

Status = SD_WrietBlock(Buffer_Block_Tx, NumberOfBlock * BLOCK_SIZE, BLOCK_SIZE);

Тогда никакого зависания не происходит работает все замечательно.

Дальше буду пробовать уже FS. Отпишусь как что то получится.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Тянет он , проверено и на 32 Ом проверено, но я бы лично ушной усилитель без буфера не стал делать, это у меня товарищ(уже покойный к сожалению, пить надо меньше) развлекался.
    • Мне показалось, что я ответил на Ваш вопрос... но видимо не убедительно... хорошо, беру такой LOGO! 12/24RC   (6ED1 052-1MD00-OBA5), последний раз на него питание подавали в году так эдак в 2010_м... достал его из закромов, подал питание и программа стартанула в штатном режиме... единственно как и писал ранее часы сброшены до заводской установки... надеюсь теперь Вас убедит то, что девайс если сохранил программу 14 лет, то особых поводов у него нет, чтобы её сбрасывать в дальнейшем.  Не совсем... ПО версии 8 поддерживает и старые устройства, а я спрашивал не про ПО, а про сами устройства какой версии будете использовать... впрочем уже и неважно...  Удачи в начинаниях. От темы отписался, более не потревожу. 
    • Точно не могу сказать, не разбирал я не разу Лого, по факту должна сохраниться. Много чего разбирал, не было проблем при рассоединении этажерок.
    • Это только по одному плечу? По второму плечу нормально?
    • а ответ на вопрос темы от Вас будет? Т.е. сохранится ли рабочая программа при разъединении верхней и нижней плат?  Потому как если ответ однозначно положительный, то этот геморрой с самопальным шнурком мне нафиг не нужен. 
    • Всем привет, комрады!  Пользуюсь данным усилителем чуть больше 13 лет, все устраивает. Питается от ТС-180-2. Понадобилось заменить этот трансформатор на другой поменьше, думаю на торе заказать, а какой именно по характеристикам - пытаюсь разобраться. Стыдно признаться, ни разу не смотрел какие напряжения, какие токи в усилителе... собрал - включил и забыл. Сейчас придется разбираться.  Правильно ли понимаю что общая мощность транса = токи и напряжения каждой лампы, + накалы?  Тогда судя по даташитам, 6н1п на два канала - (250в*0,0075мА)*2 + (6,3в*0,6А)=3,75Вт+ 3,8Вт=~7,5Вт.  А 6п14п=(250в*0,048А+250В*0,005А+6,3В*0,76А) * 2 = (12Вт+1,25Вт+4,8Вт ) * 2 лампы = 18Вт * 2  = 36Вт. Хотя две лампы 6п14п питаются от одной обмотки 6,3в.  Итого меньше 50 Вт, ну и с запасом небольшим 60-80Вт.  А вот как указать в заказе? Схема питается 275в, то есть вторичку делать 200в, а ток?  То есть две выходных лампы уже 100мА, запас если делать как правило 10-20%, то примерно 200в * 120мА ?  НУ с накалом тут проще) Задача в том что нужно как можно менее габаритный трансформатор, увы, ТС-180 не влезает в новую конструкцию. Ну и для понимания, сейчас начну усилитель для наушников собирать, пригодится.    
    • Лучше не надо.  Буфер добавляет всего 6 копеечных деталей а надëжность и мощность увеличит в разы, и даст работать даже с низкоомными наушниками. Даже 32 Ом наушники один ОУ из JRC4558 не потянет. 
×
×
  • Создать...