TERES/SOFTWARE/A64-TERES/u-boot_new/drivers/mmc/sunxi_mmc_tuning.c
Dimitar Gamishev 093685c7d8 u-boot
2017-10-13 14:02:55 +03:00

2404 lines
86 KiB
C
Executable File

/*
* MMC driver for allwinner sunxi platform.
*
*/
#include <config.h>
#include <common.h>
#include <command.h>
#include <errno.h>
#include <mmc.h>
#include <part.h>
#include <malloc.h>
#include <linux/list.h>
#include <div64.h>
#include "mmc_private.h"
#include "sunxi_mmc.h"
#include "mmc_def.h"
char *spd_name[] = {"DS26/SDR12", "HSSDR52/SDR25", "HSDDR52/DDR50", "HS200/SDR104", "HS400"};
static const char tuning_blk_4b[TUNING_LEN*512] = {
/*hs200/uhs*/
/* 1 */
0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
/* 2 */
0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
/* 3 */
0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
/* 4 */
0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
/* 5 */
0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
/* 6 */
0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
/* 7 */
0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
/* 8 */
0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
/*0xf*/
/* 1 */
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
/* 2 */
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
/* 3 */
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
/* 4 */
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
/* 5 */
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
/* 6 */
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
/* 7 */
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
/* 8 */
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
/*0x1e*/
/* 1 */
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
/* 2 */
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
/* 3 */
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
/* 4 */
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
/* 5 */
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
/* 6 */
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
/* 7 */
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
/* 8 */
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
/*0x5a*/
/* 1 */
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
/* 2 */
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
/* 3 */
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
/* 4 */
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
/* 5 */
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
/* 6 */
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
/* 7 */
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
/* 8 */
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,
/*wifi*/
/* 1 */
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
/* 2 */
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
/* 3 */
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
/* 4 */
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
/* 5 */
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
/* 6 */
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
/* 7 */
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
/* 8 */
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
/*0xf1*/
/* 1 */
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
/* 2 */
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
/* 3 */
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
/* 4 */
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
/* 5 */
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
/* 6 */
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
/* 7 */
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
/* 8 */
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
/*0xd2(change form 0xe1/0x1e)*/
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
/*0xb4(change form 0xe1/0x1e)*/
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
/*0x78(change form 0xe1/0x1e)*/
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
/*rand*/
0xe4, 0x4f, 0x76, 0xbb, 0xf0, 0xb7, 0xe0, 0xdb,
0xb9, 0x1f, 0x9f, 0xfb, 0x7e, 0x9b, 0x03, 0x7d,
0x2e, 0x32, 0x8f, 0x29, 0x7a, 0x9b, 0xab, 0x16,
0x2f, 0x44, 0x99, 0xce, 0xc3, 0x99, 0xaa, 0xad,
0x2d, 0x82, 0xb2, 0x8a, 0xfa, 0x2d, 0xb9, 0x9a,
0x9e, 0x0f, 0xf3, 0x90, 0x08, 0x25, 0xf3, 0x09,
0x79, 0x80, 0x1b, 0x28, 0x95, 0x00, 0x57, 0x7d,
0xbb, 0x60, 0x0b, 0x2c, 0x92, 0x72, 0x49, 0x4b,
0xe4, 0xac, 0x48, 0x8b, 0xb0, 0xe4, 0x11, 0x1b,
0x7a, 0x58, 0x7c, 0xc9, 0xe6, 0xf1, 0x5b, 0x6b,
0x85, 0xc9, 0xf5, 0x7d, 0xef, 0xea, 0xb6, 0x0b,
0x12, 0x59, 0x24, 0xd2, 0xc9, 0x53, 0x15, 0xa2,
0xb1, 0xd6, 0x1f, 0x06, 0x38, 0x63, 0x51, 0x27,
0xf6, 0x03, 0x20, 0xee, 0x41, 0x88, 0xa4, 0x69,
0xfb, 0x15, 0x05, 0x70, 0xaf, 0xe0, 0x30, 0x88,
0xdc, 0x37, 0xce, 0x07, 0x91, 0xc1, 0x76, 0x79,
0x3a, 0x07, 0x21, 0x43, 0xba, 0x32, 0xdf, 0x86,
0xba, 0x16, 0xc9, 0x46, 0x40, 0x70, 0x37, 0xcc,
0x83, 0x6c, 0x33, 0x48, 0xfe, 0x6b, 0x2d, 0xbb,
0xc3, 0x02, 0xf0, 0x14, 0x12, 0x46, 0xd4, 0x99,
0x2a, 0x47, 0x35, 0x89, 0x5f, 0xda, 0x25, 0x00,
0x6d, 0x9c, 0x5e, 0x1a, 0x0c, 0x33, 0x7a, 0x5b,
0xc4, 0xd7, 0x67, 0x4f, 0x03, 0x12, 0x15, 0x6d,
0x6d, 0xc3, 0x71, 0x41, 0x73, 0x69, 0x97, 0xcb,
0x27, 0x9e, 0x43, 0x22, 0x4e, 0xe2, 0x89, 0x5c,
0xb7, 0x9a, 0xc7, 0xb2, 0xcc, 0x58, 0xd7, 0xe0,
0x67, 0x5d, 0x89, 0xcb, 0xe7, 0x5d, 0x50, 0x66,
0x82, 0x82, 0x3b, 0xd6, 0xdd, 0xb3, 0x27, 0xd5,
0xd9, 0x15, 0x34, 0x54, 0xb0, 0xd2, 0x75, 0x64,
0x42, 0x1a, 0xec, 0x56, 0xa9, 0x68, 0xb5, 0x21,
0x13, 0x07, 0x81, 0x05, 0xd1, 0xd4, 0x46, 0x6e,
0xab, 0x45, 0x35, 0x1b, 0x77, 0xaa, 0xed, 0x7f,
0xea, 0xb3, 0xee, 0x68, 0xad, 0x33, 0x50, 0xde,
0xb3, 0x23, 0xb5, 0x4e, 0xcb, 0xea, 0x7c, 0xe8,
0x71, 0xdc, 0x37, 0x45, 0xea, 0x00, 0x5f, 0x4d,
0x90, 0x16, 0x47, 0x58, 0x6a, 0xd8, 0x4f, 0x93,
0xff, 0x81, 0x5a, 0xa6, 0x6c, 0x8c, 0x82, 0x93,
0xb5, 0xbe, 0x0a, 0xe1, 0x59, 0x66, 0x93, 0xfb,
0x29, 0xe4, 0x93, 0xd3, 0x59, 0x68, 0x04, 0xca,
0xd8, 0xfc, 0x59, 0xd4, 0xdd, 0xc5, 0xb6, 0xd7,
0xc3, 0x85, 0x60, 0x55, 0x16, 0x65, 0x73, 0x4b,
0xee, 0xf2, 0xd3, 0x59, 0x7b, 0x65, 0x64, 0x22,
0xe2, 0x27, 0x7e, 0xf6, 0x47, 0x94, 0x9b, 0xaf,
0x2b, 0x00, 0x53, 0xd8, 0xf9, 0xf7, 0x8b, 0x15,
0xdb, 0xc9, 0xe9, 0xbe, 0xd2, 0x46, 0x8b, 0xce,
0x06, 0xc7, 0xf8, 0xfc, 0x5b, 0x6e, 0x56, 0x27,
0x44, 0xae, 0xde, 0xf7, 0xdc, 0x0d, 0x8e, 0xc2,
0x33, 0x28, 0x1d, 0xac, 0xe5, 0xf8, 0x34, 0x13,
0xf2, 0x55, 0xdb, 0x2a, 0xc9, 0xb8, 0x32, 0xe3,
0xa6, 0x45, 0x61, 0x13, 0x1e, 0x09, 0xd1, 0xd1,
0xf9, 0x80, 0x9d, 0x1e, 0x3f, 0x5a, 0x43, 0xcc,
0x95, 0x7e, 0xa0, 0x98, 0xca, 0x50, 0x1b, 0x9a,
0xae, 0x2f, 0x20, 0xdf, 0x23, 0x42, 0xd0, 0x54,
0x76, 0x75, 0xf6, 0xe5, 0xef, 0xbe, 0x3d, 0xe7,
0xa6, 0xa5, 0xa1, 0xb3, 0x99, 0x03, 0x24, 0x94,
0xfc, 0x0a, 0xc2, 0xe4, 0xd0, 0x85, 0xa6, 0x71,
0xb7, 0x61, 0x9e, 0x26, 0x07, 0x6d, 0xcd, 0xe7,
0x1d, 0x5e, 0xa0, 0xbc, 0xf4, 0x16, 0x03, 0x32,
0xf6, 0x26, 0xd4, 0xfe, 0x11, 0x91, 0x97, 0xe4,
0x0e, 0xd3, 0x6c, 0xd7, 0x1e, 0x21, 0x3f, 0x62,
0xb6, 0xf3, 0x3f, 0x46, 0x9d, 0xc0, 0x91, 0x65,
0x44, 0x08, 0x45, 0xde, 0x55, 0x98, 0x89, 0x7a,
0x8e, 0x0a, 0x1c, 0x47, 0xd0, 0x8b, 0x06, 0x82,
0x73, 0xe1, 0x87, 0xba, 0xdd, 0xac, 0x4d, 0x33,
};
static const char tuning_blk_8b[TUNING_LEN*512] = {
/*hs200/uhs*/
0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc,
0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 0xff,
0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 0xff,
0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xdd,
0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb,
0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff,
0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 0xff,
0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc,
0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff,
0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee,
0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd,
0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff,
0xbb, 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff,
0xff, 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee,
0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc,
0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 0xff,
0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 0xff,
0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xdd,
0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb,
0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff,
0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 0xff,
0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc,
0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff,
0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee,
0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd,
0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff,
0xbb, 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff,
0xff, 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee,
0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc,
0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 0xff,
0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 0xff,
0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xdd,
0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb,
0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff,
0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 0xff,
0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc,
0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff,
0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee,
0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd,
0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff,
0xbb, 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff,
0xff, 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee,
0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc,
0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 0xff,
0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 0xff,
0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xdd,
0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb,
0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff,
0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 0xff,
0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc,
0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff,
0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee,
0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd,
0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff,
0xbb, 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff,
0xff, 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee,
/*0xf*/
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
/*0x1e*/
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE,
/*0x5a*/
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
/*wifi*/
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x18,
0xc5, 0x00, 0x10, 0x18, 0x01, 0x12, 0xf8, 0x4b,
0x11, 0x42, 0x00, 0x19, 0x03, 0x01, 0x00, 0x00,
0x05, 0x10, 0x00, 0x18, 0xc5, 0x10, 0x10, 0x18,
0x30, 0x43, 0x04, 0x16, 0x00, 0x90, 0x10, 0x18,
0x01, 0x00, 0xf8, 0x4b, 0x11, 0x42, 0x00, 0x27,
/*0xf1*/
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
/*0xd2(change form 0xe1/0x1e)*/
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02, 0xfd, 0x02,
/*0xb4(change form 0xe1/0x1e)*/
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04,
/*0x78(change form 0xe1/0x1e)*/
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80,
/*rand*/
0xe4, 0x4f, 0x76, 0xbb, 0xf0, 0xb7, 0xe0, 0xdb,
0xb9, 0x1f, 0x9f, 0xfb, 0x7e, 0x9b, 0x03, 0x7d,
0x2e, 0x32, 0x8f, 0x29, 0x7a, 0x9b, 0xab, 0x16,
0x2f, 0x44, 0x99, 0xce, 0xc3, 0x99, 0xaa, 0xad,
0x2d, 0x82, 0xb2, 0x8a, 0xfa, 0x2d, 0xb9, 0x9a,
0x9e, 0x0f, 0xf3, 0x90, 0x08, 0x25, 0xf3, 0x09,
0x79, 0x80, 0x1b, 0x28, 0x95, 0x00, 0x57, 0x7d,
0xbb, 0x60, 0x0b, 0x2c, 0x92, 0x72, 0x49, 0x4b,
0xe4, 0xac, 0x48, 0x8b, 0xb0, 0xe4, 0x11, 0x1b,
0x7a, 0x58, 0x7c, 0xc9, 0xe6, 0xf1, 0x5b, 0x6b,
0x85, 0xc9, 0xf5, 0x7d, 0xef, 0xea, 0xb6, 0x0b,
0x12, 0x59, 0x24, 0xd2, 0xc9, 0x53, 0x15, 0xa2,
0xb1, 0xd6, 0x1f, 0x06, 0x38, 0x63, 0x51, 0x27,
0xf6, 0x03, 0x20, 0xee, 0x41, 0x88, 0xa4, 0x69,
0xfb, 0x15, 0x05, 0x70, 0xaf, 0xe0, 0x30, 0x88,
0xdc, 0x37, 0xce, 0x07, 0x91, 0xc1, 0x76, 0x79,
0x3a, 0x07, 0x21, 0x43, 0xba, 0x32, 0xdf, 0x86,
0xba, 0x16, 0xc9, 0x46, 0x40, 0x70, 0x37, 0xcc,
0x83, 0x6c, 0x33, 0x48, 0xfe, 0x6b, 0x2d, 0xbb,
0xc3, 0x02, 0xf0, 0x14, 0x12, 0x46, 0xd4, 0x99,
0x2a, 0x47, 0x35, 0x89, 0x5f, 0xda, 0x25, 0x00,
0x6d, 0x9c, 0x5e, 0x1a, 0x0c, 0x33, 0x7a, 0x5b,
0xc4, 0xd7, 0x67, 0x4f, 0x03, 0x12, 0x15, 0x6d,
0x6d, 0xc3, 0x71, 0x41, 0x73, 0x69, 0x97, 0xcb,
0x27, 0x9e, 0x43, 0x22, 0x4e, 0xe2, 0x89, 0x5c,
0xb7, 0x9a, 0xc7, 0xb2, 0xcc, 0x58, 0xd7, 0xe0,
0x67, 0x5d, 0x89, 0xcb, 0xe7, 0x5d, 0x50, 0x66,
0x82, 0x82, 0x3b, 0xd6, 0xdd, 0xb3, 0x27, 0xd5,
0xd9, 0x15, 0x34, 0x54, 0xb0, 0xd2, 0x75, 0x64,
0x42, 0x1a, 0xec, 0x56, 0xa9, 0x68, 0xb5, 0x21,
0x13, 0x07, 0x81, 0x05, 0xd1, 0xd4, 0x46, 0x6e,
0xab, 0x45, 0x35, 0x1b, 0x77, 0xaa, 0xed, 0x7f,
0xea, 0xb3, 0xee, 0x68, 0xad, 0x33, 0x50, 0xde,
0xb3, 0x23, 0xb5, 0x4e, 0xcb, 0xea, 0x7c, 0xe8,
0x71, 0xdc, 0x37, 0x45, 0xea, 0x00, 0x5f, 0x4d,
0x90, 0x16, 0x47, 0x58, 0x6a, 0xd8, 0x4f, 0x93,
0xff, 0x81, 0x5a, 0xa6, 0x6c, 0x8c, 0x82, 0x93,
0xb5, 0xbe, 0x0a, 0xe1, 0x59, 0x66, 0x93, 0xfb,
0x29, 0xe4, 0x93, 0xd3, 0x59, 0x68, 0x04, 0xca,
0xd8, 0xfc, 0x59, 0xd4, 0xdd, 0xc5, 0xb6, 0xd7,
0xc3, 0x85, 0x60, 0x55, 0x16, 0x65, 0x73, 0x4b,
0xee, 0xf2, 0xd3, 0x59, 0x7b, 0x65, 0x64, 0x22,
0xe2, 0x27, 0x7e, 0xf6, 0x47, 0x94, 0x9b, 0xaf,
0x2b, 0x00, 0x53, 0xd8, 0xf9, 0xf7, 0x8b, 0x15,
0xdb, 0xc9, 0xe9, 0xbe, 0xd2, 0x46, 0x8b, 0xce,
0x06, 0xc7, 0xf8, 0xfc, 0x5b, 0x6e, 0x56, 0x27,
0x44, 0xae, 0xde, 0xf7, 0xdc, 0x0d, 0x8e, 0xc2,
0x33, 0x28, 0x1d, 0xac, 0xe5, 0xf8, 0x34, 0x13,
0xf2, 0x55, 0xdb, 0x2a, 0xc9, 0xb8, 0x32, 0xe3,
0xa6, 0x45, 0x61, 0x13, 0x1e, 0x09, 0xd1, 0xd1,
0xf9, 0x80, 0x9d, 0x1e, 0x3f, 0x5a, 0x43, 0xcc,
0x95, 0x7e, 0xa0, 0x98, 0xca, 0x50, 0x1b, 0x9a,
0xae, 0x2f, 0x20, 0xdf, 0x23, 0x42, 0xd0, 0x54,
0x76, 0x75, 0xf6, 0xe5, 0xef, 0xbe, 0x3d, 0xe7,
0xa6, 0xa5, 0xa1, 0xb3, 0x99, 0x03, 0x24, 0x94,
0xfc, 0x0a, 0xc2, 0xe4, 0xd0, 0x85, 0xa6, 0x71,
0xb7, 0x61, 0x9e, 0x26, 0x07, 0x6d, 0xcd, 0xe7,
0x1d, 0x5e, 0xa0, 0xbc, 0xf4, 0x16, 0x03, 0x32,
0xf6, 0x26, 0xd4, 0xfe, 0x11, 0x91, 0x97, 0xe4,
0x0e, 0xd3, 0x6c, 0xd7, 0x1e, 0x21, 0x3f, 0x62,
0xb6, 0xf3, 0x3f, 0x46, 0x9d, 0xc0, 0x91, 0x65,
0x44, 0x08, 0x45, 0xde, 0x55, 0x98, 0x89, 0x7a,
0x8e, 0x0a, 0x1c, 0x47, 0xd0, 0x8b, 0x06, 0x82,
0x73, 0xe1, 0x87, 0xba, 0xdd, 0xac, 0x4d, 0x33,
};
u32 freq_ds26_sdr12[8] = {
400*1000, 25*1000*1000, 50*1000*1000,
};
u32 freq_hssdr52_sdr25[8] = {
400*1000, 25*1000*1000, 50*1000*1000,
};
u32 freq_hsddr52_ddr50[8] = {
400*1000, 25*1000*1000, 50*1000*1000,
};
u32 freq_hs200_sdr104[8] = {
400*1000, 25*1000*1000, 50*1000*1000, 100*1000*1000,
150*1000*1000, 200*1000*1000,
};
u32 freq_hs400[8] = {
400*1000, 25*1000*1000, 50*1000*1000, 100*1000*1000,
150*1000*1000, 200*1000*1000,
};
u32 freq_range_ds26_sdr12[2] = {400*1000, 26*1000*1000};
u32 freq_range_hssdr52_sdr25[2] = {50*1000*1000, 52*1000*1000};
u32 freq_range_hsddr52_ddr50[2] = {50*1000*1000, 52*1000*1000};
u32 freq_range_hs200_sdr104[2] = {50*1000*1000, 200*1000*1000};
u32 freq_range_hs400[2] = {50*1000*1000, 150*1000*1000};
extern int mmc_mmc_switch_bus_mode(struct mmc *mmc, int spd_mode, int width);
static ulong sunxi_read_tuning(int dev_num, ulong start, lbaint_t blkcnt, void *dst);
static unsigned int sunxi_select_freq(struct mmc *mmc, int speed_md, int freq_index)
{
u32 freq = 0;
struct sunxi_mmc_host *host = (struct sunxi_mmc_host *)mmc->priv;
int i;
u32 val;
if (freq_index >= 8) {
MMCINFO("freq_index error %d\n", freq_index);
return 0;
}
for (i=0; i<MAX_EXT_FREQ_POINT_NUM; i++)
{
val = host->cfg.platform_caps.tm4_tune_ext_freq[i];
if (val & (1U<<31)) {
if ((((val>>8) & 0xff) == freq_index) && (((val>>16) & 0xff) == speed_md)) {
freq = (val & 0xff)*1000*1000;
MMCINFO("select ext freq point: %d-%d MHz\n", i, (val & 0xff));
goto OUT;
}
}
}
if (speed_md == DS26_SDR12)
freq = freq_ds26_sdr12[freq_index];
else if (speed_md == HSSDR52_SDR25)
freq = freq_hssdr52_sdr25[freq_index];
else if (speed_md == HSDDR52_DDR50)
freq = freq_hsddr52_ddr50[freq_index];
else if (speed_md == HS200_SDR104)
freq = freq_hs200_sdr104[freq_index];
else if (speed_md == HS400)
freq = freq_hs400[freq_index];
else {
MMCINFO("speed_md error %d\n", speed_md);
freq = 0;
}
OUT:
return freq;
}
static int sunxi_tuning_method_0(struct mmc *mmc, int retry_times)
{
ulong ret = 0;
int j;
const char *std_pat = NULL;
char *rcv_pat = NULL;
if (NULL == (rcv_pat = malloc(TUNING_LEN*512))) {
MMCINFO("request memory for rcv_pat fail\n");
return -1;
}
if (mmc->bus_width == 4)
std_pat = tuning_blk_4b;
else if (mmc->bus_width == 8)
std_pat = tuning_blk_8b;
else if(mmc->bus_width == 1) {
MMCINFO("Not support 1 bit tuning now\n");
ret = -1;
goto OUT;
}
for(j=0; j<retry_times; j++)
{
ret = sunxi_read_tuning(mmc->cfg->host_no,
TUNING_ADD,
TUNING_LEN,
rcv_pat);
if (ret != TUNING_LEN) {
MMCMSG(mmc, "read failed\n");
#if 0
//if read failedand block len>1,send stop for next try
//no care if it is successed
if (TUNING_LEN>1){
MMCINFO("Send stop\n");
mmc_send_manual_stop(mmc);
}
#endif
#if 1
//MMCINFO("Send manual stop\n");
mmc_send_manual_stop(mmc);
#endif
break;
}
ret = memcmp(std_pat, rcv_pat, TUNING_LEN*512);
if(ret) {
MMCINFO("pattern compare fail\n");
break;
}
}
if (j != retry_times)
ret = -1;
else
ret = 0;
OUT:
free(rcv_pat);
return ret;
}
static int _skip_curr_freq(struct mmc *mmc, int spd_md, int freq)
{
u32 min, max;
struct sunxi_mmc_host *host = (struct sunxi_mmc_host *)mmc->priv;
if (spd_md == DS26_SDR12) {
min = freq_range_ds26_sdr12[0];
max = freq_range_ds26_sdr12[1];
} else if (spd_md == HSSDR52_SDR25) {
min = freq_range_hssdr52_sdr25[0];
max = freq_range_hssdr52_sdr25[1];
} else if (spd_md == HSDDR52_DDR50) {
min = freq_range_hsddr52_ddr50[0];
max = freq_range_hsddr52_ddr50[1];
} else if (spd_md == HS200_SDR104) {
min = freq_range_hs200_sdr104[0];
if (host->cfg.platform_caps.tm4_tune_hs200_max_freq)
max = host->cfg.platform_caps.tm4_tune_hs200_max_freq * 1000 * 1000;
else
max = freq_range_hs200_sdr104[1];
} else if (spd_md == HS400) {
min = freq_range_hs400[0];
if (host->cfg.platform_caps.tm4_tune_hs400_max_freq)
max = host->cfg.platform_caps.tm4_tune_hs400_max_freq * 1000 * 1000;
else
max = freq_range_hs400[1];
} else {
min = 400*1000;
max = 100*1000*1000;
}
if ((freq < min) || (freq > max))
return 1;
else
return 0;
}
static int _get_best_sdly(int sdly_cnt, u8 win_th, u8 *p)
{
int i;
int s0=0, e0=0, s1=0, e1=0;
int window0=0, window1=0;
u8 best = 0;
for (i=0; i<sdly_cnt; i++) {
if (p[i] == 1)
break;
}
if (i == sdly_cnt) {
s0 = 0xFF; /* 0xFF, invalid sample point position */
goto OUT;
} else
s0 = i;
for (i=s0+1; i<sdly_cnt; i++)
if (p[i] != 1)
break;
if (i == sdly_cnt) {
e0 = sdly_cnt - 1;
goto OUT;
} else
e0 = i;
for (i=e0+1; i<sdly_cnt; i++)
if (p[i] == 1)
break;
if (i == sdly_cnt) {
s1 = 0xFF;
goto OUT;
} else
s1 = i;
for (i=s1+1; i<sdly_cnt; i++)
if (p[i] != 1)
break;
if (i == sdly_cnt) {
e1 = sdly_cnt - 1;
goto OUT;
} else
e1 = i;
OUT:
MMCINFO("s0-%d e0-%d s1-%d e1-%d\n", s0, e0, s1, e1);
if (e0 >= s0)
window0 = e0 - s0 + 1;
if (e1 >= s1)
window1 = e1 - s1 + 1;
if (s0 == 0xFF) /* don't do tuning or don't get right sample point */
best = 0xFF;
else
{
if (window0 >= window1) {
if (window0 >= win_th)
best = s0 + (window0>>1);
else
best = 0xff;
} else {
if (window1 >= win_th)
best = s1 + (window1>>1);
else
best = 0xff;
}
}
return best;
}
static int sunxi_tuning_speed_mode(struct mmc *mmc, int speed_mode, int tuning_mode, int retry_times)
{
int freq_index=0, freq = 0;
int i;
struct sunxi_mmc_host *host = (struct sunxi_mmc_host *)mmc->priv;
int tm = host->timing_mode;
u8 tm4_win_th = host->cfg.platform_caps.tm4_timing_window_th;
u8 *sdly_cfg = NULL;
int sdly, sdly_cnt = 0;
u8 *p = NULL;
u8 best = 0;
if (tm == SUNXI_MMC_TIMING_MODE_1) {
sdly_cnt = host->tm1.sample_point_cnt;
sdly_cfg = (u8 *)host->tm1.sdly;
} else if (tm == SUNXI_MMC_TIMING_MODE_3) {
sdly_cnt = host->tm3.sample_point_cnt;
sdly_cfg = (u8 *)host->tm3.sdly;
} else if (tm == SUNXI_MMC_TIMING_MODE_4) {
sdly_cnt = host->tm4.sample_point_cnt;
if (speed_mode == HS400) {
sdly_cfg = (u8 *)host->tm4.dsdly;
MMCDBG("%s: current is HS400 mode, dsdly:0x%x\n", __FUNCTION__, (u32)sdly_cfg);
} else
sdly_cfg = (u8 *)host->tm4.sdly;
}
if (NULL == (p = malloc(sdly_cnt*MAX_CLK_FREQ_NUM))) {
MMCINFO("%s: request memory fail\n", __FUNCTION__);
return -1;
}
freq_index = 0;
while ((freq = sunxi_select_freq(mmc, speed_mode, freq_index)) != 0)
{
/* change clock frequency */
mmc->tran_speed = freq;
if (!_skip_curr_freq(mmc, speed_mode, freq))
{
/* do tuning */
//MMCINFO("start tuning spd_md: %d-%s, freq: %d-%d\n", speed_mode, spd_name[speed_mode], freq_index, freq);
MMCINFO("start tuning freq: %d-%d\n", freq_index, freq);
for (sdly=0; sdly<sdly_cnt; sdly++)
{
/* modify sample point cfg*/
if (speed_mode == HS400)
sdly_cfg[freq_index] = sdly;
else
sdly_cfg[speed_mode*MAX_CLK_FREQ_NUM + freq_index] = sdly;
/* update sample point cfg */
mmc_set_clock(mmc, mmc->tran_speed);
if (tuning_mode == 0)
{
if (!sunxi_tuning_method_0(mmc, retry_times))
p[freq_index*sdly_cnt + sdly] = 1;
else
p[freq_index*sdly_cnt + sdly] = 0;
}
}
}
else
{
MMCINFO("skip current freq %d\n", freq);
for (sdly=0; sdly<sdly_cnt; sdly++)
p[freq_index*sdly_cnt + sdly] = 0xFF;
}
freq_index++;
}
/* dump tuning result */
MMCMSG(mmc, "speed mode: %s\n", spd_name[speed_mode]);
for (i=0; i<freq_index; i++)
{
MMCMSG(mmc, "---%dHz: \n", sunxi_select_freq(mmc, speed_mode, i));
#if 0
for (j=0; j<sdly_cnt; j++)
{
if (j && (j%32==0))
printf("\n");
printf("%02x ", p[i*sdly_cnt + j]);
}
printf("\n");
#endif
best = _get_best_sdly(sdly_cnt, tm4_win_th, (p + i*sdly_cnt));
MMCMSG(mmc, "--best %d\n", best);
/* record best sample point to result[] */
if (speed_mode == HS400)
sdly_cfg[i] = best;
else
sdly_cfg[speed_mode*MAX_CLK_FREQ_NUM + i] = best; //( ((speed_mode&0xf)<<4) | (i&0xF)); //best;
}
/* set proper sample cfg and clock to tune next speed mode */
if (speed_mode == DS26_SDR12)
freq_index = 1;
else
freq_index = 2;
if ((freq = sunxi_select_freq(mmc, speed_mode, freq_index)) != 0) {
mmc->tran_speed = freq;
} else {
freq_index++;
MMCINFO("try next freq...%d\n", freq_index);
if ((freq = sunxi_select_freq(mmc, speed_mode, freq_index)) != 0)
mmc->tran_speed = freq;
else
MMCINFO("invalid freq!!!\n");
}
/* update sample point cfg */
mmc_set_clock(mmc, mmc->tran_speed);
free(p);
return 0;
}
int sunxi_need_rty(struct mmc *mmc)
{
int ret = 0;
u32 err_no = 0;
if (mmc->cfg->ops->decide_retry)
{
err_no = mmc->cfg->ops->get_detail_errno(mmc);
ret = mmc->cfg->ops->decide_retry(mmc, err_no, 0);
if (!ret) {
MMCINFO("need retry next clk %d\n", mmc->clock);
return 0;
}
}
return -1;
}
int write_tuning_try_freq(struct mmc *mmc,u32 clk)
{
int ret = 0;
char *rcv_pattern = NULL;
char *std_pattern = NULL;
u32 err_no = 0;
if ( NULL == (rcv_pattern = (char *)malloc(TUNING_LEN*512))) {
MMCINFO("%s: request memory for rcv_pattern fail\n", __FUNCTION__);
return -1;
}
if ( NULL == (std_pattern = (char *)malloc(TUNING_LEN*512))) {
MMCINFO("%s: request memory for std_pattern fail\n", __FUNCTION__);
ret = -1;
goto out1;
}
if (mmc->bus_width == 4)
//std_pattern = tuning_blk_4b;
memcpy(std_pattern, tuning_blk_4b, (TUNING_LEN*512));
else if (mmc->bus_width == 8)
//std_pattern = tuning_blk_8b;
memcpy(std_pattern, tuning_blk_8b, (TUNING_LEN*512));
else if (mmc->bus_width == 1) {
MMCINFO("Don't support 1 bit tuning now\n");
ret = -1;
goto out;
}
do {
mmc_set_clock(mmc, clk);
ret = mmc_bwrite(mmc->cfg->host_no,
TUNING_ADD,
TUNING_LEN,
std_pattern);
MMCDBG("Write pattern ret = %d\n",ret);
if (ret != TUNING_LEN) { //fail
MMCINFO("write failed\n");
err_no = mmc->cfg->ops->get_detail_errno(mmc);
/* if write failed and block len>1,send stop for next try */
if (TUNING_LEN>1) {
MMCINFO("send stop\n");
mmc_send_manual_stop(mmc);
}
} else {//ok
MMCINFO("write_tuning_try_freq: write ok\n");
/* read pattern and compare with the pattern show sent*/
ret = mmc_bread(mmc->cfg->host_no,
TUNING_ADD,
TUNING_LEN,
rcv_pattern);
if (ret != TUNING_LEN) {
MMCMSG(mmc, "read failed\n");
//MMCINFO("0x%08x 0x%08x 0x%08x 0x%08x\n", *(volatile uint *)(ulong)(0x1c1105c), *(volatile uint *)(ulong)(0x1c110140), *(volatile uint *)(ulong)(0x1c110144), *(volatile uint *)(ulong)(0x1c110148));
err_no = mmc->cfg->ops->get_detail_errno(mmc);
/*if read failed and block len>1,send stop for next try*/
if (TUNING_LEN>1) {
MMCINFO("Send stop\n");
mmc_send_manual_stop(mmc);
}
} else {
ret = memcmp(std_pattern, rcv_pattern, TUNING_LEN*512);
if(ret) {
MMCINFO("pattern compare fail\n");
err_no = 0xffffffff; //force retry
} else {
MMCINFO("Pattern compare ok\n");
MMCINFO("Write tuning pattern ok\n");
goto out;
}
}
}
} while(!mmc->cfg->ops->decide_retry(mmc, err_no, 0));
MMCINFO(" Write tuning pattern failded\n");
ret = -1;
out:
free(std_pattern);
out1:
free(rcv_pattern);
return ret;
}
int sunxi_write_tuning(struct mmc *mmc)
{
u32 freqs[] = {/*400000, */25*1000*1000, 50*1000*1000};
int i = 0;
int ret = -1;
int clk_bak = mmc->clock;
if (mmc->cfg->ops->decide_retry == NULL) {
MMCINFO("Dont support tuning\n");
return 0;
}
/* reset all sample point */
mmc->cfg->ops->decide_retry(mmc, 0, 1);
for (i=0; i<sizeof(freqs)/sizeof(freqs[0]); i++) {
ret = write_tuning_try_freq(mmc, freqs[i]);
if (!ret) {
/* recover the clock before write patten*/
mmc_set_clock(mmc, clk_bak);
return ret;
}
}
return ret;
}
static ulong sunxi_read_tuning(int dev_num, ulong start, lbaint_t blkcnt, void *dst)
{
lbaint_t cur, blocks_todo = blkcnt;
struct mmc *mmc = find_mmc_device(dev_num);
if (blkcnt == 0) {
MMCINFO("blkcnt should not be 0\n");
return 0;
}
if (!mmc) {
MMCINFO("can not find mmc dev\n");
return 0;
}
if ((start + blkcnt) > mmc->block_dev.lba) {
MMCINFO("MMC: block number 0x%lx exceeds max(0x%lx)\n",
start + blkcnt, mmc->block_dev.lba);
return 0;
}
if (mmc_set_blocklen(mmc, mmc->read_bl_len)) {
MMCMSG(mmc, "Set block len failed\n");
return 0;
}
do {
cur = 1;//force to read 1 block a time
if (mmc_bread(dev_num, start, cur, dst) != cur) {
MMCMSG(mmc, "block read failed, %s %d\n", __FUNCTION__, __LINE__);
return 0;
}
blocks_todo -= cur;
start += cur;
dst = (char*)dst + cur * mmc->read_bl_len;
} while (blocks_todo > 0);
return blkcnt;
}
int sunxi_execute_tuning(struct mmc *mmc, int speed_mode)
{
int ret = 0;
int bus_width = 0;
struct sunxi_mmc_host *host = (struct sunxi_mmc_host *)mmc->priv;
int r_cycle = host->cfg.platform_caps.tm4_tune_r_cycle;
if (!IS_SD(mmc))
{
if (mmc->card_caps & MMC_MODE_8BIT)
bus_width = 8;
else if (mmc->card_caps & MMC_MODE_4BIT)
bus_width = 4;
else
bus_width = 1;
/* switch to specific speed mode */
if (speed_mode == DS26_SDR12)
ret = mmc_mmc_switch_bus_mode(mmc, DS26_SDR12, bus_width);
else if (speed_mode == HSSDR52_SDR25)
ret = mmc_mmc_switch_bus_mode(mmc, HSSDR52_SDR25, bus_width);
else if (speed_mode == HSDDR52_DDR50)
ret = mmc_mmc_switch_bus_mode(mmc, HSDDR52_DDR50, bus_width);
else if (speed_mode == HS200_SDR104)
ret = mmc_mmc_switch_bus_mode(mmc, HS200_SDR104, bus_width);
else if (speed_mode == HS400) {
/* firstly, switch to HS-DDR 8 bit */
ret = mmc_mmc_switch_bus_mode(mmc, HSDDR52_DDR50, bus_width);
if (ret) {
MMCINFO("switch to %s fail\n", spd_name[speed_mode]);
goto OUT;
}
/* then, switch to HS400 */
ret = mmc_mmc_switch_bus_mode(mmc, HS400, bus_width);
}
if (ret) {
MMCINFO("switch to %s fail\n", spd_name[speed_mode]);
goto OUT;
}
}
else
{
if (speed_mode >= HSDDR52_DDR50) {
MMCINFO("don't spport %s for sd card\n", spd_name[speed_mode]);
ret = -1;
goto OUT;
}
}
/* execute tuning for current speed mode */
if (r_cycle == 0)
r_cycle = 15;
ret = sunxi_tuning_speed_mode(mmc, speed_mode, 0, r_cycle);
if (ret) {
MMCINFO("tuning for %s fail\n", spd_name[speed_mode]);
}
OUT:
return ret;
}
int sunxi_pack_tuning_result(struct mmc *mmc)
{
struct sunxi_mmc_host *host = (struct sunxi_mmc_host *)mmc->priv;
//char *spd_name[] = {"DS26/SDR12", "HSSDR52/SDR25", "HSDDR52/DDR50", "HS200/SDR104", "HS400"};
int spd_md, freq;
u32 t, val = 0;
u8 *p = NULL;
#if 0
for (spd_md=0; spd_md<MAX_SPD_MD_NUM; spd_md++)
{
if (spd_md == MAX_SPD_MD_NUM-1)
p = host->tm4.dsdly;
else
p = host->tm4.sdly;
for (freq=0; freq<MAX_CLK_FREQ_NUM; freq++)
{
printf("%02x ", p[spd_md*MAX_CLK_FREQ_NUM + freq]);
}
printf("\n");
}
printf("\n");
#endif
for (spd_md=0; spd_md<MAX_SPD_MD_NUM; spd_md++)
{
if (spd_md == HS400)
p = host->tm4.dsdly;
else
p = host->tm4.sdly;
val = 0;
for (freq=0; freq<4; freq++) {
if (spd_md == HS400)
t = p[freq];
else
t = p[spd_md*MAX_CLK_FREQ_NUM+freq];
val |= ((t & 0xFF) << (8*freq));
}
host->cfg.platform_caps.sdly.tm4_smx_fx[spd_md*2 + 0] = val;
val = 0;
for (freq=4; freq<MAX_CLK_FREQ_NUM; freq++) {
if (spd_md == HS400)
t = p[freq];
else
t = p[spd_md*MAX_CLK_FREQ_NUM+freq];
val |= ((t & 0xFF) << (8*(freq-4)));
}
host->cfg.platform_caps.sdly.tm4_smx_fx[spd_md*2 + 1] = val;
MMCINFO("%s: 0x%08x 0x%08x\n", spd_name[spd_md],
host->cfg.platform_caps.sdly.tm4_smx_fx[spd_md*2 + 0],
host->cfg.platform_caps.sdly.tm4_smx_fx[spd_md*2 + 1]);
}
return 0;
}
int sunxi_bus_tuning(struct mmc *mmc)
{
int err = 0, ret = 0;
unsigned err_flag = 0;
#if 0
MMCINFO("================== start tuning DS26_SDR12...\n");
ret = sunxi_execute_tuning(mmc, DS26_SDR12);
if (ret) {
MMCINFO("tuning fail at DS26_SDR12\n");
err = -1;
}
#endif
MMCINFO("================== start tuning HSSDR52_SDR25...\n");
ret = sunxi_execute_tuning(mmc, HSSDR52_SDR25);
if (ret) {
MMCINFO("tuning fail at HSSDR52_SDR25\n");
err = -1;
goto ERR_RET;
}
if (mmc->cfg->host_caps & MMC_MODE_HS200)
{
MMCINFO("================== start tuning HS200_SDR104...\n");
ret = sunxi_execute_tuning(mmc, HS200_SDR104);
if (ret) {
MMCINFO("tuning fail at HS200_SDR104\n");
//err = -2;
//goto ERR_RET;
err_flag |= 0x1;
}
}
if (mmc->cfg->host_caps & MMC_MODE_DDR_52MHz)
{
MMCINFO("================== start tuning HSDDR52_DDR50...\n");
ret = sunxi_execute_tuning(mmc, HSDDR52_DDR50);
if (ret) {
MMCINFO("tuning fail at HSDDR52_DDR50\n");
//err = -3;
//goto ERR_RET;
err_flag |= 0x2;
}
}
if (((mmc->cfg->host_caps & (MMC_MODE_HS400|MMC_MODE_8BIT)) == (MMC_MODE_HS400|MMC_MODE_8BIT))
&& !(err_flag & 0x1))
{
MMCINFO("================== start tuning HS400...\n");
ret = sunxi_execute_tuning(mmc, HS400);
if (ret) {
MMCINFO("tuning fail at HS400\n");
err = -4;
goto ERR_RET;
}
ret = mmc_mmc_switch_bus_mode(mmc, HSDDR52_DDR50, mmc->bus_width);
if (ret) {
MMCINFO("switch back to HSDDR52_DDR50 8bit fail\n");
err = -5;
goto ERR_RET;
}
}
ret = mmc_mmc_switch_bus_mode(mmc, HSSDR52_SDR25, mmc->bus_width);
if (ret) {
MMCINFO("switch back to HSSDR52_SDR25 8bit fail\n");
err = -6;
goto ERR_RET;
}
sunxi_pack_tuning_result(mmc);
ERR_RET:
return err;
}
int sunxi_switch_to_best_bus(struct mmc *mmc)
{
int ret = 0, err;
struct sunxi_mmc_host *host = (struct sunxi_mmc_host *)mmc->priv;
int ifreq, imd, freq;
int sdly = 0, dsdly = 0;
int bus_width = 0;
int work_mode = uboot_spare_head.boot_data.work_mode;
char caps_bak = 0;
ALLOC_CACHE_ALIGN_BUFFER(char, ext_csd, MMC_MAX_BLOCK_LEN);
if (IS_SD(mmc) || !((host->mmc_no == 2) || (host->mmc_no == 0)))
{
return 0;
}
if ((work_mode == WORK_MODE_BOOT)
|| ((work_mode != WORK_MODE_BOOT)
&& (host->cfg.platform_caps.sample_mode != AUTO_SAMPLE_MODE)))
{
char cardtype;
caps_bak = mmc->card_caps;
mmc->card_caps = 0;
if (mmc_host_is_spi(mmc))
return 0;
/* Only version 4 supports high-speed */
if (mmc->version < MMC_VERSION_4)
return 0;
/* here we assume eMMC support 8 bit */
mmc->card_caps |= MMC_MODE_4BIT | MMC_MODE_8BIT;
err = mmc_send_ext_csd(mmc, ext_csd);
if (err) {
MMCINFO("mmc get ext csd failed\n");
return err;
}
cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0xFF;
MMCDBG("raw card caps 0x%x\n", cardtype);
mmc->card_caps = caps_bak;
if ((cardtype & EXT_CSD_CARD_TYPE_HS400)
&& (mmc->card_caps & MMC_MODE_8BIT))
mmc->card_caps |= MMC_MODE_HS400;
if (cardtype & EXT_CSD_CARD_TYPE_HS200)
mmc->card_caps |= MMC_MODE_HS200;
if (cardtype & EXT_CSD_CARD_TYPE_HS) {
if (cardtype & EXT_CSD_CARD_TYPE_DDR_52)
mmc->card_caps |= MMC_MODE_DDR_52MHz;
}
}
MMCDBG("card caps 0x%x\n", mmc->card_caps);
if ((mmc->card_caps & (MMC_MODE_HS400|MMC_MODE_8BIT))
== (MMC_MODE_HS400|MMC_MODE_8BIT))
{
imd = HS400;
for (ifreq=5; ifreq>=2; ifreq--) /*1-25MHz; 2-50MHz; 3-100MHz; 4-150MHz; 5-200MHz*/
{
imd = HS200_SDR104;
sdly = host->tm4.sdly[imd*MAX_CLK_FREQ_NUM+ifreq];
imd = HS400;
dsdly = host->tm4.dsdly[ifreq];
if ((sdly != 0xff) && (dsdly != 0xff))
goto START_SWITCH;
}
}
if (mmc->card_caps & MMC_MODE_HS200)
{
imd = HS200_SDR104;
for (ifreq=5; ifreq>=4; ifreq--) /*1-25MHz; 2-50MHz; 3-100MHz; 4-150MHz; 5-200MHz*/
{
sdly = host->tm4.sdly[imd*MAX_CLK_FREQ_NUM+ifreq];
if (sdly != 0xFF)
goto START_SWITCH;
}
}
if (mmc->card_caps & MMC_MODE_DDR_52MHz)
{
imd = HSDDR52_DDR50;
for (ifreq=2; ifreq>=2; ifreq--) /*1-25MHz; 2-50MHz; 3-100MHz; 4-150MHz; 5-200MHz*/
{
if (host->mmc_no == 2)
sdly = host->tm4.sdly[imd*MAX_CLK_FREQ_NUM+ifreq];
else if (host->mmc_no == 0)
sdly = host->tm1.sdly[imd*MAX_CLK_FREQ_NUM+ifreq];
if (sdly != 0xFF)
goto START_SWITCH;
}
}
if (mmc->card_caps & MMC_MODE_HS_52MHz)
{
imd = HSSDR52_SDR25;
for (ifreq=2; ifreq>=1; ifreq--) /*1-25MHz; 2-50MHz; 3-100MHz; 4-150MHz; 5-200MHz*/
{
sdly = host->tm4.sdly[imd*MAX_CLK_FREQ_NUM+ifreq];
if (sdly != 0xFF)
goto START_SWITCH;
}
}
//imd = DS26_SDR12;
//ifreq = CLK_25M;
imd = HSSDR52_SDR25;
ifreq = CLK_50M;
MMCINFO("use default speed mode: %d-%s, ifreq: %d\n", imd, spd_name[imd], ifreq);
//MMCINFO("don't find best speed mode and freq\n");
//ret = -1;
//goto OUT;
START_SWITCH:
if ((freq = sunxi_select_freq(mmc, imd, ifreq)) != 0)
mmc->tran_speed = freq;
else {
MMCINFO("%s: err freq %d-%d\n", __func__, ifreq, freq);
ret = -1;
goto OUT;
}
MMCINFO("========best spd md: %d-%s, freq: %d-%d\n", imd, spd_name[imd], ifreq, freq);
if (mmc->card_caps & MMC_MODE_8BIT)
bus_width = 8;
else if (mmc->card_caps & MMC_MODE_4BIT)
bus_width = 4;
else
bus_width = 1;
/* switch to specific speed mode */
if (imd == DS26_SDR12)
ret = mmc_mmc_switch_bus_mode(mmc, DS26_SDR12, bus_width);
else if (imd == HSSDR52_SDR25)
ret = mmc_mmc_switch_bus_mode(mmc, HSSDR52_SDR25, bus_width);
else if (imd == HSDDR52_DDR50)
ret = mmc_mmc_switch_bus_mode(mmc, HSDDR52_DDR50, bus_width);
else if (imd == HS200_SDR104)
ret = mmc_mmc_switch_bus_mode(mmc, HS200_SDR104, bus_width);
else if (imd == HS400) {
/* firstly, switch to HS-DDR 8 bit */
ret = mmc_mmc_switch_bus_mode(mmc, HSDDR52_DDR50, bus_width);
if (ret) {
MMCINFO("switch to %s fail\n", spd_name[imd]);
goto OUT;
}
/* then, switch to HS400 */
ret = mmc_mmc_switch_bus_mode(mmc, HS400, bus_width);
}
if (ret) {
MMCINFO("switch to %s fail\n", spd_name[imd]);
goto OUT;
}
mmc_set_clock(mmc, mmc->tran_speed);
OUT:
return ret;
}
int mmc_write_info(int dev_num, void *buffer, u32 buffer_size)
{
struct mmc *mmc = find_mmc_device(dev_num);
int work_mode = uboot_spare_head.boot_data.work_mode;
struct boot_sdmmc_private_info_t priv_info;
if (mmc == NULL) {
MMCINFO("Can not find mmc\n");
return -1;
}
if (work_mode != WORK_MODE_BOOT)
{
memset(&priv_info, 0x0, sizeof(priv_info));
if (mmc->cfg->platform_caps.sample_mode == AUTO_SAMPLE_MODE) {
if ((sizeof(struct tune_sdly)+64) > buffer_size) { /* 64byte is resvered for other information */
MMCINFO("size of tuning_sdly over %d\n", buffer_size);
} else
memcpy(&priv_info.tune_sdly.tm4_smx_fx[0],
(void *)&mmc->cfg->platform_caps.sdly.tm4_smx_fx[0], sizeof(struct tune_sdly));
} else {
/* fill invalid information "0xff" */
memset(&priv_info.tune_sdly.tm4_smx_fx[0], 0xff, sizeof(struct tune_sdly));
}
priv_info.boot_mmc_cfg.boot0_para = mmc->cfg->platform_caps.boot0_para;
priv_info.boot_mmc_cfg.boot_odly_50M = mmc->cfg->platform_caps.boot_odly_50M;
priv_info.boot_mmc_cfg.boot_sdly_50M = mmc->cfg->platform_caps.boot_sdly_50M;
priv_info.boot_mmc_cfg.boot_odly_50M_ddr = mmc->cfg->platform_caps.boot_odly_50M_ddr;
priv_info.boot_mmc_cfg.boot_sdly_50M_ddr = mmc->cfg->platform_caps.boot_sdly_50M_ddr;
priv_info.boot_mmc_cfg.boot_hs_f_max = mmc->cfg->platform_caps.boot_hs_f_max;
if (IS_SD(mmc))
priv_info.card_type = CARD_TYPE_SD;
else
priv_info.card_type = CARD_TYPE_MMC;
/* offset 0~127: boot0 struct _boot_sdcard_info_t; offset 128~255: struct tune_sdly, timing parameter for speed mode and frequency */
memcpy((buffer+SDMMC_PRIV_INFO_ADDR_OFFSET), (void *)&priv_info, sizeof(priv_info));
#if 0
{
u32 i, *p;
p = (u32 *)(buffer+SDMMC_PRIV_INFO_ADDR_OFFSET);
for (i=0; i<sizeof(priv_info)/4; i++)
MMCINFO("%d %x\n", i, p[i]);
}
#endif
MMCINFO("write mmc info ok\n");
return 0;
}
return -1;
}