diff --git a/board/sunxi/common/power_check.c b/board/sunxi/common/power_check.c
index d427081ad2..12aa7d94ba 100644
--- a/board/sunxi/common/power_check.c
+++ b/board/sunxi/common/power_check.c
@@ -57,8 +59,8 @@ static void EnterNormalShutDownMode(void)
 
 static void EnterLowPowerShutDownMode(void)
 {
-	printf("battery ratio is low without  dc or ac, should be ShowDown\n");
-	sunxi_bmp_display("bat\\low_pwr.bmp");
+	printf("Warning: Low battery power, shutting down\n");
+	sunxi_bmp_display("bat/low_pwr.bmp");
 	__msdelay(3000);
 	sunxi_board_shutdown();
 	for(;;);
@@ -66,8 +68,8 @@ static void EnterLowPowerShutDownMode(void)
 
 static void EnterShutDownWithChargeMode(void)
 {
-	printf("battery low power and vol with dc or ac, should charge longer\n");
-	sunxi_bmp_display("bat\\bempty.bmp");
+	printf("Warning: Low battery power, shutting down to recharge\n");
+	sunxi_bmp_display("bat/bempty.bmp");
 	__msdelay(3000);
 	sunxi_board_shutdown();
 	for(;;);
@@ -75,8 +77,8 @@ static void EnterShutDownWithChargeMode(void)
 
 static void EnterAndroidChargeMode(void)
 {
-	printf("sunxi_bmp_charger_display\n");
-	sunxi_bmp_display("bat\\battery_charge.bmp");
+	printf("Warning: shutting down\n");
+	sunxi_bmp_display("bat/battery_charge.bmp");
 #if 1	/* shutdowon instead of update charge variable */
 	__msdelay(3000);
 	sunxi_board_shutdown();
@@ -88,12 +90,10 @@ static void EnterAndroidChargeMode(void)
 
 static void EnterNormalBootMode(void)
 {
-	printf("sunxi_bmp_logo_display\n");
+	/* printf("sunxi_bmp_logo_display\n"); */
 	sunxi_bmp_display("bootlogo.bmp");
 }
 
-
-
 int ProbePreSystemMode(void)
 {
     int  PreSysMode = 0;
diff --git a/common/cmd_sunxi_bmp.c b/common/cmd_sunxi_bmp.c
index 59f1210dc1..bfcefca44e 100644
--- a/common/cmd_sunxi_bmp.c
+++ b/common/cmd_sunxi_bmp.c
@@ -31,6 +31,8 @@
 #include <malloc.h>
 #include <sunxi_bmp.h>
 #include <sunxi_board.h>
+#include <fs.h>
+#include <vsprintf.h>
 
 static int sunxi_bmp_probe_info (uint addr);
 static int sunxi_bmp_show(sunxi_bmp_store_t bmp_info);
@@ -179,42 +181,43 @@ U_BOOT_CMD(
 
 int sunxi_bmp_display(char *name)
 {
-
-        sunxi_bmp_store_t bmp_info;
+	sunxi_bmp_store_t bmp_info;
 	char  bmp_name[32];
-	char  bmp_addr[32] = {0};
-	char*  bmp_buff = NULL;
+	char *bmp_buff = NULL;
 	int  ret = -1;
 	//const size_t bmp_buff_len = 10<<20; //10M
 	//size_t file_size = 0;
-	char * bmp_argv[6] = { "fatload", "mmc", getenv("boot_part"), "00000000", bmp_name, NULL };
 
 	// free() function  will  take a long time,so not use malloc memory
-	bmp_buff = (char*)CONFIG_SYS_SDRAM_BASE; 
-	if(bmp_buff == NULL)
+	bmp_buff = (char*)CONFIG_SYS_SDRAM_BASE;
+	if (bmp_buff == NULL)
 	{
 		printf("sunxi bmp: alloc buffer for %s fail\n", name);
 		return -1;
 	}
 	//set bmp decode addr is CONFIG_SYS_SDRAM_BASE
-	sprintf(bmp_addr,"%lx", (ulong)bmp_buff);
-	bmp_argv[3] = bmp_addr;
+	if (fs_set_blk_dev("mmc", getenv("boot_part"), FS_TYPE_ANY))
+		return -1;
 
-	memset(bmp_name, 0, 32);
-	strcpy(bmp_name, name);
-	if(do_fat_fsload(0, 0, 5, bmp_argv))
+	snprintf(bmp_name, 32, "%s", name);
+	if (!file_exists("mmc", getenv("boot_part"), bmp_name, FS_TYPE_ANY))
 	{
-		printf("sunxi bmp info error : unable to open logo file %s\n", bmp_argv[4]);
-		return -1;
+		snprintf(bmp_name, 32, "/boot/%s", name);
+		if (!file_exists("mmc", getenv("boot_part"), bmp_name, FS_TYPE_ANY))
+		{
+			printf("sunxi bmp: unable to open file %s\n", bmp_name);
+			return -1;
+		}
 	}
-	//file_size = simple_strtoul(getenv("filesize"), NULL, 16);
-
+	if (fs_set_blk_dev("mmc", getenv("boot_part"), FS_TYPE_ANY))
+		return -1;
+	fs_read(bmp_name, (ulong)bmp_buff, 0, 0);
 #if defined(CONFIG_SUNXI_LOGBUFFER)
 	bmp_info.buffer = (void *)(CONFIG_SYS_SDRAM_BASE + gd->ram_size - SUNXI_DISPLAY_FRAME_BUFFER_SIZE);
 #else
 	bmp_info.buffer = (void *)(SUNXI_DISPLAY_FRAME_BUFFER_ADDR);
 #endif
-	printf("bmp file buffer: 0x%lx, bmp_info.buffer: %lx\n",(ulong)bmp_buff,(ulong)bmp_info.buffer);
+	/* printf("bmp file buffer: 0x%lx, bmp_info.buffer: %lx\n",(ulong)bmp_buff,(ulong)bmp_info.buffer); */
 	if(!sunxi_bmp_decode((ulong)bmp_buff, &bmp_info))
 	{
 		debug("decode bmp ok\n");
diff --git a/include/configs/sun50iw1p1.h b/include/configs/sun50iw1p1.h
index 62eeeb1b29..80ab660011 100644
--- a/include/configs/sun50iw1p1.h
+++ b/include/configs/sun50iw1p1.h
@@ -444,6 +444,7 @@
 #define CONFIG_CMD_ECHO
 #define CONFIG_CMD_SOURCE
 #define CONFIG_CMD_SUNXI_UMS
+#define CONFIG_SYS_VSNPRINTF
 
 #define CONFIG_PINE64_MODEL
 #define CONFIG_PINE64_MODEL_PINEBOOK_DETECTION