Главная > AVR, Just life > Карты и ШИМ. Китайский сюрприз.

Карты и ШИМ. Китайский сюрприз.

Здравствуйте, товарищи!

Сначала немного лирики. Некоторые тут интересовались, чего это я ничего не пишу. Все очень просто — я учусь и работаю. Работа достаточно интересная, но заказчик(и) настаивают, чтобы для широкой общественности я ничего про нее не писал (да и вряд ли практически фундаментальное исследование будет интересно на страницах этого блога). А на свои проекты времени как-то не хватает (да и текущее занятие удовлетворяет мой исследовательский пыл). Такие дела.

Но, кстати говоря, мне тут подвернулся сторонний проектик, который я скорее всего опишу в ближайшее время. О небольшом, но важном факте, открытом в процессе работы над оным, и пойдет речь ниже.

Надо сказать, что по сути упомянутый проект сводится к обычному WAV-плееру с SD-карточкой. Забегая вперед скажу, что для него я написал оригинальный модуль ШИМ-вывода звука 16 кГц/8 бит с двойной буферизацией и механизм упрощенного доступа к содержимому карточки. Впрочем, про все это я надеюсь более подробно рассказать в следующих статьях, а пока важно то, что кроме всего прочего я подключал SD-карту (с помощью ранее написанного модуля). Про SD-карты и пойдет речь.

Итак, написал, собрал на макетке, залил, включил и… Ну, оно, конечно, зазвучало. Но как-то странно, с отчетливым металлическим призвуком. Поначалу я списал это на отсутствие фильтрации ШИМ; однако здравый смысл подсказывал, что при частоте ШИМ в 32 килогерца возможность его влияния на звук, мягко говоря, очень сомнительна. Тем более, что тон призвука чрезвычайно смахивал на частоту смены буферов (двойная буферизация, помните?)… В общем, я нагенерировал тестовых синусов и залил на карточку вместо целевого файла.

Сначала, памятуя о тоне призвука, я грешил на ошибки в реализации вывода звука. Чтобы проверить эту гипотезу, я загрузил тестовый семпл (512 байт) в память МК и стал воспроизводить его оттуда. Однако в этих условиях все работало (да, кстати, я наконец-то купил себе новый модный осциллограф):

deb1

Если что, сигнал предполагался именно такой — период синуса 50 Гц с полочкой из нулей. А вот что я получал при чтении данных с SD-карты…

deb2

Второй канал — отладочные импульсы, соответствующие сбросу счетчика адресов. Видно, что все отрабатывает как надо, адрес сбрасывается каждые 4 буфера (размер буфера 128 байт, семпла — 512 байт), но сигнал имеет такой вид, как будто постоянно воспроизводится только первая четверть (8 мс). Теперь стала понятна природа призвука — из каждого сектора реально воспроизводились только первые 128 байт, и потому звук, естесственно, был очень искаженным, хотя и узнаваемым, так как на длинных файлах новые данные все же регулярно поступали.

Чего я только не делал, как я только не вертел свой код… Все бесполезно — читались только первые 128 байт сектора, хотя адреса выставлялись корректно. В конце концов, путем ручного перебора стартовых адресов чтения с параллельным наблюдением за выходным сигналом я дошел до истины…

Не буду томить читателя — дело оказалось в карточке! Да, в дешевой китайской SD-карточке. Если кто помнит, стандарт, вообще говоря, позволяет читать произвольное количество байт с произвольного смещения при условии, что регион чтения не пересекает границу физических блоков (выравнивание по 512 байт). Но, видимо руководствуясь тем фактом, что большинство систем читает данные с карточек именно выравнивая по границе 512 байт и именно по 512 байт, производители карточки забили на возможность произвольного чтения. Любой адрес округлялся до ближайшей нижней границы. Соответственно, при моей системе адресации читался только первый блок каждого сектора…

