Модуль mp3

CEBKACooler
Offline
Зарегистрирован: 14.01.2014

Добрый день. Кто работал с таким модулем: DFPLayer Mini (http://amperka.ru/product/df-player-mp3-module)?

Я вроде бы разобрался полностью в даташитом, но вот не могу догнать, что такое checksum, как он вычисляется и зачем он нужен. Решил в обход библиотеки работать, потому что она как то не корректно работает при указывание последовательности треков. Поэтому решил напрямую отправлять массив в данными, который соберу вручную, вот только что указывать в байтах checksum не знаю. Кто что знает?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

в самой библиотеке вот так 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);
}

 

CEBKACooler
Offline
Зарегистрирован: 14.01.2014

Tomasina пишет:

​// 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

Странно, у меня этого поясняющего куска небыло...

Тогда другой вопрос: Есть управляющий байт, который 4 по счету слева. Иногда мне модуль присылает значения и 12, и 40, и 48. Хотя таких значении нету в даташите. Что это за значения, что хочет сказать мне модуль?