aboutsummaryrefslogtreecommitdiffstats
path: root/testhal/STM32
diff options
context:
space:
mode:
authorbarthess <barthess@35acf78f-673a-0410-8e92-d51de3d6d3f4>2014-08-06 21:17:02 +0000
committerbarthess <barthess@35acf78f-673a-0410-8e92-d51de3d6d3f4>2014-08-06 21:17:02 +0000
commit156ff76940d3c0f2092368ee8617b6559f5724f1 (patch)
tree0a159c6cfa0714f17a52c4b0c1c8ab28f967ae99 /testhal/STM32
parent2a6b1563905ab06c9b9e59f3b77c9a34a2214f70 (diff)
downloadChibiOS-156ff76940d3c0f2092368ee8617b6559f5724f1.tar.gz
ChibiOS-156ff76940d3c0f2092368ee8617b6559f5724f1.tar.bz2
ChibiOS-156ff76940d3c0f2092368ee8617b6559f5724f1.zip
STM32 FSMC NAND. Change driver file layout and naming conventions.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7145 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'testhal/STM32')
-rw-r--r--testhal/STM32/STM32F4xx/FSMC_NAND/halconf.h23
-rw-r--r--testhal/STM32/STM32F4xx/FSMC_NAND/main.c160
-rw-r--r--testhal/STM32/STM32F4xx/FSMC_NAND/mcuconf.h16
3 files changed, 93 insertions, 106 deletions
diff --git a/testhal/STM32/STM32F4xx/FSMC_NAND/halconf.h b/testhal/STM32/STM32F4xx/FSMC_NAND/halconf.h
index 7a248d93d..f73801d3a 100644
--- a/testhal/STM32/STM32F4xx/FSMC_NAND/halconf.h
+++ b/testhal/STM32/STM32F4xx/FSMC_NAND/halconf.h
@@ -157,17 +157,10 @@
#endif
/**
- * @brief Enables the EMC subsystem.
+ * @brief Enables the NAND subsystem.
*/
-#if !defined(HAL_USE_EMC) || defined(__DOXYGEN__)
-#define HAL_USE_EMC TRUE
-#endif
-
-/**
- * @brief Enables the NAND over EMC subsystem.
- */
-#if !defined(HAL_USE_EMCNAND) || defined(__DOXYGEN__)
-#define HAL_USE_EMCNAND TRUE
+#if !defined(HAL_USE_NAND) || defined(__DOXYGEN__)
+#define HAL_USE_NAND TRUE
#endif
/*===========================================================================*/
@@ -326,19 +319,19 @@
/*===========================================================================*/
/**
- * @brief Enables the @p emcnandAcquireBus() and @p emcnanReleaseBus() APIs.
+ * @brief Enables the @p nandAcquireBus() and @p nanReleaseBus() APIs.
* @note Disabling this option saves both code and data space.
*/
-#if !defined(EMCNAND_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
-#define EMCNAND_USE_MUTUAL_EXCLUSION TRUE
+#if !defined(NAND_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define NAND_USE_MUTUAL_EXCLUSION TRUE
#endif
/**
* @brief Enables internal driver map for bad blocks.
* @note Disabling this option saves both code and data space.
*/
-#if !defined(EMCNAND_USE_BAD_MAP) || defined(__DOXYGEN__)
-#define EMCNAND_USE_BAD_MAP TRUE
+#if !defined(NAND_USE_BAD_MAP) || defined(__DOXYGEN__)
+#define NAND_USE_BAD_MAP TRUE
#endif
#endif /* _HALCONF_H_ */
diff --git a/testhal/STM32/STM32F4xx/FSMC_NAND/main.c b/testhal/STM32/STM32F4xx/FSMC_NAND/main.c
index ac9f571b5..59ef2d80d 100644
--- a/testhal/STM32/STM32F4xx/FSMC_NAND/main.c
+++ b/testhal/STM32/STM32F4xx/FSMC_NAND/main.c
@@ -51,12 +51,12 @@
******************************************************************************
*/
-#define USE_KILL_BLOCK_TEST FALSE
+#define USE_KILL_BLOCK_TEST TRUE
-#define EMCNAND_TIME_SET ((uint32_t) 2) //(8nS)
-#define EMCNAND_TIME_WAIT ((uint32_t) 6) //(30nS)
-#define EMCNAND_TIME_HOLD ((uint32_t) 1) //(5nS)
-#define EMCNAND_TIME_HIZ ((uint32_t) 4) //(20nS)
+#define FSMCNAND_TIME_SET ((uint32_t) 2) //(8nS)
+#define FSMCNAND_TIME_WAIT ((uint32_t) 6) //(30nS)
+#define FSMCNAND_TIME_HOLD ((uint32_t) 1) //(5nS)
+#define FSMCNAND_TIME_HIZ ((uint32_t) 4) //(20nS)
#define NAND_BLOCKS_COUNT 8192
#define NAND_PAGE_DATA_SIZE 2048
@@ -82,7 +82,7 @@
* PROTOTYPES
******************************************************************************
*/
-#if !STM32_EMC_EMCNAND_USE_FSMC_INT
+#if !STM32_NAND_USE_FSMC_INT
static void ready_isr_enable(void);
static void ready_isr_disable(void);
static void nand_ready_cb(EXTDriver *extp, expchannel_t channel);
@@ -108,33 +108,28 @@ static uint8_t ref_buf[NAND_PAGE_SIZE];
//static TimeMeasurement tmu_read_data;
//static TimeMeasurement tmu_read_spare;
-/*
- *
- */
-static const EMCConfig emccfg = {};
-
-#if EMCNAND_USE_BAD_MAP
+#if NAND_USE_BAD_MAP
static uint32_t badblock_map[NAND_BLOCKS_COUNT / 32];
#endif
/*
*
*/
-static const EMCNANDConfig nandcfg = {
- &EMCD1,
+static const NANDConfig nandcfg = {
+ &FSMCD1,
NAND_BLOCKS_COUNT,
NAND_PAGE_DATA_SIZE,
NAND_PAGE_SPARE_SIZE,
NAND_PAGES_PER_BLOCK,
-#if EMCNAND_USE_BAD_MAP
+#if NAND_USE_BAD_MAP
badblock_map,
#endif
NAND_ROW_WRITE_CYCLES,
NAND_COL_WRITE_CYCLES,
/* stm32 specific fields */
- ((EMCNAND_TIME_HIZ << 24) | (EMCNAND_TIME_HOLD << 16) | \
- (EMCNAND_TIME_WAIT << 8) | EMCNAND_TIME_SET),
-#if !STM32_EMC_EMCNAND_USE_FSMC_INT
+ ((FSMCNAND_TIME_HIZ << 24) | (FSMCNAND_TIME_HOLD << 16) | \
+ (FSMCNAND_TIME_WAIT << 8) | FSMCNAND_TIME_SET),
+#if !STM32_NAND_USE_FSMC_INT
ready_isr_enable,
ready_isr_disable
#endif
@@ -143,7 +138,7 @@ static const EMCNANDConfig nandcfg = {
/**
*
*/
-#if !STM32_EMC_EMCNAND_USE_FSMC_INT
+#if !STM32_NAND_USE_FSMC_INT
static const EXTConfig extcfg = {
{
{EXT_CH_MODE_DISABLED, NULL}, //0
@@ -171,7 +166,7 @@ static const EXTConfig extcfg = {
{EXT_CH_MODE_DISABLED, NULL},
}
};
-#endif /* !STM32_EMC_EMCNAND_USE_FSMC_INT */
+#endif /* !STM32_NAND_USE_FSMC_INT */
/*
*
@@ -191,12 +186,12 @@ volatile uint32_t KillCycle = 0;
******************************************************************************
*/
-#if !STM32_EMC_EMCNAND_USE_FSMC_INT
+#if !STM32_NAND_USE_FSMC_INT
static void nand_ready_cb(EXTDriver *extp, expchannel_t channel){
(void)extp;
(void)channel;
- EMCNANDD1.isr_handler(&EMCNANDD1);
+ NANDD1.isr_handler(&NANDD1);
}
static void ready_isr_enable(void) {
@@ -206,7 +201,7 @@ static void ready_isr_enable(void) {
static void ready_isr_disable(void) {
extChannelDisable(&EXTD1, GPIOD_NAND_RB);
}
-#endif
+#endif /* STM32_NAND_USE_FSMC_INT */
static void nand_wp_assert(void) {
palClearPad(GPIOB, GPIOB_NAND_WP);
@@ -237,13 +232,13 @@ static THD_FUNCTION(fsmcIdleThread, arg) {
/*
*
*/
-static bool isErased(EMCNANDDriver *dp, size_t block){
+static bool is_erased(NANDDriver *dp, size_t block){
uint32_t page = 0;
size_t i = 0;
- for (page=0; page<EMCNANDD1.config->pages_per_block; page++){
- emcnandReadPageData(dp, block, page, nand_buf, EMCNANDD1.config->page_data_size, NULL);
- emcnandReadPageSpare(dp, block, page, &nand_buf[2048], EMCNANDD1.config->page_spare_size);
+ for (page=0; page<NANDD1.config->pages_per_block; page++){
+ nandReadPageData(dp, block, page, nand_buf, NANDD1.config->page_data_size, NULL);
+ nandReadPageSpare(dp, block, page, &nand_buf[2048], NANDD1.config->page_spare_size);
for (i=0; i<sizeof(nand_buf); i++) {
if (nand_buf[i] != 0xFF)
return false;
@@ -278,37 +273,37 @@ static void pattern_fill(void) {
osalDbgCheck(0 == memcmp(ref_buf, nand_buf, NAND_PAGE_SIZE));
}
-#if EMCNAND_USE_KILL_TEST
-static void kill_block(EMCNANDDriver *emcnandp, uint32_t block){
+#if USE_KILL_BLOCK_TEST
+static void kill_block(NANDDriver *nandp, uint32_t block){
size_t i = 0;
size_t page = 0;
uint8_t op_status;
/* This test require good block.*/
- osalDbgCheck(!emcnandIsBad(emcnandp, block));
+ osalDbgCheck(!nandIsBad(nandp, block));
while(true){
- op_status = emcnandErase(&EMCNANDD1, block);
+ op_status = nandErase(&NANDD1, block);
if (0 != (op_status & 1)){
- if(!isErased(emcnandp, block))
+ if(!is_erased(nandp, block))
osalSysHalt("Block successfully killed");
}
- if(!isErased(emcnandp, block))
+ if(!is_erased(nandp, block))
osalSysHalt("Block block not erased, but erase operation report success");
- for (page=0; page<emcnandp->config->pages_per_block; page++){
+ for (page=0; page<nandp->config->pages_per_block; page++){
memset(nand_buf, 0, NAND_PAGE_SIZE);
- op_status = emcnandWritePageWhole(emcnandp, block, page, nand_buf, NAND_PAGE_SIZE);
+ op_status = nandWritePageWhole(nandp, block, page, nand_buf, NAND_PAGE_SIZE);
if (0 != (op_status & 1)){
- emcnandReadPageWhole(emcnandp, block, page, nand_buf, NAND_PAGE_SIZE);
+ nandReadPageWhole(nandp, block, page, nand_buf, NAND_PAGE_SIZE);
for (i=0; i<NAND_PAGE_SIZE; i++){
if (nand_buf[i] != 0)
osalSysHalt("Block successfully killed");
}
}
- emcnandReadPageWhole(emcnandp, block, page, nand_buf, NAND_PAGE_SIZE);
+ nandReadPageWhole(nandp, block, page, nand_buf, NAND_PAGE_SIZE);
for (i=0; i<NAND_PAGE_SIZE; i++){
if (nand_buf[i] != 0)
osalSysHalt("Page write failed, but write operation report success");
@@ -317,7 +312,7 @@ static void kill_block(EMCNANDDriver *emcnandp, uint32_t block){
KillCycle++;
}
}
-#endif /* EMCNAND_USE_KILL_TEST */
+#endif /* USE_KILL_BLOCK_TEST */
typedef enum {
ECC_NO_ERROR = 0,
@@ -370,7 +365,7 @@ static void invert_bit(uint8_t *buf, uint32_t byte, uint32_t bit){
/*
*
*/
-static void ecc_test(EMCNANDDriver *emcnandp, uint32_t block){
+static void ecc_test(NANDDriver *nandp, uint32_t block){
uint32_t corrupted;
uint32_t byte, bit;
@@ -380,18 +375,18 @@ static void ecc_test(EMCNANDDriver *emcnandp, uint32_t block){
ecc_result_t ecc_result = ECC_NO_ERROR;
/* This test requires good block.*/
- osalDbgCheck(!emcnandIsBad(emcnandp, block));
- if (!isErased(emcnandp, block))
- emcnandErase(&EMCNANDD1, block);
+ osalDbgCheck(!nandIsBad(nandp, block));
+ if (!is_erased(nandp, block))
+ nandErase(&NANDD1, block);
pattern_fill();
/*** Correctable errors ***/
- op_status = emcnandWritePageData(emcnandp, block, 0,
- nand_buf, emcnandp->config->page_data_size, &ecc_ref);
+ op_status = nandWritePageData(nandp, block, 0,
+ nand_buf, nandp->config->page_data_size, &ecc_ref);
osalDbgCheck(0 == (op_status & 1)); /* operation failed */
- emcnandReadPageData(emcnandp, block, 0,
- nand_buf, emcnandp->config->page_data_size, &ecc_broken);
+ nandReadPageData(nandp, block, 0,
+ nand_buf, nandp->config->page_data_size, &ecc_broken);
ecc_result = parse_ecc(ecclen, ecc_ref, ecc_broken, &corrupted);
osalDbgCheck(ECC_NO_ERROR == ecc_result); /* unexpected error */
@@ -399,8 +394,8 @@ static void ecc_test(EMCNANDDriver *emcnandp, uint32_t block){
byte = 0;
bit = 7;
invert_bit(nand_buf, byte, bit);
- op_status = emcnandWritePageData(emcnandp, block, 1,
- nand_buf, emcnandp->config->page_data_size, &ecc_broken);
+ op_status = nandWritePageData(nandp, block, 1,
+ nand_buf, nandp->config->page_data_size, &ecc_broken);
osalDbgCheck(0 == (op_status & 1)); /* operation failed */
invert_bit(nand_buf, byte, bit);
ecc_result = parse_ecc(ecclen, ecc_ref, ecc_broken, &corrupted);
@@ -411,8 +406,8 @@ static void ecc_test(EMCNANDDriver *emcnandp, uint32_t block){
byte = 2047;
bit = 0;
invert_bit(nand_buf, byte, bit);
- op_status = emcnandWritePageData(emcnandp, block, 2,
- nand_buf, emcnandp->config->page_data_size, &ecc_broken);
+ op_status = nandWritePageData(nandp, block, 2,
+ nand_buf, nandp->config->page_data_size, &ecc_broken);
osalDbgCheck(0 == (op_status & 1)); /* operation failed */
invert_bit(nand_buf, byte, bit);
ecc_result = parse_ecc(ecclen, ecc_ref, ecc_broken, &corrupted);
@@ -423,8 +418,8 @@ static void ecc_test(EMCNANDDriver *emcnandp, uint32_t block){
byte = 1027;
bit = 3;
invert_bit(nand_buf, byte, bit);
- op_status = emcnandWritePageData(emcnandp, block, 3,
- nand_buf, emcnandp->config->page_data_size, &ecc_broken);
+ op_status = nandWritePageData(nandp, block, 3,
+ nand_buf, nandp->config->page_data_size, &ecc_broken);
osalDbgCheck(0 == (op_status & 1)); /* operation failed */
invert_bit(nand_buf, byte, bit);
ecc_result = parse_ecc(ecclen, ecc_ref, ecc_broken, &corrupted);
@@ -435,8 +430,8 @@ static void ecc_test(EMCNANDDriver *emcnandp, uint32_t block){
byte = 1027;
invert_bit(nand_buf, byte, 3);
invert_bit(nand_buf, byte, 4);
- op_status = emcnandWritePageData(emcnandp, block, 4,
- nand_buf, emcnandp->config->page_data_size, &ecc_broken);
+ op_status = nandWritePageData(nandp, block, 4,
+ nand_buf, nandp->config->page_data_size, &ecc_broken);
osalDbgCheck(0 == (op_status & 1)); /* operation failed */
invert_bit(nand_buf, byte, 3);
invert_bit(nand_buf, byte, 4);
@@ -444,14 +439,14 @@ static void ecc_test(EMCNANDDriver *emcnandp, uint32_t block){
osalDbgCheck(ECC_UNCORRECTABLE_ERROR == ecc_result); /* This error must be NOT correctable */
/*** make clean ***/
- emcnandErase(&EMCNANDD1, block);
+ nandErase(&NANDD1, block);
}
/*
*
*/
-static void general_test (EMCNANDDriver *emcnandp, size_t first,
- size_t last, size_t read_rounds){
+static void general_test (NANDDriver *nandp, size_t first,
+ size_t last, size_t read_rounds){
size_t block, page, round;
bool status;
@@ -470,9 +465,9 @@ static void general_test (EMCNANDDriver *emcnandp, size_t first,
/* perform basic checks */
for (block=first; block<last; block++){
- if (!emcnandIsBad(emcnandp, block)){
- if (!isErased(emcnandp, block)){
- op_status = emcnandErase(emcnandp, block);
+ if (!nandIsBad(nandp, block)){
+ if (!is_erased(nandp, block)){
+ op_status = nandErase(nandp, block);
osalDbgCheck(0 == (op_status & 1)); /* operation failed */
}
}
@@ -480,20 +475,20 @@ static void general_test (EMCNANDDriver *emcnandp, size_t first,
/* write block with pattern, read it back and compare */
for (block=first; block<last; block++){
- if (!emcnandIsBad(emcnandp, block)){
- for (page=0; page<emcnandp->config->pages_per_block; page++){
+ if (!nandIsBad(nandp, block)){
+ for (page=0; page<nandp->config->pages_per_block; page++){
pattern_fill();
//tmStartMeasurement(&tmu_write_data);
- op_status = emcnandWritePageData(emcnandp, block, page,
- nand_buf, emcnandp->config->page_data_size, &wecc);
+ op_status = nandWritePageData(nandp, block, page,
+ nand_buf, nandp->config->page_data_size, &wecc);
//tmStopMeasurement(&tmu_write_data);
osalDbgCheck(0 == (op_status & 1)); /* operation failed */
//tmStartMeasurement(&tmu_write_spare);
- op_status = emcnandWritePageSpare(emcnandp, block, page,
- nand_buf + emcnandp->config->page_data_size,
- emcnandp->config->page_spare_size);
+ op_status = nandWritePageSpare(nandp, block, page,
+ nand_buf + nandp->config->page_data_size,
+ nandp->config->page_spare_size);
//tmStopMeasurement(&tmu_write_spare);
osalDbgCheck(0 == (op_status & 1)); /* operation failed */
@@ -502,15 +497,15 @@ static void general_test (EMCNANDDriver *emcnandp, size_t first,
memset(nand_buf, 0, NAND_PAGE_SIZE);
//tmStartMeasurement(&tmu_read_data);
- emcnandReadPageData(emcnandp, block, page,
- nand_buf, emcnandp->config->page_data_size, &recc);
+ nandReadPageData(nandp, block, page,
+ nand_buf, nandp->config->page_data_size, &recc);
//tmStopMeasurement(&tmu_read_data);
osalDbgCheck(0 == (recc ^ wecc)); /* ECC error detected */
//tmStartMeasurement(&tmu_read_spare);
- emcnandReadPageSpare(emcnandp, block, page,
- nand_buf + emcnandp->config->page_data_size,
- emcnandp->config->page_spare_size);
+ nandReadPageSpare(nandp, block, page,
+ nand_buf + nandp->config->page_data_size,
+ nandp->config->page_spare_size);
//tmStopMeasurement(&tmu_read_spare);
osalDbgCheck(0 == memcmp(ref_buf, nand_buf, NAND_PAGE_SIZE)); /* Read back failed */
@@ -519,13 +514,13 @@ static void general_test (EMCNANDDriver *emcnandp, size_t first,
/* make clean */
//tmStartMeasurement(&tmu_erase);
- op_status = emcnandErase(emcnandp, block);
+ op_status = nandErase(nandp, block);
//tmStopMeasurement(&tmu_erase);
osalDbgCheck(0 == (op_status & 1)); /* operation failed */
- status = isErased(emcnandp, block);
+ status = is_erased(nandp, block);
osalDbgCheck(true == status); /* blocks was not erased successfully */
- }/* if (!emcnandIsBad(emcnandp, block)){ */
+ }/* if (!nandIsBad(nandp, block)){ */
}
red_led_off();
}
@@ -552,7 +547,7 @@ int main(void) {
volatile int32_t uart_its_idle = 0;
volatile uint32_t idle_thread_cnt = 0;
- #if EMCNAND_USE_KILL_TEST
+ #if USE_KILL_BLOCK_TEST
size_t kill = 8000;
#endif
@@ -566,11 +561,10 @@ int main(void) {
halInit();
chSysInit();
- emcStart(&EMCD1, &emccfg);
-#if !STM32_EMC_EMCNAND_USE_FSMC_INT
+#if !STM32_NAND_USE_FSMC_INT
extStart(&EXTD1, &extcfg);
#endif
- emcnandStart(&EMCNANDD1, &nandcfg);
+ nandStart(&NANDD1, &nandcfg);
chThdSleepMilliseconds(4000);
@@ -586,7 +580,7 @@ int main(void) {
dma_storm_uart_start();
dma_storm_spi_start();
T = chVTGetSystemTimeX();
- general_test(&EMCNANDD1, start, end, 1);
+ general_test(&NANDD1, start, end, 1);
T = chVTGetSystemTimeX() - T;
adc_its = dma_storm_adc_stop();
uart_its = dma_storm_uart_stop();
@@ -609,10 +603,10 @@ int main(void) {
osalDbgCheck(abs(uart_its - uart_its_idle) < (uart_its_idle / 20));
osalDbgCheck(abs(spi_its - spi_its_idle) < (spi_its_idle / 10));
- ecc_test(&EMCNANDD1, end);
+ ecc_test(&NANDD1, end);
-#if EMCNAND_USE_KILL_TEST
- kill_block(&EMCNANDD1, kill);
+#if USE_KILL_BLOCK_TEST
+ kill_block(&NANDD1, kill);
#endif
nand_wp_assert();
diff --git a/testhal/STM32/STM32F4xx/FSMC_NAND/mcuconf.h b/testhal/STM32/STM32F4xx/FSMC_NAND/mcuconf.h
index b390f1b37..75268ff3c 100644
--- a/testhal/STM32/STM32F4xx/FSMC_NAND/mcuconf.h
+++ b/testhal/STM32/STM32F4xx/FSMC_NAND/mcuconf.h
@@ -304,13 +304,13 @@
#define STM32_USB_OTGFIFO_FILL_BASEPRI 0
/*
- * EMC driver system settings.
+ * FSMC driver system settings.
*/
-#define STM32_EMC_USE_FSMC1 TRUE
-#define STM32_EMC_FSMC1_IRQ_PRIORITY 10
-#define STM32_EMC_EMCNAND_USE_FSMC_INT FALSE
+#define STM32_FSMC_USE_FSMC1 TRUE
+#define STM32_FSMC_FSMC1_IRQ_PRIORITY 10
-#define STM32_EMCNAND_USE_EMCNAND1 TRUE
-#define STM32_EMCNAND_EMCNAND1_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
-#define STM32_EMCNAND_EMCNAND1_DMA_PRIORITY 0
-#define STM32_EMCNAND_DMA_ERROR_HOOK(emcnandp) osalSysHalt("DMA failure")
+#define STM32_NAND_USE_FSMC_NAND1 TRUE
+#define STM32_NAND_USE_FSMC_INT FALSE
+#define STM32_NAND_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
+#define STM32_NAND_DMA_PRIORITY 0
+#define STM32_NAND_DMA_ERROR_HOOK(nandp) osalSysHalt("DMA failure")