void ee_Erase(void) { uint16_t i; uint8_t buf[EE_SIZE]; /* 填充缓冲区 */ for (i = 0; i < EE_SIZE; i++) { buf[i] = 0xFF; } /* 写EEPROM, 起始地址 = 0,数据长度为 256 */ if (ee_WriteBytes(buf, 0, EE_SIZE) == 0) { printf("擦除eeprom出错!\r\n"); #ifdef LCD_DISPLAY // LCD_Clear(20,110,206,16,BACKGROUND); //清除屏幕 LCD_DispEnCh(20,110,"擦除EEPROM出错!",RED); #endif return; } else { printf("擦除eeprom成功!\r\n"); #ifdef LCD_DISPLAY // LCD_Clear(20,110,206,16,BACKGROUND); //清除屏幕 LCD_DispEnCh(20,110,"擦除EEPROM成功!",BLUE); #endif } }
uint8_t EEPROM_AutoTest(void) { uint16_t i; uint8_t write_buf[EE_SIZE]; uint8_t read_buf[EE_SIZE]; /*-----------------------------------------------------------------------------------*/ if (ee_CheckOk() == 0) { return 0; } /*------------------------------------------------------------------------------------*/ /* 填充测试缓冲区 */ for (i = 0; i < EE_SIZE; i++) { write_buf[i] = i; } /*------------------------------------------------------------------------------------*/ if (ee_WriteBytes(write_buf, 0, EE_SIZE) == 0) { return 0 ; } else //写成功 { } /*写完之后需要适当的延时再去读,不然会出错*/ ee_Delay(0x0FFFFF); /*-----------------------------------------------------------------------------------*/ if (ee_ReadBytes(read_buf, 0, EE_SIZE) == 0) { return 0; } else //读成功 { } /*-----------------------------------------------------------------------------------*/ for (i = 0; i < EE_SIZE; i++) { if(read_buf[i] != read_buf[i]) { return 0; } } return 1; }
/* * ISO 自动整板测试 */ void ISO_AutoTest(void) { uint32_t i=0x10ffff; uint8_t board_state = 1; uint8_t board_test = 0x55; /* 液晶初始化先于串口,不然会有bug,至于是什么原因我也不知道:( */ LCD_Init(); USART1_Config(); /* 初始化sd卡文件系统,因为汉字的字库放在了sd卡里面 */ Sd_fs_init(); LCD_Clear(0,0,240,320,WHITE); LCD_DispStr(50,10,"ISO board auto test ",BLUE); USART1_Config(); SysTick_Init(); /* LED 端口初始化 */ LED_GPIO_Config(); LED1_ON; LED2_ON; LED3_ON; /*按键*/ Key1_GPIO_Config(); Key2_GPIO_Config(); /* EEPROM测试 */ LCD_DispEnCh(20,40,"1.EEPROM 自检中",BLUE); /*-----------------------------------------------------------------------------------*/ if (EEPROM_AutoTest() == 0) //坏 { board_state = 0; LCD_DispEnCh(20,40,"1.EEPROM 检测失败!",RED); } else { LCD_DispEnCh(20,40,"1.EEPROM 检测通过!",BLUE); } /* FLASH 测试 */ LCD_DispEnCh(20,70,"2.FLASH 自检中",BLUE); if(FLASH_AutoTest() == 0) //坏 { board_state = 0; LCD_DispEnCh(20,70,"2.FLASH 检测失败!",RED); } else { LCD_DispEnCh(20,70,"2.FLASH 检测通过!",BLUE); } /* RTC测试 */ LCD_DispEnCh(20,100,"3.RTC 自检中",BLUE); if(RTC_AutoTest() == 0) //坏 { board_state = 0; LCD_DispEnCh(20,100,"3.RTC 检测失败!",RED); } else { LCD_DispEnCh(20,100,"3.RTC 检测通过!",BLUE); } /* FM测试 */ LCD_DispEnCh(20,130,"4.FM 自检中",BLUE); if(RDA5807_FM_AutoTest() == 0) //坏 { board_state = 0; LCD_DispEnCh(20,130,"4.FM检测失败!",RED); } else { LCD_DispEnCh(20,130,"4.FM检测通过",BLUE); } /* mp3 sd 喇叭测试 */ /* 关闭systick定时器 以免影响mp3播放效果*/ SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk; LCD_DispEnCh(20,160,"5.MP3及喇叭自检中",BLUE); if(MP3_AutoTest() == 0) //坏 { board_state = 0; LCD_DispEnCh(20,160,"5.sd 卡错误!!! ",RED); } else { LCD_DispEnCh(20,160,"5.请确认喇叭是否有声音",BLUE); } if(board_state == 0)// 测试不通过 { LCD_DispEnCh(20,220,"自检测试不通过!!!",RED); while(1); } /* 按键测试 */ LCD_DispEnCh(20,190,"6.请检查按键及led灯 ",BLUE); while(i--) { /* 按键测试 */ if( Key_Scan(GPIOA,GPIO_Pin_0) == KEY_ON) { key_state =~key_state; LED1_TOGGLE; LED2_TOGGLE; LED3_TOGGLE; } if( Key_Scan(GPIOC,GPIO_Pin_13)== KEY_ON) { key_state =~key_state; LED1_TOGGLE; LED2_TOGGLE; LED3_TOGGLE; } } ee_WriteBytes(&board_test,0,1); //自测成功,写入标记 Soft_Reset(); }
/* * eeprom AT24C02 读写测试 */ void Eeprom_Test(void) { uint16_t i; uint8_t write_buf[EE_SIZE]; uint8_t read_buf[EE_SIZE]; /*-----------------------------------------------------------------------------------*/ if (ee_CheckOk() == 0) { /* 没有检测到EEPROM */ printf("没有检测到串行EEPROM!\r\n"); #ifdef LCD_DISPLAY // LCD_Clear(20,128,206,16,BACKGROUND); //清除屏幕 LCD_DispEnCh(20,128,"没有检测到串行EEPROM!",RED); #endif while (1); /* 停机 */ } /*------------------------------------------------------------------------------------*/ /* 填充测试缓冲区 */ for (i = 0; i < EE_SIZE; i++) { write_buf[i] = i; } /*------------------------------------------------------------------------------------*/ if (ee_WriteBytes(write_buf, 0, EE_SIZE) == 0) { printf("写eeprom出错!\r\n"); #ifdef LCD_DISPLAY // LCD_Clear(20,128,206,16,BACKGROUND); //清除屏幕 LCD_DispEnCh(20,128,"写EEPROM出错!",RED); #endif return; } else { printf("写eeprom成功!\r\n"); #ifdef LCD_DISPLAY // LCD_Clear(20,128,206,16,BACKGROUND); //清除屏幕 LCD_DispEnCh(20,128,"写EEPROM成功!",BLUE); #endif } /*写完之后需要适当的延时再去读,不然会出错*/ ee_Delay(0x0FFFFF); /*-----------------------------------------------------------------------------------*/ if (ee_ReadBytes(read_buf, 0, EE_SIZE) == 0) { printf("读eeprom出错!\r\n"); #ifdef LCD_DISPLAY // LCD_Clear(20,146,206,16,BACKGROUND); //清除屏幕 LCD_DispEnCh(20,146,"读EEPROM出错!",RED); #endif return; } else { printf("读eeprom成功,数据如下:\r\n"); #ifdef LCD_DISPLAY // LCD_Clear(20,146,206,16,BACKGROUND); //清除屏幕 LCD_DispEnCh(20,146,"读EEPROM成功!",BLUE); #endif } /*-----------------------------------------------------------------------------------*/ for (i = 0; i < EE_SIZE; i++) { if(read_buf[i] != read_buf[i]) { printf("0x%02X ", read_buf[i]); printf("错误:EEPROM读出与写入的数据不一致"); #ifdef LCD_DISPLAY // LCD_Clear(20,165,206,16,BACKGROUND); //清除屏幕 LCD_DispEnCh(20,165,"错误:EEPROM读出与写入的数据不一致!",RED); #endif return; } printf(" %02X", read_buf[i]); if ((i & 15) == 15) { printf("\r\n"); } } printf("eeprom读写测试成功\r\n"); #ifdef LCD_DISPLAY // LCD_Clear(20,165,206,16,BACKGROUND); //清除屏幕 LCD_DispEnCh(20,165,"EEPROM读写测试成功!",BLUE); #endif while(1); }