Модуль mp3
- Войдите на сайт для отправки комментариев
Вс, 03/05/2015 - 18:57
Добрый день. Кто работал с таким модулем: DFPLayer Mini (http://amperka.ru/product/df-player-mp3-module)?
Я вроде бы разобрался полностью в даташитом, но вот не могу догнать, что такое checksum, как он вычисляется и зачем он нужен. Решил в обход библиотеки работать, потому что она как то не корректно работает при указывание последовательности треков. Поэтому решил напрямую отправлять массив в данными, который соберу вручную, вот только что указывать в байтах checksum не знаю. Кто что знает?
в самой библиотеке вот так checksum считается:
// 7E FF 06 0F 00 01 01 xx xx EF // 0 -> 7E is start code // 1 -> FF is version // 2 -> 06 is length // 3 -> 0F is command // 4 -> 00 is no receive // 5~6 -> 01 01 is argument // 7~8 -> checksum = 0 - ( FF+06+0F+00+01+01 ) // 9 -> EF is end code // Sample #1: It's easy to calculate checksum if you understand hex well. Here is an example below. // FF+06+03+00+00+01=0109 // 0-0109=FE F7 // Sample #2: In case of the play command it would be: // 0 1 2 3 4 5 6 7 8 9 // 0X7E, 0xFF, 0x06, 0X0D, 00, 00, 00, 0xFE, X, 0XEF // 0x06+0X0D+0xFE= 100010001 (binary) ---> negate 011101110 =0xEE // So your checksum for byte 8 is 0xEE //calc checksum (1~6 byte) uint16_t mp3_get_checksum (uint8_t *thebuf) { uint16_t sum = 0; for (int i=1; i<7; i++) { sum += thebuf[i]; } return -sum; } //fill checksum to send_buf (7~8 byte) void mp3_fill_checksum () { uint16_t checksum = mp3_get_checksum (send_buf); fill_uint16_bigend (send_buf+7, checksum); }// Sample #1: It's easy to calculate checksum if you understand hex well. Here is an example below.
Странно, у меня этого поясняющего куска небыло...
Тогда другой вопрос: Есть управляющий байт, который 4 по счету слева. Иногда мне модуль присылает значения и 12, и 40, и 48. Хотя таких значении нету в даташите. Что это за значения, что хочет сказать мне модуль?