BeRTOS
|
00001 00050 #include "hw/hw_dataflash.h" 00051 #include "cfg/cfg_dataflash.h" 00052 #include "cfg/cfg_proc.h" 00053 00054 #include <cfg/test.h> 00055 #include <cfg/debug.h> 00056 #include <cfg/module.h> 00057 00058 // Define logging setting (for cfg/log.h module). 00059 #define LOG_LEVEL DATAFLASH_LOG_LEVEL 00060 #define LOG_FORMAT DATAFLASH_LOG_FORMAT 00061 #include <cfg/log.h> // for logging system 00062 00063 #include <drv/timer.h> 00064 #include <drv/ser.h> 00065 #include <drv/dataflash.h> 00066 00067 #include <kern/proc.h> 00068 #include <io/kfile.h> 00069 00070 #include <string.h> 00071 00072 /* 00073 * Settings for dataflash test 00074 * 00075 * \{ 00076 */ 00077 // Datafalsh type memory to test (see drv/dataflash.h for supported memory types) 00078 #define DATAFLASH_MEM_MODEL DFT_AT45DB642D 00079 00080 // Function to set CS, this is typically implement in hw/hw_dataflash.{c, h} 00081 #define DATAFLASH_FUNC_CS_SET dataflash_hw_setCS 00082 00083 // Function to reset memery, this is typically implement in hw/hw_dataflash.{c, h} 00084 #define DATAFLASH_FUNC_RESET NULL 00085 00086 // Buffer len to test dataflash 00087 #define DATAFLASH_TEST_STR_LEN 12307 00088 00089 // If you want use a rand function of standard library set to 1. 00090 #define DATAFLASH_USE_RAND_FUNC 0 00091 /* \} */ 00092 00093 /* 00094 * Kfile structure to test a dataflash. 00095 */ 00096 static Serial spi_fd; 00097 static DataFlash dflash_fd; 00098 00099 /* 00100 * Define tmp buffer to stora data for 00101 * write and read flash memory test. 00102 */ 00103 static uint8_t test_buf[DATAFLASH_TEST_STR_LEN]; 00104 static uint8_t save_buf[DATAFLASH_TEST_STR_LEN]; 00105 00110 int dataflash_testSetup(void) 00111 { 00112 kfile_testSetup(); 00113 LOG_INFO("KFILE setup..ok\n"); 00114 00115 LOG_INFO("Check if kernel is enable (if enable you should see the assert message.)\n"); 00116 SILENT_ASSERT("bertos/drv/dataflash_test.c:119: Assertion failed: !CONFIG_KERN"); 00117 ASSERT(!CONFIG_KERN); 00118 00119 /* 00120 * This test use a kfile_test module, 00121 * so should include source in your makefile. 00122 */ 00123 MOD_CHECK(kfile_test); 00124 00125 timer_init(); 00126 LOG_INFO("Timer init..ok\n"); 00127 00128 /* 00129 * Init SPI module and dataflash driver. 00130 */ 00131 // Open SPI comunication channel 00132 spimaster_init(&spi_fd, 0); 00133 LOG_INFO("SPI0 init..ok\n"); 00134 00135 ser_setbaudrate(&spi_fd, 5000000UL); 00136 LOG_INFO("SPI0 set baudrate..ok\n"); 00137 00138 //Init dataflash memory 00139 dataflash_hw_init(); 00140 LOG_INFO("DATAFLASH HW..ok\n"); 00141 00142 if (dataflash_init(&dflash_fd, &spi_fd.fd, DATAFLASH_MEM_MODEL, DATAFLASH_FUNC_CS_SET, DATAFLASH_FUNC_RESET)) 00143 LOG_INFO("DATAFLASH init..ok\n"); 00144 else 00145 LOG_ERR("DATAFLASH init..fail\n"); 00146 00147 00148 //Fill tmp buffer with rand chars. 00149 for (int i = 0; i < DATAFLASH_TEST_STR_LEN; i++) 00150 { 00151 #if DATAFLASH_USE_RAND_FUNC 00152 #include <stdlib.h> //Rand() 00153 00154 test_buf[i] = (uint8_t)rand(); 00155 #else 00156 test_buf[i] = (i & 0xff); 00157 #endif 00158 } 00159 00160 LOG_INFO("Fill tmp buff..ok\n"); 00161 00162 return 0; 00163 } 00164 00165 00170 int dataflash_testRun(void) 00171 { 00172 LOG_INFO("Run KFILE test.\n"); 00173 00174 SILENT_ASSERT("bertos/drv/dataflash.c:405: Assertion failed: fd->fd.seek_pos + size <= fd->fd.size"); 00175 if (kfile_testRunGeneric(&dflash_fd.fd, test_buf, save_buf, sizeof(test_buf)) != EOF) 00176 { 00177 LOG_INFO("KFILE test..ok\n"); 00178 } 00179 else 00180 { 00181 LOG_ERR("KFILE test..fail!\n"); 00182 return EOF; 00183 } 00184 00185 return 0; 00186 } 00187 00192 int dataflash_testTearDown(void) 00193 { 00194 /* */ 00195 return 0; 00196 } 00197 00198 /* 00199 * Empty main. 00200 * 00201 * Look it as exmple, or use it if 00202 * you want test a data flash driver stand alone. 00203 */ 00204 #if 0 00205 int main(void) 00206 { 00207 IRQ_ENABLE; 00208 kdbg_init(); 00209 00210 #if CONFIG_KERN 00211 proc_init(); 00212 #endif 00213 00214 if (!dataflash_testSetup()) 00215 { 00216 LOG_INFO("DATAFLASH setup..ok\n"); 00217 } 00218 else 00219 { 00220 LOG_ERR("DATAFLASH setup..fail!\n"); 00221 return EOF; 00222 } 00223 00224 dataflash_testRun(); 00225 00226 for(;;) 00227 { 00228 } 00229 } 00230 #endif