diff --git a/samples/drivers/spi_flash/Makefile b/samples/drivers/spi_flash/Makefile new file mode 100644 index 00000000000..e6894e365f5 --- /dev/null +++ b/samples/drivers/spi_flash/Makefile @@ -0,0 +1,6 @@ +MDEF_FILE = prj.mdef +KERNEL_TYPE = micro +BOARD ?= arduino_101 +CONF_FILE = prj.conf + +include ${ZEPHYR_BASE}/Makefile.inc diff --git a/samples/drivers/spi_flash/README.txt b/samples/drivers/spi_flash/README.txt new file mode 100644 index 00000000000..2b9d66ecbcf --- /dev/null +++ b/samples/drivers/spi_flash/README.txt @@ -0,0 +1,35 @@ +Title: SPI flash read and write + +Description: + +A simple spi flash example using the microkernel. + +-------------------------------------------------------------------------------- + +Building and Running Project: + +This microkernel project outputs to the console. It can be built and executed +on arduino_101 as follows: + + make BOARD=arduino_101 + +-------------------------------------------------------------------------------- + +Troubleshooting: + +Problems caused by out-dated project information can be addressed by +issuing one of the following commands then rebuilding the project: + + make clean # discard results of previous builds + # but keep existing configuration info +or + make pristine # discard results of previous builds + # and restore pre-defined configuration info + +-------------------------------------------------------------------------------- + +Sample Output: + +SPI flash testing! +data sent .. +data received ... diff --git a/samples/drivers/spi_flash/prj.conf b/samples/drivers/spi_flash/prj.conf new file mode 100644 index 00000000000..f6e34b918b2 --- /dev/null +++ b/samples/drivers/spi_flash/prj.conf @@ -0,0 +1,7 @@ +# Use standard security profile. (=> no need for a random number generator) +CONFIG_STDOUT_CONSOLE=y +CONFIG_FLASH=y +CONFIG_SPI=y +CONFIG_GPIO=y +CONFIG_SPI_DW_CS_GPIO=y +CONFIG_SPI_DW_PORT_0_CS_GPIO_PIN=24 diff --git a/samples/drivers/spi_flash/prj.mdef b/samples/drivers/spi_flash/prj.mdef new file mode 100644 index 00000000000..a4b7a99c2aa --- /dev/null +++ b/samples/drivers/spi_flash/prj.mdef @@ -0,0 +1,5 @@ +% Application : SPI flash demo + +% TASK NAME PRIO ENTRY STACK GROUPS +% ================================== + TASK TASKA 7 main 2048 [EXE] diff --git a/samples/drivers/spi_flash/src/Makefile b/samples/drivers/spi_flash/src/Makefile new file mode 100644 index 00000000000..00066e15678 --- /dev/null +++ b/samples/drivers/spi_flash/src/Makefile @@ -0,0 +1 @@ +obj-y = main.o diff --git a/samples/drivers/spi_flash/src/main.c b/samples/drivers/spi_flash/src/main.c new file mode 100644 index 00000000000..6f3c0805884 --- /dev/null +++ b/samples/drivers/spi_flash/src/main.c @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2016 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#if defined(CONFIG_STDOUT_CONSOLE) +#include +#define PRINT printf +#else +#include +#define PRINT printk +#endif + +#define FLASH_TEST_REGION_OFFSET 0xff000 +#define FLASH_SECTOR_SIZE 4096 +#define TEST_DATA_BYTE_0 0x55 +#define TEST_DATA_BYTE_1 0xaa +#define TEST_DATA_LEN 2 + +void main(void) +{ + PRINT("SPI flash testing!\n"); + + struct device *dev; + uint8_t buf[TEST_DATA_LEN]; + + dev = device_get_binding("W25QXXDV"); + + if (!dev) { + PRINT("SPI flash driver was not found!\n"); + return; + } + + flash_write_protected(dev, false); + + flash_erase(dev, FLASH_TEST_REGION_OFFSET, FLASH_SECTOR_SIZE); + + flash_write_protected(dev, false); + + buf[0] = TEST_DATA_BYTE_0; + buf[1] = TEST_DATA_BYTE_1; + if (flash_write(dev, FLASH_TEST_REGION_OFFSET, + TEST_DATA_LEN, buf) != DEV_OK) { + PRINT("SPI flash did not work as expected!\n"); + return; + } + PRINT("data sent %x %x\n", buf[0], buf[1]); + + if (flash_read(dev, FLASH_TEST_REGION_OFFSET, + TEST_DATA_LEN, buf) != DEV_OK) { + PRINT("SPI flash did not work as expected!\n"); + return; + } + PRINT("data received %x %x\n", buf[0], buf[1]); + + if ((buf[0] == TEST_DATA_BYTE_0) && (buf[1] == TEST_DATA_BYTE_1)) { + PRINT("data received matches with data sent. Good!!\n"); + } else { + PRINT("data received does not match with data sent!!\n"); + } +}