Я поехал в магазин и купил карточку Silicon Power вместо Qumo, стоившей мне полутора дней раздумий. После этого глюки пропали и звук стал воспроизводиться без искажений. Я, кстати, даже удивился, что 16 кГц/8 бит так пристойно звучат.

Выводы.

Товарищ, будь бдителен! В природе встречаются карточки, не соответствующие стандарту. В частности, карточки бренда Qumo. Такие дела.

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

Рубрики:AVR, Just life
  1. Роман
    03/02/2015 в 02:26

    с китайцами вообще нужен глаз да глаз! на том же ебее полно откровенного брака, особенно если вы выигрываете аукцион, китайцу легче сделать вид, что он отправил товар или отправить брак и затем вернуть часть или даже 100% денег, чем отдавать по дешевке нормальный товар…
    так например я натыкался несколько раз на SD карты и аккумуляторы …
    карты брал как с аукциона так и по цене продавца (брал у разных продавцов), один хрен вместо 32Гб реально 6-7Гб…🙂 аппаратно она на 32Гб и «отформатирована» тоже как 32Гб
    на лицо реализация массового заводского брака, а почему бы и нет!? с паршивой овцы как говорится…надо же этот хлам куда-то девать, в ряде случаев прокатит… но вообще вещь коварная, пишешь на нее файл, вроде все норм, затем пишешь другой, а первый может повредиться…

  2. XPEH
    16/12/2013 в 16:08

    А что за «новый модный осциллограф»?

    • YS
      16/12/2013 в 21:35

      UNI-T UTD2052CL — 2 ch/50 MHz/500 MS/s

      Вполне добротный прибор, брал где-то за 12K. Единственное, что вызывает удивление, это FFT. Но, может, я просто не умею использовать этот режим (мануал читал, если что : )…

      • XPEH
        17/12/2013 в 16:11

        А почему взял именно его, а не какой-нить SIGLENT 1102CML или Rigol DS1052E или Owon SDS7102?

        • YS
          17/12/2013 в 21:23

          У него было самое лучшее соотношение цена/возможности из тех приборов, что были в магазине рядом. Рядом брал потому что

          а) не люблю долго ждать ключевые вещи
          б) по таможенным нормам осциллографы не относятся к приборам личного пользования (!), и посылку из заграницы могут завернуть. Прецеденты были, если интересно, ищите пруф на Хабре.
          в) разница цен на ebay и в локальном магазине была незначительна.

          Единственные глюки, которые замечены, хотя может это и не баги, а фичи:

          — измерения в режиме FFT надо производить двумя курсорами. Курсор в режиме track показывает ересь (измеряет относительно центра экрана, точки синхронизации в time domain).

          Поясняющая картинка.

          — скриншоты он сохраняет почему-то в половинном разрешении относительно экрана (400×240 при экране 800х480).

          А так вообще хороший прибор, рекомендую. По сравнению с C1-101 синхронизацию захватывает железно.🙂

        • YS
          17/12/2013 в 21:30

          А, кстати, еще в нем есть вентилятор, который таки гудит. В общем, минусом это назвать нельзя, но стоит иметь в виду.

          • Павел
            25/12/2014 в 21:46

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

            • YS
              25/12/2014 в 22:00

              Хм. Но зачем-то же они его поставили? Мб обеспечивает тепловой режим на заданном уровне для сохранения метрологических характеристик?

    • YS
      16/12/2013 в 21:38

      Вообще скажу, процесс отладки с нормальным осциллом — это просто сказка. Если бы не он, я бы в жизни не допер до упомянутого в статье факта.

      • XPEH
        17/12/2013 в 16:14

        Это да, на работе есть осцилл, попользовался и очень захотелось прикупить домой, сейчас мучаюсь выбором.

  3. 16/12/2013 в 14:20

    Да, это интересный выверт, спасибо, буду иметь ввиду.

    • YS
      16/12/2013 в 21:36

      Не за что.🙂

      Я сам до последнего не верил, что это глюк именно карточки.

  1. 27/12/2013 в 02:56

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s