samples: mpu_test: Add controller specific write

This patch add a controller specific write function and fixes a
documentation error in the mpu_test README file.

Signed-off-by: Vincenzo Frascino <vincenzo.frascino@linaro.org>
This commit is contained in:
Vincenzo Frascino 2017-05-10 11:50:24 +01:00 committed by Kumar Gala
commit 8162bb63c4
2 changed files with 80 additions and 14 deletions

View file

@ -51,16 +51,12 @@ Sample Output
.. code-block:: console
***** BOOTING ZEPHYR OS v1.7.99 - BUILD: Mar 9 2017 13:01:59 *****
*** MPU test options ***
1 - Read a reserved address in the memory map
2 - Write in to boot FLASH/ROM
3 - Run code located in RAM
Select an option:
1 - Read a reserved address in the memory map
***** MPU FAULT *****
Executing thread ID (thread): 0x20000258
Faulting instruction address: 0x2ac
Data Access Violation
Address: 0x20040000
Fatal fault in essential thread! Spinning...
***** BOOTING ZEPHYR OS v1.7.99 - BUILD: May 12 2017 09:47:02 *****
shell> select mpu_test
mpu_test> read
***** BUS FAULT *****
Executing thread ID (thread): 0x200003b8
Faulting instruction address: 0x290
Precise data bus error
Address: 0x24000000
Fatal fault in thread 0x200003b8! Aborting.

View file

@ -6,6 +6,7 @@
#include <stdlib.h>
#include <zephyr.h>
#include <flash.h>
#include <misc/printk.h>
#include <shell/shell.h>
@ -33,18 +34,81 @@ static int shell_cmd_read(int argc, char *argv[])
return 0;
}
#if defined(CONFIG_SOC_FLASH_MCUX)
static int shell_cmd_write_mcux(int argc, char *argv[])
{
ARG_UNUSED(argc);
ARG_UNUSED(argv);
struct device *flash_dev;
flash_dev = device_get_binding(CONFIG_SOC_FLASH_MCUX_DEV_NAME);
u32_t value[2];
/* 128K reserved to the application */
u32_t offset = FLASH_MEM + 0x20000;
value[0] = 0xBADC0DE;
value[1] = 0xBADC0DE;
printk("write address: 0x%x\n", offset);
flash_write_protection_set(flash_dev, false);
if (flash_write(flash_dev, offset, value,
sizeof(value)) != 0) {
printk("Flash write failed!\n");
return 1;
}
flash_write_protection_set(flash_dev, true);
return 0;
}
#elif defined(CONFIG_SOC_FLASH_STM32)
static int shell_cmd_write_stm32(int argc, char *argv[])
{
ARG_UNUSED(argc);
ARG_UNUSED(argv);
struct device *flash_dev;
flash_dev = device_get_binding(CONFIG_SOC_FLASH_STM32_DEV_NAME);
/* 16K reserved to the application */
u32_t offset = FLASH_MEM + 0x4000;
u32_t value = 0xBADC0DE;
printk("write address: 0x%x\n", offset);
flash_write_protection_set(flash_dev, false);
if (flash_write(flash_dev, offset, &value,
sizeof(value)) != 0) {
printk("Flash write failed!\n");
return 1;
}
flash_write_protection_set(flash_dev, true);
return 0;
}
#else
static int shell_cmd_write(int argc, char *argv[])
{
ARG_UNUSED(argc);
ARG_UNUSED(argv);
u32_t *p_mem = (u32_t *) FLASH_MEM;
/* 16K reserved to the application */
u32_t *p_mem = (u32_t *) (FLASH_MEM + 0x4000);
printk("write address: 0x%x\n", FLASH_MEM + 0x4000);
/* Write in to boot FLASH/ROM */
*p_mem = 0xBADC0DE;
return 0;
}
#endif /* SOC_FLASH_MCUX */
static int shell_cmd_run(int argc, char *argv[])
{
@ -83,7 +147,13 @@ static int shell_cmd_mtest(int argc, char *argv[])
static struct shell_cmd commands[] = {
{ "read", shell_cmd_read, READ_CMD_HELP},
#if defined(CONFIG_SOC_FLASH_MCUX)
{ "write", shell_cmd_write_mcux, WRITE_CMD_HELP },
#elif defined(CONFIG_SOC_FLASH_STM32)
{ "write", shell_cmd_write_stm32, WRITE_CMD_HELP },
#else
{ "write", shell_cmd_write, WRITE_CMD_HELP },
#endif /* SOC_FLASH_MCUX*/
{ "run", shell_cmd_run, RUN_CMD_HELP },
{ "mtest", shell_cmd_mtest, MTEST_CMD_HELP },
{ NULL, NULL, NULL }