samples: drivers: Added Nand Test Application
Nand Test Application has added in sample/drivers folder. Signed-off-by: Navinkumar Balabakthan <navinkumar.balabakthan@intel.com>
This commit is contained in:
parent
966c4c37ab
commit
6a8d011c65
8
samples/drivers/soc_flash_nand/CMakeLists.txt
Normal file
8
samples/drivers/soc_flash_nand/CMakeLists.txt
Normal file
@ -0,0 +1,8 @@
|
||||
# Copyright (c) 2023 Intel Corporation
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
cmake_minimum_required(VERSION 3.20.0)
|
||||
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
|
||||
project(cdns_nand)
|
||||
|
||||
target_sources(app PRIVATE src/main.c)
|
||||
@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Intel Corporation
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/* The overlay file should be used to enable any
|
||||
* dts nodes required by this application for this
|
||||
* board.
|
||||
*/
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
nand = &nand;
|
||||
};
|
||||
};
|
||||
|
||||
&nand {
|
||||
status = "okay";
|
||||
};
|
||||
10
samples/drivers/soc_flash_nand/prj.conf
Normal file
10
samples/drivers/soc_flash_nand/prj.conf
Normal file
@ -0,0 +1,10 @@
|
||||
# Copyright (c) 2023, Intel Corporation.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# Misc
|
||||
CONFIG_HEAP_MEM_POOL_SIZE=363840
|
||||
|
||||
# Enable Flash
|
||||
CONFIG_FLASH=y
|
||||
CONFIG_FLASH_PAGE_LAYOUT=y
|
||||
CONFIG_LOG=y
|
||||
28
samples/drivers/soc_flash_nand/sample.yaml
Normal file
28
samples/drivers/soc_flash_nand/sample.yaml
Normal file
@ -0,0 +1,28 @@
|
||||
sample:
|
||||
description: Cadence Nand Driver sample application.
|
||||
name: cdns_nand
|
||||
tests:
|
||||
sample.drivers.flash.soc_flash_nand:
|
||||
platform_allow:
|
||||
- intel_socfpga_agilex5_socdk
|
||||
integration_platforms:
|
||||
- intel_socfpga_agilex5_socdk
|
||||
tags:
|
||||
- flash
|
||||
- cdns
|
||||
harness: console
|
||||
harness_config:
|
||||
fixture: external_flash
|
||||
type: multi_line
|
||||
ordered: true
|
||||
regex:
|
||||
- "Nand flash driver test sample"
|
||||
- "Nand flash driver block size 20000"
|
||||
- "The Page size of 800"
|
||||
- "Nand flash driver data erase successful...."
|
||||
- "Nand flash driver write completed...."
|
||||
- "Nand flash driver read completed...."
|
||||
- "Nand flash driver read verified"
|
||||
- "Nand flash driver data erase successful...."
|
||||
- "Nand flash driver read verified after erase...."
|
||||
- "Nand flash driver test sample completed...."
|
||||
150
samples/drivers/soc_flash_nand/src/main.c
Normal file
150
samples/drivers/soc_flash_nand/src/main.c
Normal file
@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Copyright (c) 2023, Intel Corporation.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <zephyr/device.h>
|
||||
#include <zephyr/drivers/flash.h>
|
||||
#include <zephyr/kernel.h>
|
||||
#include <string.h>
|
||||
#include <zephyr/sys/printk.h>
|
||||
|
||||
#ifndef OFFSET_PAGE
|
||||
#define OFFSET_PAGE 0x00
|
||||
#endif
|
||||
|
||||
#ifndef NAND_NUM_PAGES
|
||||
#define NAND_NUM_PAGES 50
|
||||
#endif
|
||||
|
||||
#define NAND_DEV DEVICE_DT_GET(DT_ALIAS(nand));
|
||||
|
||||
int main(void)
|
||||
{
|
||||
const struct device *nand_dev;
|
||||
struct flash_pages_info page;
|
||||
size_t flash_block_size;
|
||||
size_t total_pages;
|
||||
int ret;
|
||||
uint8_t *w_Page_buffer;
|
||||
uint8_t *r_Page_buffer;
|
||||
uint8_t page_data = 0;
|
||||
|
||||
printk("Nand flash driver test sample\n");
|
||||
|
||||
nand_dev = NAND_DEV;
|
||||
|
||||
if (!device_is_ready(nand_dev)) {
|
||||
printk("Nand flash driver is not ready\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
total_pages = flash_get_page_count(nand_dev);
|
||||
|
||||
flash_block_size = flash_get_write_block_size(nand_dev);
|
||||
printk("Nand flash driver block size %lx\n", flash_block_size);
|
||||
|
||||
ret = flash_get_page_info_by_offs(nand_dev, 0x00, &page);
|
||||
|
||||
if (ret < 0) {
|
||||
printk("Nand flash driver page info error\n");
|
||||
return ret;
|
||||
}
|
||||
printk("The Page size of %lx\n", page.size);
|
||||
|
||||
w_Page_buffer = (uint8_t *)k_malloc(page.size * NAND_NUM_PAGES);
|
||||
|
||||
r_Page_buffer = (uint8_t *)k_malloc(page.size * NAND_NUM_PAGES);
|
||||
|
||||
if (w_Page_buffer != NULL) {
|
||||
|
||||
for (int index = 0; index < page.size * NAND_NUM_PAGES; index++) {
|
||||
w_Page_buffer[index] = (page_data++ % 255);
|
||||
}
|
||||
|
||||
} else {
|
||||
printk("Write memory not allocated\n");
|
||||
return -ENOSR;
|
||||
}
|
||||
|
||||
if (r_Page_buffer != NULL) {
|
||||
memset(r_Page_buffer, 0x55, page.size * NAND_NUM_PAGES);
|
||||
} else {
|
||||
printk("Read memory not allocated\n");
|
||||
k_free(w_Page_buffer);
|
||||
return -ENOSR;
|
||||
}
|
||||
|
||||
ret = flash_erase(nand_dev, OFFSET_PAGE, flash_block_size);
|
||||
|
||||
if (ret < 0) {
|
||||
printk("Nand flash driver read Error\n");
|
||||
k_free(w_Page_buffer);
|
||||
k_free(r_Page_buffer);
|
||||
return ret;
|
||||
}
|
||||
printk("Nand flash driver data erase successful....\n");
|
||||
|
||||
ret = flash_write(nand_dev, OFFSET_PAGE, w_Page_buffer, page.size * NAND_NUM_PAGES);
|
||||
if (ret < 0) {
|
||||
printk("Nand flash driver write error\n");
|
||||
k_free(w_Page_buffer);
|
||||
k_free(r_Page_buffer);
|
||||
return ret;
|
||||
}
|
||||
printk("Nand flash driver write completed....\n");
|
||||
|
||||
ret = flash_read(nand_dev, OFFSET_PAGE, r_Page_buffer, page.size * NAND_NUM_PAGES);
|
||||
if (ret < 0) {
|
||||
printk("Nand flash driver read error\n");
|
||||
k_free(w_Page_buffer);
|
||||
k_free(r_Page_buffer);
|
||||
return ret;
|
||||
}
|
||||
|
||||
printk("Nand flash driver read completed....\n");
|
||||
|
||||
ret = memcmp(w_Page_buffer, r_Page_buffer, page.size * NAND_NUM_PAGES);
|
||||
|
||||
if (ret < 0) {
|
||||
printk("Nand flash driver read not match\n");
|
||||
k_free(w_Page_buffer);
|
||||
k_free(r_Page_buffer);
|
||||
return ret;
|
||||
}
|
||||
printk("Nand flash driver read verified\n");
|
||||
|
||||
ret = flash_erase(nand_dev, OFFSET_PAGE, flash_block_size);
|
||||
|
||||
if (ret < 0) {
|
||||
printk("Nand flash driver read Error\n");
|
||||
k_free(w_Page_buffer);
|
||||
k_free(r_Page_buffer);
|
||||
return ret;
|
||||
}
|
||||
printk("Nand flash driver data erase successful....\n");
|
||||
|
||||
ret = flash_read(nand_dev, OFFSET_PAGE, r_Page_buffer, page.size * NAND_NUM_PAGES);
|
||||
|
||||
if (ret != 0) {
|
||||
printk("Nand flash driver read error\n");
|
||||
k_free(w_Page_buffer);
|
||||
k_free(r_Page_buffer);
|
||||
return ret;
|
||||
}
|
||||
memset(w_Page_buffer, 0xFF, page.size * NAND_NUM_PAGES);
|
||||
|
||||
ret = memcmp(w_Page_buffer, r_Page_buffer, page.size * NAND_NUM_PAGES);
|
||||
|
||||
if (ret < 0) {
|
||||
printk("Nand flash driver read not match\n");
|
||||
k_free(w_Page_buffer);
|
||||
k_free(r_Page_buffer);
|
||||
return ret;
|
||||
}
|
||||
printk("Nand flash driver read verified after erase....\n");
|
||||
printk("Nand flash driver test sample completed....\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user