Ну, а если бы я понимал, то вряд ли повторял чужое
Так это повод разобраться и начать делать своё. Там же очень простой код с кучей комментариев. Правда, для того, что вы хотите (перечитать каталог) нужно заново делать переинициализацию SD-карты и переустановку всех нужных переменных, а тут могут быть нюансы.
Цитата:
Да нет, может и через две позиции, и через три перескочить. Каждый раз по-разному.
Для того чтобы быть телезрителем необязательно самому собирать телевизор
P.S. da-nie, чуть больше попользовался магнитофоном и не совсем пойму – то ли это небольшой дребезг, то ли я на кнопку слишком долго жму, они у меня немного тугие. Это что-то типа двойного клика – один быстро кликает, другой так не умеет и у него получается более длинная пауза между кликами (ну, для этого имеется соответствующая настройка). С возрастом сноровка теряется Где регулировать время задержки между нажатиями на кнопку?
Кстати, кнопки "местами поменял", спасибо.
Последний раз редактировалось oleg88 Вт янв 24, 2017 05:05:10, всего редактировалось 4 раз(а).
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Ошибочку нашел. Но по какой-то причине проявляется только на некоторых SD картах. Например, у меня из пяти карт на четырех ошибка проявляется, на одной нет. Итак, беру карту, называю ее ZX_Games, в корень записываю три, четыре TAP файла. В магнитофоне имя первого файл почему-то отображается как XGMS. Имена всех последующих файлов отображаются корректно. Т.е. неверно отображается только имя первого файла (сам файл воспроизводится) и оно формируется из 2, 4, 6, 8 символов названия карты - "ZX_Games" -> "XGMS".
Назв.карты -> Имя 1-го файла 123456789A -> 2468A 1234567 -> 246 12345 -> 24 123 -> 2 1 -> пусто
Плохо. Чтобы исправить, придётся, наверное, вспоминать FAT и пытаться понять, в чём дело... Когда это будет, правда, не скажу.
У кого-нибудь такая ошибка тоже проявляется? Очень похоже, что на месте имени первого файла записано что-то левое из имени карты. Либо МК читает не из той области таблицы FAT, что странно.
Спасибо за конструкцию! Собрал еще один мафон - все работает безупречно! От себя добавлю пару плат. Платы сделаны под ЛУТ, да хоть под маркер, дорожки и площадки по возможности большие. Добавил подсветку экрана.
Очень похоже, что на месте имени первого файла записано что-то левое из имени карты.
Но на РС-то карта читается правильно. Еще раз обращу внимание – у меня есть пара карт, с которых имя первого файла читается корректно.
P.S. Не знаю по какой причине, но мне не приходят нотификации с форума, поэтому ответил с такой задержкой.
Добавлено after 11 minutes 34 seconds: Кстати, Вы как-то сказали
da-nie писал(а):
Поискал материал, оказалось, всё-таки карты на 4 ГБ уже SDHC, а не SD. Поэтому с ними работать не будет. Максимальный размер 2 ГБ. Можно, конечно, сделать поддержку карт SDHC, но FAT16 всё равно ограничена 2 ГБ.
Здесь главное не сколько потеряется места на SDHC карте при ее форматировании в FAT16, а доступность карт. Карты объемом 1-2Гб становится найти все труднее и труднее с каждым днем. Ну, а купить карту, например на 8Гб и потерять 6Гб при ее форматировании в FAT16 – не так важно при ее-то "копеечной" цене.
Но на РС-то карта читается правильно. Еще раз обращу внимание – у меня есть пара карт, с которых имя первого файла читается корректно.
У меня все карты читаются верно. И, я так понял, у остальных тоже. Но с другой стороны, у вас тоже какой-то дребезг кнопок был, которого ни у кого не было. Отсюда можно заключить, что у вас устройство как-то специфически работает само по себе. Попробуйте зафильтровать питание карты (3.3 В) конденсаторами 0.1 мкФ и 100 мкФ. Есть подозрение, что у вас ошибки чтения карты (я вроде бы CRC принятых блоков 512 байт не проверяю).
Цитата:
Карты объемом 1-2Гб становится найти все труднее и труднее с каждым днем.
Конденсаторы по питанию я поставил изначально и на МК, и на картридер. Если бы проблемы были с питанием, или возникали ошибки с чтением карты, то глюк не воспроизводился бы в точности при каждом включении магнитофона/чтении карты.
Мысля, появилась – может быть не карты в магнитофоне читаются с ошибкой, а как-то неверно/иначе/по-разному может записаться информация на карту. На РС это не влияет, т.к. там информация с карты может читаться другими, более полными библиотеками. Например, с более полной или иной корректировкой ошибок. Я вспомнил, у меня в наличии два картридера, и они как-то по-разному работают (читают, пишут, форматируют карты), т.е. конечный результат у них может быть разный. Буду проверять.
Кажется, понял, в чём дело. У файла бывает атрибут "Имя диска" (хотя для имени диска есть и отдельное поле, но там 11 символов). Попробуйте вот эту прошивку - я её не проверял в железе (я на работе сейчас, так что устройства с собой нет).
[файл удалён]
А изменил я там вот что:
Код:
...
if (res==true) { unsigned char type=GetByte(sFATRecordPointer.CurrentFolderAddr+11UL); if (type&ATTR_VOLUME_ID) return(false);//этот файл - имя диска if ((type&ATTR_DIRECTORY)==0)//это файл { unsigned char a=GetByte(sFATRecordPointer.CurrentFolderAddr+10UL); unsigned char b=GetByte(sFATRecordPointer.CurrentFolderAddr+9UL); unsigned char c=GetByte(sFATRecordPointer.CurrentFolderAddr+8UL); if (!(a=='P' && b=='A' && c=='T')) return(false);//неверное расширение } else//если это директория { unsigned char a=GetByte(sFATRecordPointer.CurrentFolderAddr); unsigned char b=GetByte(sFATRecordPointer.CurrentFolderAddr+1UL); if (a==(unsigned char)'.' && b==(unsigned char)'.') *directory=-1;//на директорию выше else *directory=1;//на директорию ниже }
...
Вписал if (type&ATTR_VOLUME_ID) return(false);//этот файл - имя диска Вроде бы должно помочь.
Это, в каком файле? Я прошивку изменял – переназначил кнопки, окультурил отображение информации на дисплее, плюс задержки под китайский дисплей свои. Поэтому готовую прошивку мне неудобно шить, я свою поправлю.
К сожалению не помогло. Да и пока закончу эксперименты ибо, во-первых, панелька скоро придет в негодность от частых извлечений МК. Нужно сделать так чтобы программировать МК не вынимая его из панельки. Во-вторых, нужно МК покупать. У меня уже второй дохнет (ошибка записи по одному из адресов вываливается). Наверное, купил дерьмовые. У них даже маркировка уже стерлась. Ох уж эти китайцы
Вот тут вроде бы все места с контролем типа файла исправил.
К сожалению не помогло
da-nie писал(а):
А вы что же, убили опять контроллер? Как вам это удалось?
Не знаю. Один МК раз десять записал, второй раз двадцать и теперь при записи сразу же вываливается ошибка и запись прекращается. Наверное, качество плохое, потер пальцем надпись на МК, и она стерлась, ну не может же быть такое. Ну, либо я что-то не так делаю. У меня есть еще один, записывал уже раз пять, больше не буду, а то вообще останусь без магнитофона.
P.S. Забыл сказать. С новым файлом fat.h появляется какая-то запись на LCD. После сообщения Объем SD карты …МБ, в нижней строке LCD, секунд на 10, появляется сообщение eb_55_aa (подчеркивание это пробел) и затем уже идет сообщение Файловая система FAT16- ок.
Странно, что не помогло. Больше, вроде как, ничего такого необычного я не вижу в программе.
А надпись можно убрать в файле fat.h (там sprintf стоит)- это просто сигнатура FAT- остатки от отладки. Просто были карты, на которых не находилась файловая система - почему-то при чтении были разные байты каждый раз и сигнатура не отыскивалась. Вот я считанные байты и вывел на экран и забыл убрать после этого.
Цитата:
Один МК раз десять записал, второй раз двадцать и теперь при записи сразу же вываливается ошибка и запись прекращается.
Это очень странно. А вот интересно, не может у вас МК просто сбоить при некоторых условиях, которые складываются с теми четырьмя картами, на которых и выводится имя диска. Дело в том, что даже если бы я не смотрел бы тип файла, который является именем диска, то выводились бы всё равно все буквы имени - это же просто файл с нулевой длиной и атрибутом "Имя диска". А у вас всё не так. Может быть, с этих карт читаются некие данные, которые контроллер искажает в памяти (достаточно 1 биту в нужном месте и поедет смещение корневого каталога, а с ним и имена файлов)? Скажем, когда бит 1 должен быть всё хорошо, а когда 0, контроллер всё равно ставит 1 и получает левое смещение. В китайских контроллерах бывает и не такое. Это обсуждалось много раз на том же easyelectronic. Попробуйте заведомо исправный и хороший контроллер погонять.
Цитата:
потер пальцем надпись на МК, и она стерлась, ну не может же быть такое.
Надпись, конечно, не очень стойкая, но так легко она стираться вроде как не должна.
Сейчас этот форум просматривают: avtar и гости: 31
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения