From 779ea88be79641ed35c6fe9cad3b5265e969dc35 Mon Sep 17 00:00:00 2001 From: barthess Date: Fri, 6 Jan 2017 11:06:40 +0300 Subject: NAND. Added reset function. --- os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.c | 28 ++++++++++++++++++++-------- os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.h | 1 + 2 files changed, 21 insertions(+), 8 deletions(-) (limited to 'os/hal/ports') diff --git a/os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.c b/os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.c index f39ff35..5ba1b29 100644 --- a/os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.c +++ b/os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.c @@ -157,14 +157,9 @@ static void nand_isr_handler (NANDDriver *nandp) { /* thread will be waked up from DMA ISR */ break; - case NAND_ERASE: - /* NAND reports about erase finish */ - nandp->state = NAND_READY; - wakeup_isr(nandp); - break; - - case NAND_PROGRAM: - /* NAND reports about page programming finish */ + case NAND_ERASE: /* NAND reports about erase finish */ + case NAND_PROGRAM: /* NAND reports about page programming finish */ + case NAND_RESET: /* NAND reports about finished reset recover */ nandp->state = NAND_READY; wakeup_isr(nandp); break; @@ -410,6 +405,23 @@ uint8_t nand_lld_write_data(NANDDriver *nandp, const uint8_t *data, return nand_lld_read_status(nandp); } +/** + * @brief Soft reset NAND device. + * + * @param[in] nandp pointer to the @p NANDDriver object + * + * @notapi + */ +void nand_lld_reset(NANDDriver *nandp) { + + nandp->state = NAND_RESET; + + nand_lld_write_cmd (nandp, NAND_CMD_RESET); + osalSysLock(); + nand_lld_suspend_thread(nandp); + osalSysUnlock(); +} + /** * @brief Erase block. * diff --git a/os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.h b/os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.h index de7a0c4..ead1a4e 100644 --- a/os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.h +++ b/os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.h @@ -283,6 +283,7 @@ extern "C" { uint8_t nand_lld_write_data(NANDDriver *nandp, const uint8_t *data, size_t datalen, uint8_t *addr, size_t addrlen, uint32_t *ecc); uint8_t nand_lld_read_status(NANDDriver *nandp); + void nand_lld_reset(NANDDriver *nandp); #ifdef __cplusplus } #endif -- cgit v1.2.3