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

Флешка на AT90USB162. Проблемы с форматированием.

Ср фев 06, 2019 00:40:17

Всем заглянувшим доброго времени суток...

Итак, есть задача: на МК AT90USB162 и микросхеме памяти AT45DB161E сделать "флешку" объёмом 2 МБ (в дальнейшем там будет храниться конфигурационный файл для некоторого устройства).

На данный момент я сумел скрестить между собой библиотеку USB от Atmel (по аппноуту AVR276), часть реализации класса MassStorage и обмена с AT45DB161 из библиотеки LUFA, а также написал обработку команд SCSI по мотивам этой статьи: http://we.easyelectronics.ru/AVR/usb-fl ... ystvu.html.
Сразу скажу, чтобы не было разнообразных вопросов: да, я знаю, что в комплекте с LUFA идёт пример реализации MassStorage Class. Но этот код занимает почти 85% памяти AT90USB162, поэтому его я использовать не могу.

Моя "флешка" успешно определяется компьютером (Win XP, Win 7) как "Запоминающее устройство для USB", появляется "Съёмный диск". В его свойствах указан объём 0 байт и файловая система RAW. При попытке открыть его выдаётся сообщение с предложением отформатировать диск (что, впрочем, вполне естественно).
А вот при попытке отформатировать творится что-то странное. Форматирование, вроде как, происходит (и даже отображается правильный объём 2 МБ), в некоторые логические блоки памяти производится запись данных. Повторное чтение записанного также проходит без ошибок. Но в конце выдаётся сообщение, что форматирование не удалось. :cry:
В логах обмена по USB никаких проблем я не обнаружил, что приходит с компьютера - то и пишется в память. Но вот приходит какая-то фигня. В нулевом секторе (где, как я понимаю, должна быть MBR) оказывается какой-то мусор, похожий на кусок реестра:
Спойлер
Код:
00000000  88 03 08 00 88 03 08 00 65 00 6D 00 5C 00 43 00  ........e.m.\.C.
00000010  75 00 72 00 72 00 65 00 6E 00 74 00 43 00 6F 00  u.r.r.e.n.t.C.o.
00000020  6E 00 74 00 72 00 6F 00 6C 00 53 00 65 00 74 00  n.t.r.o.l.S.e.t.
00000030  5C 00 43 00 6F 00 6E 00 74 00 72 00 6F 00 6C 00  \.C.o.n.t.r.o.l.
00000040  5C 00 44 00 65 00 76 00 69 00 63 00 65 00 43 00  \.D.e.v.i.c.e.C.
00000050  6C 00 61 00 73 00 73 00 65 00 73 00 5C 00 7B 00  l.a.s.s.e.s.\.{.
00000060  35 00 33 00 46 00 35 00 36 00 33 00 30 00 44 00  5.3.F.5.6.3.0.D.
00000070  2D 00 42 00 36 00 42 00 46 00 2D 00 31 00 31 00  -.B.6.B.F.-.1.1.
00000080  44 00 30 00 2D 00 39 00 34 00 46 00 32 00 2D 00  D.0.-.9.4.F.2.-.
00000090  30 00 30 00 41 00 30 00 43 00 39 00 31 00 45 00  0.0.A.0.C.9.1.E.
000000A0  46 00 42 00 38 00 42 00 7D 00 00 00 30 00 42 00  F.B.8.B.}...0.B.
000000B0  39 00 45 00 43 00 31 00 7D 00 00 00 5C 00 44 00  9.E.C.1.}...\.D.
000000C0  65 00 76 00 69 00 63 00 65 00 5C 00 7B 00 31 00  e.v.i.c.e.\.{.1.
000000D0  30 00 45 00 45 00 37 00 35 00 46 00 43 00 2D 00  0.E.E.7.5.F.C.-.
000000E0  38 00 35 00 45 00 41 00 2D 00 34 00 46 00 30 00  8.5.E.A.-.4.F.0.
000000F0  39 00 2D 00 38 00 30 00 30 00 41 00 2D 00 46 00  9.-.8.0.0.A.-.F.
00000100  30 00 36 00 44 00 39 00 31 00 34 00 46 00 41 00  0.6.D.9.1.4.F.A.
00000110  38 00 42 00 32 00 7D 00 00 00 5C 00 44 00 65 00  8.B.2.}...\.D.e.
00000120  76 00 69 00 63 00 65 00 5C 00 7B 00 46 00 45 00  v.i.c.e.\.{.F.E.
00000130  45 00 36 00 32 00 46 00 32 00 35 00 2D 00 42 00  E.6.2.F.2.5.-.B.
00000140  44 00 41 00 37 00 2D 00 34 00 46 00 43 00 30 00  D.A.7.-.4.F.C.0.
00000150  2D 00 42 00 31 00 30 00 45 00 2D 00 35 00 43 00  -.B.1.0.E.-.5.C.
00000160  43 00 35 00 42 00 34 00 46 00 35 00 36 00 43 00  C.5.B.4.F.5.6.C.
00000170  38 00 38 00 7D 00 00 00 5C 00 44 00 65 00 76 00  8.8.}...\.D.e.v.
00000180  69 00 63 00 65 00 5C 00 7B 00 32 00 42 00 43 00  i.c.e.\.{.2.B.C.
00000190  35 00 34 00 33 00 39 00 39 00 2D 00 34 00 45 00  5.4.3.9.9.-.4.E.
000001A0  46 00 45 00 2D 00 34 00 35 00 34 00 37 00 2D 00  F.E.-.4.5.4.7.-.
000001B0  38 00 39 00 45 00 34 00 2D 00 33 00 35 00 32 00  8.9.E.4.-.3.5.2.
000001C0  30 00 35 00 46 00 33 00 32 00 41 00 45 00 43 00  0.5.F.3.2.A.E.C.
000001D0  46 00 7D 00 00 00 5C 00 44 00 65 00 76 00 69 00  F.}...\.D.e.v.i.
000001E0  63 00 65 00 5C 00 4E 00 64 00 69 00 73 00 57 00  c.e.\.N.d.i.s.W.
000001F0  61 00 6E 00 49 00 70 00 00 00 00 00 00 00 00 00  a.n.I.p.........

Впрочем, иногда там такого не наблюдается, но тогда там какой-то другой мусор. Создаётся впечатление, что туда попадает произвольный кусок из оперативной памяти. :shock:

В другие секторы тоже пишется какая-то ерунда. Только в последний, 4095-й, попадает пачка из 512 нулей.

В общем, я в замешательстве. Моё устройство честно выполняет все команды, которые на него приходят с ПК, но вот сами команды... Они точно флешку не отформатируют. :dont_know:
Ровно такое же поведение и на двух других компьютерах, и под Win XP, и под Win 7.

Вот логи обмена по USB при энумерации и при попытке отформатировать:
https://yadi.sk/d/qwDWmBuFNGG-iQ
https://yadi.sk/d/Hv61NH5fzKFPSA

Буду очень признателен, если кто-нибудь сможет помочь разобраться, в чём дело... :beer:
Ответить