本帖最后由 Mcuzone_TKN 于 2020-5-15 09:15 编辑
关键词:Microchip Atmel SAM4E SAM4E-EK SAM4E16E 芯片 NAND_FLASH
概述:简要运行NAND闪存组件单元测试
NAND Flash的容量较大。整片Flash分为若干个块(Block),每个Block分为若干个页(Page)。在每个页中,除了数据区域,也包含若干“多余”的区域,用来进行ECC等操作。在进行擦除操作是,基本单位是“块”;而编程的基本单位是“页”。另外,NAND Flash的物理特性决定了其在编程时,每个bit只能从1变成0,不能从0变成1,所以写之前,必须先对块进行擦除(擦除时把所有位置为1)。 读写时序:因为没有地址线,所以读写较为复杂。读写时,需要先发送相应操作命令,然后发送地址,才能进行数据传输。 打开产品光盘SAM4E16E-EK/SAM4E16E-EK中文资料/softpack软件包/Atmel Studio 7,打开08_NAND_FLASH_UNIT_TEST例子。 int main(void)
{
const usart_serial_options_t usart_serial_options = {
.baudrate = CONF_TEST_BAUDRATE,
.charlength = CONF_TEST_CHARLENGTH,
.paritytype = CONF_TEST_PARITY,
.stopbits = CONF_TEST_STOPBITS
}; sysclk_init(); #if SAM
sysclk_enable_peripheral_clock(CONSOLE_UART_ID);
#else
sysclk_enable_hsb_module(SYSCLK_EBI);
sysclk_enable_pbb_module(SYSCLK_SMC_REGS);
sysclk_enable_pbb_module(SYSCLK_HMATRIX);
#endif board_init(); stdio_serial_init(CONF_TEST_USART, &usart_serial_options); //定义所有测试用例
DEFINE_TEST_CASE(nand_flash_test_read_id, NULL, run_test_initialization, NULL,
"NAND Flash initialization and id test");
DEFINE_TEST_CASE(nand_flash_test_raw_read_write, NULL,
run_test_raw_read_write, NULL,
"NAND Flash raw data read/write test");
DEFINE_TEST_CASE(nand_flash_test_software_ecc, NULL,
run_test_software_ecc, NULL,
"NAND Flash data read/write with software ECC test"); //将测试用例地址放在数组中。
DEFINE_TEST_ARRAY(nand_flash_test_array) = {
&nand_flash_test_read_id,
&nand_flash_test_raw_read_write,
&nand_flash_test_software_ecc,}; //定义测试套件
DEFINE_TEST_SUITE(nand_flash_suite, nand_flash_test_array,
"NAND Flash component test suite"); //在测试套件中运行所有测试
test_suite_run(&nand_flash_suite); while (1) {
}
}
|