Практическое использование модуля на микросхеме CH376S (часть 2)

Практическое использование модуля на микросхеме CH376S (часть 2)

    Из этой статьи вы узнаете о дополнительном  инструменте, который нам понадобится, сделаем первые шаги по работе с файлами - откроем файл, узнаем его размер и разберемся с конвертацией полученных результатов.

   

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

RapidTables это онлайн конвертер из ASCII в Hex и обратно, он удобен тем что позволяет вставлять (знак разделитель, в нашем случае '$')
конвертер из ASCII в Hex и обратно

Как я понял из DataSheet имена файлов для чтения/записи с (на) USB устройство, должны быть указанны в заглавном виде, например: TEST.TXT, но мы это проверим на практике, дабы удостовериться в этом).  
Подготовим наш flash накопитель (он должен быть отформатирован в файловую систему FAT( пусть это будет 32) в операционной системе Windows и в настройках всё должно быть по умолчанию.
На flash накопителе в корне создаём файл: TEST-1.TXT (Заполним его какими-нибудь случайными данными) что бы файл был не пустым, это нам понадобится в дальнейшем, а также создадим копию этого файла, но только всё прописными буквами test.txt

вот такой текстовый файл получился у меня

ну и ещё для одного теста запишем на flash какой-нибудь большой файл, например фильм.

вот что получилось на flash накопителе
Итак, файлы имеют следующие размеры:
  • TEST-1.TXT - 192 байта;
  • test-2.txt - 192 байта;
  • файл film.mkv  - 779 723 203 байт.
Итак, первым делом подключимся (см. часть 1), и проведем инициализацию:
1. $57$AB$05 - сброс контроллера (RESET_ALL);
2. $57$AB$15$06 - переключение в режим USB (SET_USB_MODE) - ответ должен быть: 51 15 (значит всё хорошо, продолжаем); 
3. $57$AB$30 - подключение USB Flash (DISK_CONNECT) - ответ должен быть: 14 (значит всё хорошо, продолжаем);
4. $57$AB$31 - монтируем USB Flash (DISK_MOUNT) ответ должен быть: 14 (значит всё хорошо, продолжаем);
Ну и теперь надо набрать следующую команду (только сначала её разберем на составные части)
5. $57$AB$2F$2F+FileName+$00 - (SET_FILE_NAME)
$57$AB - синхронизационные байты
$2F - команда SET_FILE_NAME
$2F - "\"  - ASCII символ обозначающий корневой каталог, знак может быть как "\", так и "/" - это не будет ошибкой
FileName - это сделано для удобства восприятия (здесь конечно же должна быть шестнадцатеричная последовательность), здесь то нам и понадобится RapidTables
вводим TEST-1.TXT
Итак, наш FileName получился таким: 54$45$53$54$2D$31$2E$54$58$54
$00 - свидетельствует об окончании имени файла 

Ну и окончательно наша команда будет выглядеть так:
$57$AB$2F$2F$54$45$53$54$2D$31$2E$54$58$54$00 - пометил красненьким символ (не забудьте вставить $)
ничего не произойдет, но будьте уверенны, если всё сделано правильно, то чип запомнит что работать надо именно с указанным файлом.

6. $57$AB$32 (FILE_OPEN) - открываем файл (ответ -14, значит всё хорошо)

7. $57$AB$0C$68 (GET_FILE_SIZE) получаем размер файла (команда $0C$68) - в ответе мы получим данные из четырех байт - это unsigned long (4 байта) 32 разрядное значение.

При этом передача идет с младшего байта (в нашем случае):
0 байт - С0
1 байт - 00
2 байт - 00
3 байт - 00

Наверное многие знают как можно эти значения преобразовать (например) в десятичный вид, но есть люди которые этого не знают. Есть разные способы, но приведу на мой взгляд самый понятный. Давайте попробуем:
Наша Задача последовательно перебирать каждый байт кроме первого (его значение сразу запоминаем) умножать его на максимальное количество значений помещающихся в байте (это  числа от 0 до 255, а всего 256 значений) возведенных  в степень соответствующую номеру каждого байта и складываем полученные результаты. Делаем по шагам:

Шаг -1
берем 0 байт
С0 - или в десятичной системе 192 - этот значение запоминаем
Шаг - 2
берем 1 байт
00 - в дес 0 - и умножаем его на 256^1
Шаг - 4
берем 2 байт
00  - в дес 0 - и умножаем его на 256^2
берем 3 байт
00  - в дес 0 - и умножаем его на 256^3
Шаг - 4
полученные результаты суммируем и получаем: 192 байта (не самый лучший пример, но мы ещё посчитаем размер файла film.mkv, там будет всё  наглядней)

8. $57$AB$36$00 (FILE_CLOSE) следующая команда закрывает файл ($36$00) - в ответ получаем 14, значит всё прошло удачно и работа с файлом завершена (также происходит и с каталогом, но это как-нибудь позже)

Теперь давайте попробуем открыть и посмотреть файл test-2.txt (помните я писал что мы можем работать, только с заглавными буквами имен файлов)

Пробуем:
обращаемся к RapidTables - вводим test-2.txt -  получаем $74$65$73$74$2D$32$2E$74$78$74

Полностью команда выглядит так:  $57$AB$2F$2F$74$65$73$74$2D$32$2E$74$78$74$00


ошибка - ответ 42 при попытке открыть файл

Вводим, ну и получаем ошибку (
В общем теперь мы знаем, что файлы должны быть записаны только заглавными буквами иначе будут ошибки. К моему великому сожалению это так.

Продолжим, посчитаем размер файла film.mkv, только обзовём его правильно FILM.MKV

Получаем имя файла: 46$49$4C$4D$2E$4D$4B$56
Полностью команда выглядит так: $57$AB$2F$2F$46$49$4C$4D$2E$4D$4B$56$00

размер файла FILM.MKV
0 байт - С3
1 байт - A1
2 байт - 79
3 байт - 2E

Шаг -1
берем 0 байт
С3 - или в десятичной системе 195 -  этот значение запоминаем
Шаг - 2
берем 1 байт
A1 - в дес 161 - и умножаем его на 256^1 = 41216
Шаг - 3
берем 2 байт
79  - в дес 121 - и умножаем его на 256^2 = 7929856
берем 3 байт
2E - в дес 46 - и умножаем его на 256^3 = 771751936
Шаг - 4
складываем: 
195+41216+7929856+771751936=779723203 (помните выше я писал  размер файла film.mkv - 779 723 203 байт)

Всё сошлось )

На этом буду заканчивать, надеюсь было интересно...

В следующий раз мы будем читать файлы, производить запись, попробуем дописать в файл что-нибудь, попробуем создать файл и может ещё чего-нибудь ))

Комментарии