From 82b6be92058fd5ae9036950ecca0d18a4b5d7240 Mon Sep 17 00:00:00 2001 From: jhchun Date: Wed, 15 Apr 2026 12:01:03 +0900 Subject: [PATCH] =?UTF-8?q?=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC:=20=EB=AF=B8=EC=82=AC=EC=9A=A9=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pc_firm/cmd.h | 1 - pc_firm/dr_lua/dr_lua.c | 105 ---- pc_firm/dr_w25q32/dr_w25q32.c | 533 ------------------ pc_firm/dr_w25q32/dr_w25q32.h | 245 -------- pc_firm/f.bat | 2 - pc_firm/pcmain.c | 59 -- .../ble_app_bladder_patch_s140.uvoptx | 306 +++++----- .../ble_app_bladder_patch_s140.uvprojx | 22 +- 8 files changed, 142 insertions(+), 1131 deletions(-) delete mode 100644 pc_firm/cmd.h delete mode 100644 pc_firm/dr_lua/dr_lua.c delete mode 100644 pc_firm/dr_w25q32/dr_w25q32.c delete mode 100644 pc_firm/dr_w25q32/dr_w25q32.h delete mode 100644 pc_firm/f.bat delete mode 100644 pc_firm/pcmain.c diff --git a/pc_firm/cmd.h b/pc_firm/cmd.h deleted file mode 100644 index 3b351a7..0000000 --- a/pc_firm/cmd.h +++ /dev/null @@ -1 +0,0 @@ -void battery_level_meas(void); diff --git a/pc_firm/dr_lua/dr_lua.c b/pc_firm/dr_lua/dr_lua.c deleted file mode 100644 index 5c658b1..0000000 --- a/pc_firm/dr_lua/dr_lua.c +++ /dev/null @@ -1,105 +0,0 @@ -/* - * dr_lua.c - * - * Author : Charles KWON - * - * This module provides a simple and reusable interface layer - * between C firmware code and embedded Lua scripts. - * It is designed to make calling Lua functions from C firmware - * straightforward and safe. - * - * Example: - * Lua function: add3(x) = x + 3 - * C function : dr_lua_add3(int num1) - */ - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - -/* ------------------------------------------------- - * External output function (UART / RTT, etc.) - * This function must be implemented by the project. - * ------------------------------------------------- */ -extern void board_print(const char *s); - -/* ------------------------------------------------- - * Global Lua state - * ------------------------------------------------- */ -static lua_State *g_L = NULL; - -/* ------------------------------------------------- - * Initialize Lua VM - * ------------------------------------------------- */ -void dr_lua_init(void) -{ - g_L = luaL_newstate(); - - /* Load base library only */ - luaL_requiref(g_L, "_G", luaopen_base, 1); - lua_pop(g_L, 1); -} - -/* ------------------------------------------------- - * Load Lua script - * Defines: - * function add3(x) - * return x + 3 - * end - * ------------------------------------------------- */ -void dr_lua_load_script(void) -{ - const char *lua_code = - "function add3(x)\n" - " return x + 3\n" - "end"; - - if (luaL_dostring(g_L, lua_code) != LUA_OK) { - const char *err = lua_tostring(g_L, -1); - board_print(err); - lua_pop(g_L, 1); - } -} - -/* ------------------------------------------------- - * Core interface function - * Calls Lua function add3 from C firmware - * - * @param num1 Input integer value - * @return Result of (num1 + 3) - * -1 if Lua function is not found - * -2 if Lua call fails - * ------------------------------------------------- */ -int dr_lua_add3(int num1) -{ - int result = 0; - - /* 1. Get Lua function: add3 */ - lua_getglobal(g_L, "add3"); - - if (!lua_isfunction(g_L, -1)) { - lua_pop(g_L, 1); - return -1; /* Function not found */ - } - - /* 2. Push argument */ - lua_pushinteger(g_L, num1); - - /* 3. Call Lua function (1 argument, 1 return value) */ - if (lua_pcall(g_L, 1, 1, 0) != LUA_OK) { - const char *err = lua_tostring(g_L, -1); - board_print(err); - lua_pop(g_L, 1); - return -2; /* Call failed */ - } - - /* 4. Read return value */ - if (lua_isinteger(g_L, -1)) { - result = (int)lua_tointeger(g_L, -1); - } - - /* 5. Clean up Lua stack */ - lua_pop(g_L, 1); - - return result; /* num1 + 3 */ -} diff --git a/pc_firm/dr_w25q32/dr_w25q32.c b/pc_firm/dr_w25q32/dr_w25q32.c deleted file mode 100644 index e40db23..0000000 --- a/pc_firm/dr_w25q32/dr_w25q32.c +++ /dev/null @@ -1,533 +0,0 @@ -/******************************************************************************* - * @file dr_w25q32.c - * @brief W25Q32 SPI Flash Driver for nRF52840 - * Software SPI (bit-bang) implementation - * @date 2026-03-12 - * - * @details Bit-bang SPI driver for W25Q32 NOR Flash. - * SPI Mode 0 (CPOL=0, CPHA=0): - * - SCLK idle LOW - * - Data sampled on rising edge - * - Data shifted out on falling edge - * - * W25Q32 SPI timing: - * CS ──┐ ┌── - * └────────────────────────────────────┘ - * CLK ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ - * ─────┘ └──┘ └──┘ └── ... ┘ └──┘ └──── - * DI ... - * DO ... - ******************************************************************************/ - -#include "dr_w25q32.h" -#include "nrf_gpio.h" -#include "nrf_delay.h" -#include "debug_print.h" -#include - -/*============================================================================== - * PRIVATE DEFINES - *============================================================================*/ - -#define DR_PIN_NUM(pin) ((pin) & 0x1F) -#define DR_PIN_PORT(pin) (((pin) >> 5) & 0x01) - -/* Pin masks for direct register access */ -#define FLASH_CS_MASK (1UL << DR_PIN_NUM(DR_FLASH_PIN_CS)) -#define FLASH_SCLK_MASK (1UL << DR_PIN_NUM(DR_FLASH_PIN_SCLK)) -#define FLASH_MISO_MASK (1UL << DR_PIN_NUM(DR_FLASH_PIN_MISO)) -#define FLASH_MOSI_MASK (1UL << DR_PIN_NUM(DR_FLASH_PIN_MOSI)) - -/* Port registers - all pins on P0 */ -#define FLASH_PORT NRF_P0 // NRF_P0: 포트 레지스터에 접근하는 베이스 포인터(포트 전체 제어 X) - -/* Timeout for busy wait (ms) */ -#define BUSY_TIMEOUT_PAGE_PROGRAM 10 -#define BUSY_TIMEOUT_SECTOR_ERASE 500 -#define BUSY_TIMEOUT_BLOCK_ERASE 2000 -#define BUSY_TIMEOUT_CHIP_ERASE 60000 - -/* W25Q32 JEDEC ID expected values */ -#define W25Q32_MANUFACTURER_ID 0xEF -#define W25Q32_MEMORY_TYPE 0x40 -#define W25Q32_CAPACITY 0x16 - -/*============================================================================== - * PRIVATE VARIABLES - *============================================================================*/ - -static bool m_initialized = false; - -/*============================================================================== - * LOW-LEVEL SPI BIT-BANG - * - * W25Q32 uses SPI Mode 0: - * - CPOL=0: Clock idle LOW - * - CPHA=0: Data sampled on rising edge, shifted on falling edge - *============================================================================*/ - -static inline void flash_cs_low(void) -{ - FLASH_PORT->OUTCLR = FLASH_CS_MASK; -} - -static inline void flash_cs_high(void) -{ - FLASH_PORT->OUTSET = FLASH_CS_MASK; -} - -static inline void flash_sclk_low(void) -{ - FLASH_PORT->OUTCLR = FLASH_SCLK_MASK; -} - -static inline void flash_sclk_high(void) -{ - FLASH_PORT->OUTSET = FLASH_SCLK_MASK; -} - -static inline void flash_mosi_high(void) -{ - FLASH_PORT->OUTSET = FLASH_MOSI_MASK; -} - -static inline void flash_mosi_low(void) -{ - FLASH_PORT->OUTCLR = FLASH_MOSI_MASK; -} - -static inline uint32_t flash_read_miso(void) -{ - return (FLASH_PORT->IN & FLASH_MISO_MASK) ? 1 : 0; -} - -/** - * @brief Send one byte via SPI (MSB first) - */ -static void spi_send_byte(uint8_t byte) -{ - for (int i = 7; i >= 0; i--) - { - /* Set MOSI */ - if (byte & (1 << i)) - flash_mosi_high(); - else - flash_mosi_low(); - - /* Rising edge - data sampled by slave */ - flash_sclk_high(); - __NOP(); - __NOP(); - - /* Falling edge */ - flash_sclk_low(); - __NOP(); - } -} - -/** - * @brief Receive one byte via SPI (MSB first) - * @note Sends 0xFF (MOSI high) while reading - */ -static uint8_t spi_recv_byte(void) -{ - uint8_t byte = 0; - - flash_mosi_high(); /* Keep MOSI high during read */ - - for (int i = 7; i >= 0; i--) - { - /* Rising edge - sample MISO */ - flash_sclk_high(); - __NOP(); - __NOP(); - - if (flash_read_miso()) - byte |= (1 << i); - - /* Falling edge */ - flash_sclk_low(); - __NOP(); - } - - return byte; -} - -/** - * @brief Initialize GPIO pins - */ -static void flash_gpio_init(void) -{ - /* CS: Output, HIGH (deselected) */ - nrf_gpio_cfg_output(DR_FLASH_PIN_CS); - nrf_gpio_pin_set(DR_FLASH_PIN_CS); - - /* SCLK: Output, LOW (idle for Mode 0) */ - nrf_gpio_cfg_output(DR_FLASH_PIN_SCLK); - nrf_gpio_pin_clear(DR_FLASH_PIN_SCLK); - - /* MOSI: Output, HIGH */ - nrf_gpio_cfg_output(DR_FLASH_PIN_MOSI); - nrf_gpio_pin_set(DR_FLASH_PIN_MOSI); - - /* MISO: Input, no pull */ - nrf_gpio_cfg_input(DR_FLASH_PIN_MISO, NRF_GPIO_PIN_NOPULL); -} - -/** - * @brief Send Write Enable command (0x06) - */ -static void flash_write_enable(void) -{ - flash_cs_low(); - spi_send_byte(DR_FLASH_CMD_WRITE_ENABLE); - flash_cs_high(); - __NOP(); __NOP(); __NOP(); __NOP(); -} - -/*============================================================================== - * PUBLIC FUNCTIONS - INITIALIZATION - *============================================================================*/ - -dr_flash_err_t dr_w25q32_init(void) -{ - DBG_PRINTF("[FLASH] Init\n"); - flash_gpio_init(); - m_initialized = true; - DBG_PRINTF("[FLASH] Init OK\n"); - return DR_FLASH_OK; -} - -void dr_w25q32_uninit(void) -{ - if (!m_initialized) return; - - DBG_PRINTF("[FLASH] Uninit\n"); - - /* CS high (deselect) */ - nrf_gpio_pin_set(DR_FLASH_PIN_CS); - - /* Release pins to default */ - nrf_gpio_cfg_default(DR_FLASH_PIN_CS); - - /* Don't release shared pins (SCLK, MISO, MOSI) - - they may be in use by ADC121S051 */ - - m_initialized = false; -} - -bool dr_w25q32_is_initialized(void) -{ - return m_initialized; -} - -/*============================================================================== - * PUBLIC FUNCTIONS - IDENTIFICATION - *============================================================================*/ - -dr_flash_err_t dr_w25q32_read_jedec_id(dr_flash_jedec_t *jedec) //JEDEC ID 읽기 (0xEF, 0x40, 0x16) -{ - if (!m_initialized) return DR_FLASH_ERR_NOT_INIT; - if (!jedec) return DR_FLASH_ERR_INVALID_PARAM; - - flash_cs_low(); - spi_send_byte(DR_FLASH_CMD_READ_JEDEC_ID); - jedec->manufacturer_id = spi_recv_byte(); - jedec->memory_type = spi_recv_byte(); - jedec->capacity = spi_recv_byte(); - flash_cs_high(); - - DBG_PRINTF("[FLASH] JEDEC ID: 0x%02X 0x%02X 0x%02X\n", - jedec->manufacturer_id, jedec->memory_type, jedec->capacity); - - return DR_FLASH_OK; -} - -dr_flash_err_t dr_w25q32_read_uid(uint8_t *uid) // 8바이트 고유 ID 읽기 -{ - if (!m_initialized) return DR_FLASH_ERR_NOT_INIT; - if (!uid) return DR_FLASH_ERR_INVALID_PARAM; - - flash_cs_low(); - spi_send_byte(DR_FLASH_CMD_READ_UID); - - /* 4 dummy bytes */ - spi_send_byte(0x00); - spi_send_byte(0x00); - spi_send_byte(0x00); - spi_send_byte(0x00); - - /* 8-byte unique ID */ - for (int i = 0; i < DR_FLASH_UID_LENGTH; i++) - { - uid[i] = spi_recv_byte(); - } - flash_cs_high(); - - DBG_PRINTF("[FLASH] UID: %02X%02X%02X%02X%02X%02X%02X%02X\n", - uid[0], uid[1], uid[2], uid[3], uid[4], uid[5], uid[6], uid[7]); - - return DR_FLASH_OK; -} - -/*============================================================================== - * PUBLIC FUNCTIONS - STATUS - *============================================================================*/ - -dr_flash_err_t dr_w25q32_read_status(uint8_t *status) -{ - if (!m_initialized) return DR_FLASH_ERR_NOT_INIT; - if (!status) return DR_FLASH_ERR_INVALID_PARAM; - - flash_cs_low(); - spi_send_byte(DR_FLASH_CMD_READ_STATUS1); - *status = spi_recv_byte(); - flash_cs_high(); - - return DR_FLASH_OK; -} - -bool dr_w25q32_is_busy(void) -{ - uint8_t status = 0; - dr_w25q32_read_status(&status); - return (status & DR_FLASH_SR1_BUSY) ? true : false; -} - -dr_flash_err_t dr_w25q32_wait_busy(uint32_t timeout_ms) -{ - if (!m_initialized) return DR_FLASH_ERR_NOT_INIT; - - while (timeout_ms > 0) - { - if (!dr_w25q32_is_busy()) - return DR_FLASH_OK; - - nrf_delay_ms(1); - timeout_ms--; - } - - return DR_FLASH_ERR_TIMEOUT; -} - -/*============================================================================== - * PUBLIC FUNCTIONS - READ - *============================================================================*/ - -dr_flash_err_t dr_w25q32_read(uint32_t addr, uint8_t *buf, uint32_t len) // 데이터 읽기 (주소, 길이) -{ - if (!m_initialized) return DR_FLASH_ERR_NOT_INIT; - if (!buf || len == 0) return DR_FLASH_ERR_INVALID_PARAM; - if (addr + len > DR_FLASH_TOTAL_SIZE) return DR_FLASH_ERR_INVALID_PARAM; - - DBG_PRINTF("[FLASH] Read addr=0x%06X len=%d\n", addr, len); - - flash_cs_low(); - - /* Command + 24-bit address */ - spi_send_byte(DR_FLASH_CMD_READ_DATA); - spi_send_byte((addr >> 16) & 0xFF); - spi_send_byte((addr >> 8) & 0xFF); - spi_send_byte((addr ) & 0xFF); - - /* Read data */ - for (uint32_t i = 0; i < len; i++) - { - buf[i] = spi_recv_byte(); - } - - flash_cs_high(); - - return DR_FLASH_OK; -} - -/*============================================================================== - * PUBLIC FUNCTIONS - WRITE - *============================================================================*/ - -dr_flash_err_t dr_w25q32_write(uint32_t addr, const uint8_t *data, uint32_t len) // 페이지 쓰기 (최대 256B) -{ - if (!m_initialized) return DR_FLASH_ERR_NOT_INIT; - if (!data || len == 0 || len > DR_FLASH_PAGE_SIZE) - return DR_FLASH_ERR_INVALID_PARAM; - if (addr + len > DR_FLASH_TOTAL_SIZE) - return DR_FLASH_ERR_INVALID_PARAM; - - /* Check page boundary crossing */ - uint32_t page_offset = addr % DR_FLASH_PAGE_SIZE; - if (page_offset + len > DR_FLASH_PAGE_SIZE) - return DR_FLASH_ERR_INVALID_PARAM; - - DBG_PRINTF("[FLASH] Write addr=0x%06X len=%d\n", addr, len); - - /* Write Enable */ - flash_write_enable(); - - /* Page Program */ - flash_cs_low(); - spi_send_byte(DR_FLASH_CMD_PAGE_PROGRAM); - spi_send_byte((addr >> 16) & 0xFF); - spi_send_byte((addr >> 8) & 0xFF); - spi_send_byte((addr ) & 0xFF); - - for (uint32_t i = 0; i < len; i++) - { - spi_send_byte(data[i]); - } - - flash_cs_high(); - - /* Wait for programming to complete */ - dr_flash_err_t err = dr_w25q32_wait_busy(BUSY_TIMEOUT_PAGE_PROGRAM); - if (err != DR_FLASH_OK) - DBG_PRINTF("[FLASH] Write TIMEOUT!\n"); - return err; -} - -/*============================================================================== - * PUBLIC FUNCTIONS - ERASE - *============================================================================*/ - -dr_flash_err_t dr_w25q32_erase_sector(uint32_t addr) // 4KB 섹터 삭제 -{ - if (!m_initialized) return DR_FLASH_ERR_NOT_INIT; - if (addr >= DR_FLASH_TOTAL_SIZE) return DR_FLASH_ERR_INVALID_PARAM; - - DBG_PRINTF("[FLASH] Erase sector addr=0x%06X\n", addr); - - flash_write_enable(); - - flash_cs_low(); - spi_send_byte(DR_FLASH_CMD_SECTOR_ERASE); - spi_send_byte((addr >> 16) & 0xFF); - spi_send_byte((addr >> 8) & 0xFF); - spi_send_byte((addr ) & 0xFF); - flash_cs_high(); - - dr_flash_err_t err = dr_w25q32_wait_busy(BUSY_TIMEOUT_SECTOR_ERASE); - if (err != DR_FLASH_OK) - DBG_PRINTF("[FLASH] Erase sector TIMEOUT!\n"); - return err; -} - -dr_flash_err_t dr_w25q32_erase_block_32k(uint32_t addr) // 블록 삭제 -{ - if (!m_initialized) return DR_FLASH_ERR_NOT_INIT; - if (addr >= DR_FLASH_TOTAL_SIZE) return DR_FLASH_ERR_INVALID_PARAM; - - DBG_PRINTF("[FLASH] Erase block 32K addr=0x%06X\n", addr); - - flash_write_enable(); - - flash_cs_low(); - spi_send_byte(DR_FLASH_CMD_BLOCK_ERASE_32K); - spi_send_byte((addr >> 16) & 0xFF); - spi_send_byte((addr >> 8) & 0xFF); - spi_send_byte((addr ) & 0xFF); - flash_cs_high(); - - dr_flash_err_t err = dr_w25q32_wait_busy(BUSY_TIMEOUT_BLOCK_ERASE); - if (err != DR_FLASH_OK) - DBG_PRINTF("[FLASH] Erase block 32K TIMEOUT!\n"); - return err; -} - -dr_flash_err_t dr_w25q32_erase_block_64k(uint32_t addr) // 블록 삭제 -{ - if (!m_initialized) return DR_FLASH_ERR_NOT_INIT; - if (addr >= DR_FLASH_TOTAL_SIZE) return DR_FLASH_ERR_INVALID_PARAM; - - DBG_PRINTF("[FLASH] Erase block 64K addr=0x%06X\n", addr); - - flash_write_enable(); - - flash_cs_low(); - spi_send_byte(DR_FLASH_CMD_BLOCK_ERASE_64K); - spi_send_byte((addr >> 16) & 0xFF); - spi_send_byte((addr >> 8) & 0xFF); - spi_send_byte((addr ) & 0xFF); - flash_cs_high(); - - dr_flash_err_t err = dr_w25q32_wait_busy(BUSY_TIMEOUT_BLOCK_ERASE); - if (err != DR_FLASH_OK) - DBG_PRINTF("[FLASH] Erase block 64K TIMEOUT!\n"); - return err; -} - -dr_flash_err_t dr_w25q32_chip_erase(void) // 전체 삭제 -{ - if (!m_initialized) return DR_FLASH_ERR_NOT_INIT; - - DBG_PRINTF("[FLASH] Chip erase...\n"); - - flash_write_enable(); - - flash_cs_low(); - spi_send_byte(DR_FLASH_CMD_CHIP_ERASE); - flash_cs_high(); - - dr_flash_err_t err = dr_w25q32_wait_busy(BUSY_TIMEOUT_CHIP_ERASE); - if (err == DR_FLASH_OK) - DBG_PRINTF("[FLASH] Chip erase OK\n"); - else - DBG_PRINTF("[FLASH] Chip erase TIMEOUT!\n"); - return err; -} - -/*============================================================================== - * PUBLIC FUNCTIONS - POWER MANAGEMENT - *============================================================================*/ - -dr_flash_err_t dr_w25q32_deep_powerdown(void) // 저전력 모드 (~1uA) -{ - if (!m_initialized) return DR_FLASH_ERR_NOT_INIT; - - DBG_PRINTF("[FLASH] Deep power-down\n"); - - flash_cs_low(); - spi_send_byte(DR_FLASH_CMD_POWER_DOWN); - flash_cs_high(); - - /* tDP: CS high to deep power-down = 3us max */ - nrf_delay_us(5); - - return DR_FLASH_OK; -} - -dr_flash_err_t dr_w25q32_wakeup(void) // 저전력 모드 해제(깨우기) -{ - if (!m_initialized) return DR_FLASH_ERR_NOT_INIT; - - DBG_PRINTF("[FLASH] Wakeup\n"); - - flash_cs_low(); - spi_send_byte(DR_FLASH_CMD_RELEASE_PD); - flash_cs_high(); - - /* tRES1: CS high to standby = 3us max */ - nrf_delay_us(5); - - return DR_FLASH_OK; -} - -/*============================================================================== - * PUBLIC FUNCTIONS - DEBUG / TEST - *============================================================================*/ - -bool dr_w25q32_test(void) // JEDEC ID로 통신 테스트 -{ - dr_flash_jedec_t jedec; - - if (dr_w25q32_read_jedec_id(&jedec) != DR_FLASH_OK) - { - DBG_PRINTF("[FLASH] Test FAIL - read error\n"); - return false; - } - - bool pass = (jedec.manufacturer_id == W25Q32_MANUFACTURER_ID && - jedec.memory_type == W25Q32_MEMORY_TYPE && - jedec.capacity == W25Q32_CAPACITY); - - DBG_PRINTF("[FLASH] Test %s\n", pass ? "PASS" : "FAIL"); - return pass; -} diff --git a/pc_firm/dr_w25q32/dr_w25q32.h b/pc_firm/dr_w25q32/dr_w25q32.h deleted file mode 100644 index 2ae60a5..0000000 --- a/pc_firm/dr_w25q32/dr_w25q32.h +++ /dev/null @@ -1,245 +0,0 @@ -/******************************************************************************* - * @file dr_w25q32.h - * @brief W25Q32 SPI Flash Driver for nRF52840 - * 32Mbit (4MB) Serial NOR Flash Memory - * @date 2026-03-12 - * - * @details Software SPI (bit-bang) driver for W25Q32RVXHJQ. - * Shares SPI bus (SCK/MISO/MOSI) with ADC121S051. - * Only CS pin is unique (P0.24). - * - * Pin connections: - * nRF52840 W25Q32 (U16) - * P0.24 -----> /CS (pin 1) - * P0.15 <----- DO (pin 2, MISO) - * P0.16 -----> DI (pin 5, MOSI) - * P0.14 -----> CLK (pin 6) - * - * @note WP (pin 3) and HOLD (pin 7) are pulled HIGH via 10k resistors. - ******************************************************************************/ - -#ifndef DR_W25Q32_H -#define DR_W25Q32_H - -#include -#include -#include "nrf_gpio.h" - -/*============================================================================== - * PIN CONFIGURATION - *============================================================================*/ -#define DR_FLASH_PIN_CS NRF_GPIO_PIN_MAP(0, 24) /* Chip Select - SPI_CS_FLASH(P0.24) */ -#define DR_FLASH_PIN_SCLK NRF_GPIO_PIN_MAP(0, 14) /* Serial Clock(shared) - SPI_SCK(P0.14) */ -#define DR_FLASH_PIN_MISO NRF_GPIO_PIN_MAP(0, 15) /* DI_(IO0)(shared) - SPI_MOSI(P0.15) */ -#define DR_FLASH_PIN_MOSI NRF_GPIO_PIN_MAP(0, 16) /* DO_(IO1)(shared) - SPI_MISO(P0.16) */ - -/*============================================================================== - * W25Q32 SPECIFICATIONS - *============================================================================*/ -#define DR_FLASH_PAGE_SIZE 256 /**< Page size (bytes) */ -#define DR_FLASH_SECTOR_SIZE 4096 /**< Sector size (bytes, 4KB) */ -#define DR_FLASH_BLOCK_32K (32*1024) /**< 32KB block */ -#define DR_FLASH_BLOCK_64K (64*1024) /**< 64KB block */ -#define DR_FLASH_TOTAL_SIZE (4*1024*1024) /**< 4MB total */ -#define DR_FLASH_UID_LENGTH 8 /**< Unique ID length (bytes) */ - -/*============================================================================== - * W25Q32 COMMAND OPCODES - *============================================================================*/ -#define DR_FLASH_CMD_WRITE_ENABLE 0x06 -#define DR_FLASH_CMD_WRITE_DISABLE 0x04 -#define DR_FLASH_CMD_READ_STATUS1 0x05 -#define DR_FLASH_CMD_READ_STATUS2 0x35 -#define DR_FLASH_CMD_WRITE_STATUS 0x01 -#define DR_FLASH_CMD_READ_DATA 0x03 -#define DR_FLASH_CMD_PAGE_PROGRAM 0x02 -#define DR_FLASH_CMD_SECTOR_ERASE 0x20 /**< 4KB erase */ -#define DR_FLASH_CMD_BLOCK_ERASE_32K 0x52 /**< 32KB erase */ -#define DR_FLASH_CMD_BLOCK_ERASE_64K 0xD8 /**< 64KB erase */ -#define DR_FLASH_CMD_CHIP_ERASE 0xC7 /**< Full chip erase */ -#define DR_FLASH_CMD_POWER_DOWN 0xB9 /**< Deep power-down */ -#define DR_FLASH_CMD_RELEASE_PD 0xAB /**< Release from deep power-down */ -#define DR_FLASH_CMD_READ_UID 0x4B /**< Read unique ID */ -#define DR_FLASH_CMD_READ_JEDEC_ID 0x9F /**< Read JEDEC ID */ -#define DR_FLASH_CMD_READ_MFR_ID 0x90 /**< Read manufacturer/device ID */ - -/* Status Register 1 bits */ -#define DR_FLASH_SR1_BUSY 0x01 /**< Erase/Write in progress */ -#define DR_FLASH_SR1_WEL 0x02 /**< Write enable latch */ - -/*============================================================================== - * ERROR CODES - *============================================================================*/ -typedef enum { - DR_FLASH_OK = 0, - DR_FLASH_ERR_NOT_INIT, - DR_FLASH_ERR_INVALID_PARAM, - DR_FLASH_ERR_TIMEOUT, - DR_FLASH_ERR_WRITE_FAILED, - DR_FLASH_ERR_JEDEC_MISMATCH -} dr_flash_err_t; - -/*============================================================================== - * DATA STRUCTURES - *============================================================================*/ - -/** @brief JEDEC ID structure */ -typedef struct { - uint8_t manufacturer_id; /**< 0xEF = Winbond */ - uint8_t memory_type; /**< 0x40 = SPI */ - uint8_t capacity; /**< 0x16 = 32Mbit */ -} dr_flash_jedec_t; - -/*============================================================================== - * INITIALIZATION - *============================================================================*/ - -/** - * @brief Initialize W25Q32 Flash driver - * @return dr_flash_err_t Error code - * @note Sets up GPIO pins. Does NOT wake chip from deep power-down. - */ -dr_flash_err_t dr_w25q32_init(void); - -/** - * @brief Uninitialize driver, release GPIO pins - */ -void dr_w25q32_uninit(void); - -/** - * @brief Check if driver is initialized - */ -bool dr_w25q32_is_initialized(void); - -/*============================================================================== - * IDENTIFICATION - *============================================================================*/ - -/** - * @brief Read JEDEC ID (manufacturer, type, capacity) - * @param jedec Pointer to JEDEC ID structure - * @return dr_flash_err_t Error code - * @note Expected: manufacturer=0xEF, type=0x40, capacity=0x16 - */ -dr_flash_err_t dr_w25q32_read_jedec_id(dr_flash_jedec_t *jedec); - -/** - * @brief Read 8-byte unique ID - * @param uid Buffer to store 8-byte UID (must be >= 8 bytes) - * @return dr_flash_err_t Error code - */ -dr_flash_err_t dr_w25q32_read_uid(uint8_t *uid); - -/*============================================================================== - * READ - *============================================================================*/ - -/** - * @brief Read data from flash - * @param addr 24-bit start address (0x000000 ~ 0x3FFFFF) - * @param buf Buffer to store read data - * @param len Number of bytes to read - * @return dr_flash_err_t Error code - */ -dr_flash_err_t dr_w25q32_read(uint32_t addr, uint8_t *buf, uint32_t len); - -/*============================================================================== - * WRITE - *============================================================================*/ - -/** - * @brief Write data to flash (page program, max 256 bytes) - * @param addr 24-bit start address (must be page-aligned for best results) - * @param data Data to write - * @param len Number of bytes (1~256, must not cross page boundary) - * @return dr_flash_err_t Error code - * @note Automatically sends Write Enable before programming. - * Waits for completion (BUSY flag). - */ -dr_flash_err_t dr_w25q32_write(uint32_t addr, const uint8_t *data, uint32_t len); - -/*============================================================================== - * ERASE - *============================================================================*/ - -/** - * @brief Erase 4KB sector - * @param addr Any address within the sector to erase - * @return dr_flash_err_t Error code - * @note Typical 45ms, max 400ms. Waits for completion. - */ -dr_flash_err_t dr_w25q32_erase_sector(uint32_t addr); - -/** - * @brief Erase 32KB block - * @param addr Any address within the block - * @return dr_flash_err_t Error code - */ -dr_flash_err_t dr_w25q32_erase_block_32k(uint32_t addr); - -/** - * @brief Erase 64KB block - * @param addr Any address within the block - * @return dr_flash_err_t Error code - */ -dr_flash_err_t dr_w25q32_erase_block_64k(uint32_t addr); - -/** - * @brief Erase entire chip - * @return dr_flash_err_t Error code - * @note Takes 6~50 seconds. Use with caution. - */ -dr_flash_err_t dr_w25q32_chip_erase(void); - -/*============================================================================== - * POWER MANAGEMENT - *============================================================================*/ - -/** - * @brief Enter deep power-down mode (~1uA) - * @return dr_flash_err_t Error code - */ -dr_flash_err_t dr_w25q32_deep_powerdown(void); - -/** - * @brief Release from deep power-down - * @return dr_flash_err_t Error code - * @note Requires ~3us recovery time (handled internally) - */ -dr_flash_err_t dr_w25q32_wakeup(void); - -/*============================================================================== - * STATUS - *============================================================================*/ - -/** - * @brief Read Status Register 1 - * @param status Pointer to store status byte - * @return dr_flash_err_t Error code - */ -dr_flash_err_t dr_w25q32_read_status(uint8_t *status); - -/** - * @brief Check if flash is busy (erase/write in progress) - * @return true if busy - */ -bool dr_w25q32_is_busy(void); - -/** - * @brief Wait until flash is not busy - * @param timeout_ms Maximum wait time in milliseconds - * @return dr_flash_err_t DR_FLASH_OK or DR_FLASH_ERR_TIMEOUT - */ -dr_flash_err_t dr_w25q32_wait_busy(uint32_t timeout_ms); - -/*============================================================================== - * DEBUG / TEST - *============================================================================*/ - -/** - * @brief Test flash communication by reading JEDEC ID - * @return true if JEDEC ID matches W25Q32 (0xEF, 0x40, 0x16) - */ -bool dr_w25q32_test(void); - -#endif /* DR_W25Q32_H */ diff --git a/pc_firm/f.bat b/pc_firm/f.bat deleted file mode 100644 index bd86db5..0000000 --- a/pc_firm/f.bat +++ /dev/null @@ -1,2 +0,0 @@ -gcc -std=c99 -Wall -Wextra -o parser.exe parser.c pcmain.c - diff --git a/pc_firm/pcmain.c b/pc_firm/pcmain.c deleted file mode 100644 index 09d14e2..0000000 --- a/pc_firm/pcmain.c +++ /dev/null @@ -1,59 +0,0 @@ -/* pcmain.c : PC에서 parser 테스트용 main - * - 펌웨어에서는 이 파일 사용하지 않음 - */ - -#include -#include -#include "parser.h" - -/* PC용 로그 함수 */ -static void pc_log(const char *fmt, ...) -{ - if (!g_log_enable) { - return; - } - va_list ap; - va_start(ap, fmt); - vprintf(fmt, ap); - va_end(ap); -} - -/* PC용 바이너리 전송 함수 */ -static void pc_tx_bin(const uint8_t *buf, uint16_t len) -{ - uint16_t i; - printf("[TX] "); - for (i = 0; i < len; i++) { - printf("%02X ", buf[i]); - } - printf("\n"); -} - -int main(void) -{ - /* 플랫폼 함수 설정 */ - g_plat.log = pc_log; - g_plat.tx_bin = pc_tx_bin; - g_log_enable = true; /* 필요시 false로 전체 로그 끄기 */ - - /* 테스트 1: sta? (mode=1) */ - { - uint8_t buf[6] = { 's','s','n','?' }; /* value0=1 */ - dr_cmd_parser(buf, 4); - } - - /* 테스트 2: ssz? (Serial 12바이트) */ - { - const char *serial = "ABC123456789"; - uint8_t buf[4 + 12]; - uint8_t i; - - buf[0] = 's'; buf[1] = 's'; buf[2] = 'z'; buf[3] = '?'; - for (i = 0; i < 12; i++) { - buf[4 + i] = (uint8_t)serial[i]; - } - dr_cmd_parser(buf, 4 + 12); - } - - return 0; -} diff --git a/project/ble_peripheral/ble_app_bladder_patch/pca10056/s140/arm5_no_packs/ble_app_bladder_patch_s140.uvoptx b/project/ble_peripheral/ble_app_bladder_patch/pca10056/s140/arm5_no_packs/ble_app_bladder_patch_s140.uvoptx index 6683bfe..0996c75 100644 --- a/project/ble_peripheral/ble_app_bladder_patch/pca10056/s140/arm5_no_packs/ble_app_bladder_patch_s140.uvoptx +++ b/project/ble_peripheral/ble_app_bladder_patch/pca10056/s140/arm5_no_packs/ble_app_bladder_patch_s140.uvoptx @@ -1399,30 +1399,6 @@ 0 0 0 - ..\..\..\..\..\..\pc_firm\dr_w25q32\dr_w25q32.c - dr_w25q32.c - 0 - 0 - - - 1 - 22 - 5 - 0 - 0 - 0 - ..\..\..\..\..\..\pc_firm\dr_w25q32\dr_w25q32.h - dr_w25q32.h - 0 - 0 - - - 1 - 23 - 1 - 0 - 0 - 0 ..\..\..\led_control.c led_control.c 0 @@ -1438,7 +1414,7 @@ 0 2 - 24 + 22 1 0 0 @@ -1458,7 +1434,7 @@ 0 3 - 25 + 23 1 0 0 @@ -1470,7 +1446,7 @@ 3 - 26 + 24 1 0 0 @@ -1490,7 +1466,7 @@ 0 4 - 27 + 25 1 0 0 @@ -1510,7 +1486,7 @@ 0 5 - 28 + 26 1 0 0 @@ -1522,7 +1498,7 @@ 5 - 29 + 27 1 0 0 @@ -1534,7 +1510,7 @@ 5 - 30 + 28 1 0 0 @@ -1546,7 +1522,7 @@ 5 - 31 + 29 1 0 0 @@ -1558,7 +1534,7 @@ 5 - 32 + 30 1 0 0 @@ -1570,7 +1546,7 @@ 5 - 33 + 31 1 0 0 @@ -1582,7 +1558,7 @@ 5 - 34 + 32 1 0 0 @@ -1594,7 +1570,7 @@ 5 - 35 + 33 1 0 0 @@ -1606,7 +1582,7 @@ 5 - 36 + 34 1 0 0 @@ -1618,7 +1594,7 @@ 5 - 37 + 35 1 0 0 @@ -1630,7 +1606,7 @@ 5 - 38 + 36 1 0 0 @@ -1642,7 +1618,7 @@ 5 - 39 + 37 1 0 0 @@ -1654,7 +1630,7 @@ 5 - 40 + 38 1 0 0 @@ -1666,7 +1642,7 @@ 5 - 41 + 39 1 0 0 @@ -1678,7 +1654,7 @@ 5 - 42 + 40 1 0 0 @@ -1690,7 +1666,7 @@ 5 - 43 + 41 1 0 0 @@ -1702,7 +1678,7 @@ 5 - 44 + 42 1 0 0 @@ -1714,7 +1690,7 @@ 5 - 45 + 43 1 0 0 @@ -1726,7 +1702,7 @@ 5 - 46 + 44 1 0 0 @@ -1738,7 +1714,7 @@ 5 - 47 + 45 1 0 0 @@ -1758,7 +1734,7 @@ 0 6 - 48 + 46 1 0 0 @@ -1778,7 +1754,7 @@ 0 7 - 49 + 47 1 0 0 @@ -1790,7 +1766,7 @@ 7 - 50 + 48 1 0 0 @@ -1802,7 +1778,7 @@ 7 - 51 + 49 1 0 0 @@ -1814,7 +1790,7 @@ 7 - 52 + 50 1 0 0 @@ -1826,7 +1802,7 @@ 7 - 53 + 51 1 0 0 @@ -1838,7 +1814,7 @@ 7 - 54 + 52 1 0 0 @@ -1850,7 +1826,7 @@ 7 - 55 + 53 1 0 0 @@ -1862,7 +1838,7 @@ 7 - 56 + 54 1 0 0 @@ -1874,7 +1850,7 @@ 7 - 57 + 55 1 0 0 @@ -1886,7 +1862,7 @@ 7 - 58 + 56 1 0 0 @@ -1898,7 +1874,7 @@ 7 - 59 + 57 1 0 0 @@ -1910,7 +1886,7 @@ 7 - 60 + 58 1 0 0 @@ -1922,7 +1898,7 @@ 7 - 61 + 59 1 0 0 @@ -1934,7 +1910,7 @@ 7 - 62 + 60 1 0 0 @@ -1946,7 +1922,7 @@ 7 - 63 + 61 1 0 0 @@ -1958,7 +1934,7 @@ 7 - 64 + 62 1 0 0 @@ -1970,7 +1946,7 @@ 7 - 65 + 63 1 0 0 @@ -1982,7 +1958,7 @@ 7 - 66 + 64 1 0 0 @@ -1994,7 +1970,7 @@ 7 - 67 + 65 1 0 0 @@ -2006,7 +1982,7 @@ 7 - 68 + 66 5 0 0 @@ -2026,7 +2002,7 @@ 0 8 - 69 + 67 1 0 0 @@ -2038,7 +2014,7 @@ 8 - 70 + 68 1 0 0 @@ -2050,7 +2026,7 @@ 8 - 71 + 69 1 0 0 @@ -2062,7 +2038,7 @@ 8 - 72 + 70 1 0 0 @@ -2074,7 +2050,7 @@ 8 - 73 + 71 1 0 0 @@ -2086,7 +2062,7 @@ 8 - 74 + 72 1 0 0 @@ -2098,7 +2074,7 @@ 8 - 75 + 73 1 0 0 @@ -2110,7 +2086,7 @@ 8 - 76 + 74 1 0 0 @@ -2122,7 +2098,7 @@ 8 - 77 + 75 1 0 0 @@ -2134,7 +2110,7 @@ 8 - 78 + 76 1 0 0 @@ -2146,7 +2122,7 @@ 8 - 79 + 77 1 0 0 @@ -2158,7 +2134,7 @@ 8 - 80 + 78 1 0 0 @@ -2170,7 +2146,7 @@ 8 - 81 + 79 1 0 0 @@ -2182,7 +2158,7 @@ 8 - 82 + 80 1 0 0 @@ -2194,7 +2170,7 @@ 8 - 83 + 81 1 0 0 @@ -2206,7 +2182,7 @@ 8 - 84 + 82 1 0 0 @@ -2218,7 +2194,7 @@ 8 - 85 + 83 1 0 0 @@ -2230,7 +2206,7 @@ 8 - 86 + 84 1 0 0 @@ -2242,7 +2218,7 @@ 8 - 87 + 85 1 0 0 @@ -2254,7 +2230,7 @@ 8 - 88 + 86 1 0 0 @@ -2266,7 +2242,7 @@ 8 - 89 + 87 1 0 0 @@ -2278,7 +2254,7 @@ 8 - 90 + 88 1 0 0 @@ -2290,7 +2266,7 @@ 8 - 91 + 89 1 0 0 @@ -2302,7 +2278,7 @@ 8 - 92 + 90 1 0 0 @@ -2314,7 +2290,7 @@ 8 - 93 + 91 1 0 0 @@ -2326,7 +2302,7 @@ 8 - 94 + 92 1 0 0 @@ -2338,7 +2314,7 @@ 8 - 95 + 93 1 0 0 @@ -2350,7 +2326,7 @@ 8 - 96 + 94 1 0 0 @@ -2362,7 +2338,7 @@ 8 - 97 + 95 1 0 0 @@ -2382,7 +2358,7 @@ 0 9 - 98 + 96 1 0 0 @@ -2394,7 +2370,7 @@ 9 - 99 + 97 1 0 0 @@ -2406,7 +2382,7 @@ 9 - 100 + 98 1 0 0 @@ -2418,7 +2394,7 @@ 9 - 101 + 99 1 0 0 @@ -2430,7 +2406,7 @@ 9 - 102 + 100 1 0 0 @@ -2450,7 +2426,7 @@ 0 10 - 103 + 101 1 0 0 @@ -2462,7 +2438,7 @@ 10 - 104 + 102 1 0 0 @@ -2474,7 +2450,7 @@ 10 - 105 + 103 1 0 0 @@ -2494,7 +2470,7 @@ 0 11 - 106 + 104 1 0 0 @@ -2506,7 +2482,7 @@ 11 - 107 + 105 1 0 0 @@ -2518,7 +2494,7 @@ 11 - 108 + 106 1 0 0 @@ -2538,7 +2514,7 @@ 0 12 - 109 + 107 1 0 0 @@ -2550,7 +2526,7 @@ 12 - 110 + 108 1 0 0 @@ -2562,7 +2538,7 @@ 12 - 111 + 109 1 0 0 @@ -2574,7 +2550,7 @@ 12 - 112 + 110 1 0 0 @@ -2594,7 +2570,7 @@ 0 13 - 113 + 111 1 0 0 @@ -2606,7 +2582,7 @@ 13 - 114 + 112 1 0 0 @@ -2618,7 +2594,7 @@ 13 - 115 + 113 1 0 0 @@ -2630,7 +2606,7 @@ 13 - 116 + 114 1 0 0 @@ -2642,7 +2618,7 @@ 13 - 117 + 115 1 0 0 @@ -2654,7 +2630,7 @@ 13 - 118 + 116 1 0 0 @@ -2666,7 +2642,7 @@ 13 - 119 + 117 1 0 0 @@ -2678,7 +2654,7 @@ 13 - 120 + 118 1 0 0 @@ -2690,7 +2666,7 @@ 13 - 121 + 119 1 0 0 @@ -2702,7 +2678,7 @@ 13 - 122 + 120 1 0 0 @@ -2714,7 +2690,7 @@ 13 - 123 + 121 1 0 0 @@ -2726,7 +2702,7 @@ 13 - 124 + 122 1 0 0 @@ -2738,7 +2714,7 @@ 13 - 125 + 123 1 0 0 @@ -2750,7 +2726,7 @@ 13 - 126 + 124 1 0 0 @@ -2770,7 +2746,7 @@ 0 14 - 127 + 125 1 0 0 @@ -2782,7 +2758,7 @@ 14 - 128 + 126 1 0 0 @@ -2794,7 +2770,7 @@ 14 - 129 + 127 1 0 0 @@ -2806,7 +2782,7 @@ 14 - 130 + 128 1 0 0 @@ -2818,7 +2794,7 @@ 14 - 131 + 129 1 0 0 @@ -2830,7 +2806,7 @@ 14 - 132 + 130 1 0 0 @@ -2842,7 +2818,7 @@ 14 - 133 + 131 1 0 0 @@ -2854,7 +2830,7 @@ 14 - 134 + 132 1 0 0 @@ -2866,7 +2842,7 @@ 14 - 135 + 133 1 0 0 @@ -2878,7 +2854,7 @@ 14 - 136 + 134 1 0 0 @@ -2890,7 +2866,7 @@ 14 - 137 + 135 1 0 0 @@ -2902,7 +2878,7 @@ 14 - 138 + 136 1 0 0 @@ -2914,7 +2890,7 @@ 14 - 139 + 137 1 0 0 @@ -2934,7 +2910,7 @@ 0 15 - 140 + 138 1 0 0 @@ -2946,7 +2922,7 @@ 15 - 141 + 139 1 0 0 @@ -2958,7 +2934,7 @@ 15 - 142 + 140 1 0 0 @@ -2970,7 +2946,7 @@ 15 - 143 + 141 1 0 0 @@ -2982,7 +2958,7 @@ 15 - 144 + 142 1 0 0 @@ -2994,7 +2970,7 @@ 15 - 145 + 143 1 0 0 @@ -3006,7 +2982,7 @@ 15 - 146 + 144 1 0 0 @@ -3026,7 +3002,7 @@ 0 16 - 147 + 145 1 0 0 @@ -3038,7 +3014,7 @@ 16 - 148 + 146 1 0 0 @@ -3050,7 +3026,7 @@ 16 - 149 + 147 1 0 0 @@ -3070,7 +3046,7 @@ 0 17 - 150 + 148 4 0 0 @@ -3090,7 +3066,7 @@ 0 18 - 151 + 149 1 0 0 @@ -3102,7 +3078,7 @@ 18 - 152 + 150 1 0 0 @@ -3114,7 +3090,7 @@ 18 - 153 + 151 1 0 0 @@ -3134,7 +3110,7 @@ 0 19 - 154 + 152 4 0 0 @@ -3154,7 +3130,7 @@ 0 20 - 155 + 153 1 0 0 @@ -3166,7 +3142,7 @@ 20 - 156 + 154 1 0 0 @@ -3178,7 +3154,7 @@ 20 - 157 + 155 1 0 0 @@ -3190,7 +3166,7 @@ 20 - 158 + 156 1 0 0 @@ -3202,7 +3178,7 @@ 20 - 159 + 157 1 0 0 @@ -3214,7 +3190,7 @@ 20 - 160 + 158 1 0 0 @@ -3226,7 +3202,7 @@ 20 - 161 + 159 1 0 0 @@ -3238,7 +3214,7 @@ 20 - 162 + 160 1 0 0 @@ -3250,7 +3226,7 @@ 20 - 163 + 161 1 0 0 @@ -3262,7 +3238,7 @@ 20 - 164 + 162 1 0 0 diff --git a/project/ble_peripheral/ble_app_bladder_patch/pca10056/s140/arm5_no_packs/ble_app_bladder_patch_s140.uvprojx b/project/ble_peripheral/ble_app_bladder_patch/pca10056/s140/arm5_no_packs/ble_app_bladder_patch_s140.uvprojx index 4e7e109..d1600b3 100644 --- a/project/ble_peripheral/ble_app_bladder_patch/pca10056/s140/arm5_no_packs/ble_app_bladder_patch_s140.uvprojx +++ b/project/ble_peripheral/ble_app_bladder_patch/pca10056/s140/arm5_no_packs/ble_app_bladder_patch_s140.uvprojx @@ -339,7 +339,7 @@ --reduce_paths --diag_suppress 188 APP_TIMER_V2 APP_TIMER_V2_RTC1_ENABLED BOARD_PCA10056 FLOAT_ABI_HARD NRF52840_XXAA NRF_SD_BLE_API_VERSION=7 S140 SOFTDEVICE_PRESENT __HEAP_SIZE=8192 __STACK_SIZE=8192 NRF_DFU_SVCI_ENABLED NRF_DFU_TRANSPORT_BLE=1 ICM42670P CONFIG_NFCT_PINS_AS_GPIOS MBEDTLS_CONFIG_FILE=<nrf_crypto_mbedtls_config.h> NRF_APP_VERSION=0x00000001 NRF_APP_VERSION_ADDR=0x1D000 NRF_CRYPTO_MAX_INSTANCE_COUN=1 - ..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_advertising;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\ble_link_ctx_manager;..\..\..\..\..\..\components\ble\ble_racp;..\..\..\..\..\..\components\ble\ble_services\ble_ancs_c;..\..\..\..\..\..\components\ble\ble_services\ble_ans_c;..\..\..\..\..\..\components\ble\ble_services\ble_bas;..\..\..\..\..\..\components\ble\ble_services\ble_bas_c;..\..\..\..\..\..\components\ble\ble_services\ble_cscs;..\..\..\..\..\..\components\ble\ble_services\ble_cts_c;..\..\..\..\..\..\components\ble\ble_services\ble_dfu;..\..\..\..\..\..\components\ble\ble_services\ble_dis;..\..\..\..\..\..\components\ble\ble_services\ble_gls;..\..\..\..\..\..\components\ble\ble_services\ble_hids;..\..\..\..\..\..\components\ble\ble_services\ble_hrs;..\..\..\..\..\..\components\ble\ble_services\ble_hrs_c;..\..\..\..\..\..\components\ble\ble_services\ble_hts;..\..\..\..\..\..\components\ble\ble_services\ble_ias;..\..\..\..\..\..\components\ble\ble_services\ble_ias_c;..\..\..\..\..\..\components\ble\ble_services\ble_lbs;..\..\..\..\..\..\components\ble\ble_services\ble_lbs_c;..\..\..\..\..\..\components\ble\ble_services\ble_lls;..\..\..\..\..\..\components\ble\ble_services\ble_nus;..\..\..\..\..\..\components\ble\ble_services\ble_nus_c;..\..\..\..\..\..\components\ble\ble_services\ble_rscs;..\..\..\..\..\..\components\ble\ble_services\ble_rscs_c;..\..\..\..\..\..\components\ble\ble_services\ble_tps;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\ble\nrf_ble_gatt;..\..\..\..\..\..\components\ble\nrf_ble_qwr;..\..\..\..\..\..\components\ble\peer_manager;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\atomic_fifo;..\..\..\..\..\..\components\libraries\atomic_flags;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\bootloader\ble_dfu;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\button;..\..\..\..\..\..\components\libraries\cli;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\crc32;..\..\..\..\..\..\components\libraries\crypto;..\..\..\..\..\..\components\libraries\csense;..\..\..\..\..\..\components\libraries\csense_drv;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\ecc;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\experimental_task_manager;..\..\..\..\..\..\components\libraries\fds;..\..\..\..\..\..\components\libraries\fifo;..\..\..\..\..\..\components\libraries\fstorage;..\..\..\..\..\..\components\libraries\gfx;..\..\..\..\..\..\components\libraries\gpiote;..\..\..\..\..\..\components\libraries\hardfault;..\..\..\..\..\..\components\libraries\hci;..\..\..\..\..\..\components\libraries\led_softblink;..\..\..\..\..\..\components\libraries\log;..\..\..\..\..\..\components\libraries\log\src;..\..\..\..\..\..\components\libraries\low_power_pwm;..\..\..\..\..\..\components\libraries\mem_manager;..\..\..\..\..\..\components\libraries\memobj;..\..\..\..\..\..\components\libraries\mpu;..\..\..\..\..\..\components\libraries\mutex;..\..\..\..\..\..\components\libraries\pwm;..\..\..\..\..\..\components\libraries\pwr_mgmt;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\ringbuf;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\sdcard;..\..\..\..\..\..\components\libraries\slip;..\..\..\..\..\..\components\libraries\sortlist;..\..\..\..\..\..\components\libraries\spi_mngr;..\..\..\..\..\..\components\libraries\stack_guard;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\svc;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\twi_mngr;..\..\..\..\..\..\components\libraries\twi_sensor;..\..\..\..\..\..\components\libraries\uart;..\..\..\..\..\..\components\libraries\usbd;..\..\..\..\..\..\components\libraries\usbd\class\audio;..\..\..\..\..\..\components\libraries\usbd\class\cdc;..\..\..\..\..\..\components\libraries\usbd\class\cdc\acm;..\..\..\..\..\..\components\libraries\usbd\class\hid;..\..\..\..\..\..\components\libraries\usbd\class\hid\generic;..\..\..\..\..\..\components\libraries\usbd\class\hid\kbd;..\..\..\..\..\..\components\libraries\usbd\class\hid\mouse;..\..\..\..\..\..\components\libraries\usbd\class\msc;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\nfc\ndef\conn_hand_parser;..\..\..\..\..\..\components\nfc\ndef\conn_hand_parser\ac_rec_parser;..\..\..\..\..\..\components\nfc\ndef\conn_hand_parser\ble_oob_advdata_parser;..\..\..\..\..\..\components\nfc\ndef\conn_hand_parser\le_oob_rec_parser;..\..\..\..\..\..\components\nfc\ndef\connection_handover\ac_rec;..\..\..\..\..\..\components\nfc\ndef\connection_handover\ble_oob_advdata;..\..\..\..\..\..\components\nfc\ndef\connection_handover\ble_pair_lib;..\..\..\..\..\..\components\nfc\ndef\connection_handover\ble_pair_msg;..\..\..\..\..\..\components\nfc\ndef\connection_handover\common;..\..\..\..\..\..\components\nfc\ndef\connection_handover\ep_oob_rec;..\..\..\..\..\..\components\nfc\ndef\connection_handover\hs_rec;..\..\..\..\..\..\components\nfc\ndef\connection_handover\le_oob_rec;..\..\..\..\..\..\components\nfc\ndef\generic\message;..\..\..\..\..\..\components\nfc\ndef\generic\record;..\..\..\..\..\..\components\nfc\ndef\launchapp;..\..\..\..\..\..\components\nfc\ndef\parser\message;..\..\..\..\..\..\components\nfc\ndef\parser\record;..\..\..\..\..\..\components\nfc\ndef\text;..\..\..\..\..\..\components\nfc\ndef\uri;..\..\..\..\..\..\components\nfc\platform;..\..\..\..\..\..\components\nfc\t2t_lib;..\..\..\..\..\..\components\nfc\t2t_parser;..\..\..\..\..\..\components\nfc\t4t_lib;..\..\..\..\..\..\components\nfc\t4t_parser\apdu;..\..\..\..\..\..\components\nfc\t4t_parser\cc_file;..\..\..\..\..\..\components\nfc\t4t_parser\hl_detection_procedure;..\..\..\..\..\..\components\nfc\t4t_parser\tlv;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s140\headers;..\..\..\..\..\..\components\softdevice\s140\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\external\utf_converter;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\config;..\..\..\..\ble_app_bladder_patch;..\..\..\..\..\..\components\libraries\bootloader\dfu;..\..\..\..\..\..\components\libraries\bootloader;..\..\..\..\..\..\modules\nrfx\drivers\src;..\..\..\icm42670p;..\..\..\icm42670p\Invn;..\..\..\icm42670p\Invn\EmbUtils;..\..\..\icm42670p\Invn\imu;..\..\..\icm42670p\Invn\lib_agm;..\..\..\icm42670p\Invn\lib_agm\invn\common;..\..\..\icm42670p\Invn\lib_agm\test_vector;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\icm42670p\app_raw;..\..\..\..\..\..\components\libraries\crypto\backend\cc310;..\..\..\..\..\..\components\libraries\crypto\backend\cc310_bl;..\..\..\..\..\..\components\libraries\crypto\backend\cifra;..\..\..\..\..\..\components\libraries\crypto\backend\mbedtls;..\..\..\..\..\..\components\libraries\crypto\backend\micro_ecc;..\..\..\..\..\..\components\libraries\crypto\backend\nrf_hw;..\..\..\..\..\..\components\libraries\crypto\backend\nrf_sw;..\..\..\..\..\..\components\libraries\crypto\backend\oberon;..\..\..\..\..\..\components\libraries\crypto\backend\optiga;..\..\..\..\..\..\external\nrf_cc310\include;..\..\..\..\..\..\external\mbedtls\include;..\..\..\..\..\..\external\nrf_oberon;..\..\..\..\..\..\external\nrf_oberon\include;..\..\..\..\..\..\external\nrf_tls\mbedtls\nrf_crypto\config;..\..\..\..\..\..\components\libraries\stack_info;..\..\..\..\..\..\pc_firm\ble_security;..\..\..\..\..\..\pc_firm;..\..\..\..\dr_piezo;..\..\..\..\..\..\pc_firm\dr_util;..\..\..\..\..\..\pc_firm\dr_adc121s051;..\..\..\..\..\..\pc_firm\dr_w25q32 + ..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_advertising;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\ble_link_ctx_manager;..\..\..\..\..\..\components\ble\ble_racp;..\..\..\..\..\..\components\ble\ble_services\ble_ancs_c;..\..\..\..\..\..\components\ble\ble_services\ble_ans_c;..\..\..\..\..\..\components\ble\ble_services\ble_bas;..\..\..\..\..\..\components\ble\ble_services\ble_bas_c;..\..\..\..\..\..\components\ble\ble_services\ble_cscs;..\..\..\..\..\..\components\ble\ble_services\ble_cts_c;..\..\..\..\..\..\components\ble\ble_services\ble_dfu;..\..\..\..\..\..\components\ble\ble_services\ble_dis;..\..\..\..\..\..\components\ble\ble_services\ble_gls;..\..\..\..\..\..\components\ble\ble_services\ble_hids;..\..\..\..\..\..\components\ble\ble_services\ble_hrs;..\..\..\..\..\..\components\ble\ble_services\ble_hrs_c;..\..\..\..\..\..\components\ble\ble_services\ble_hts;..\..\..\..\..\..\components\ble\ble_services\ble_ias;..\..\..\..\..\..\components\ble\ble_services\ble_ias_c;..\..\..\..\..\..\components\ble\ble_services\ble_lbs;..\..\..\..\..\..\components\ble\ble_services\ble_lbs_c;..\..\..\..\..\..\components\ble\ble_services\ble_lls;..\..\..\..\..\..\components\ble\ble_services\ble_nus;..\..\..\..\..\..\components\ble\ble_services\ble_nus_c;..\..\..\..\..\..\components\ble\ble_services\ble_rscs;..\..\..\..\..\..\components\ble\ble_services\ble_rscs_c;..\..\..\..\..\..\components\ble\ble_services\ble_tps;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\ble\nrf_ble_gatt;..\..\..\..\..\..\components\ble\nrf_ble_qwr;..\..\..\..\..\..\components\ble\peer_manager;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\atomic_fifo;..\..\..\..\..\..\components\libraries\atomic_flags;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\bootloader\ble_dfu;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\button;..\..\..\..\..\..\components\libraries\cli;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\crc32;..\..\..\..\..\..\components\libraries\crypto;..\..\..\..\..\..\components\libraries\csense;..\..\..\..\..\..\components\libraries\csense_drv;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\ecc;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\experimental_task_manager;..\..\..\..\..\..\components\libraries\fds;..\..\..\..\..\..\components\libraries\fifo;..\..\..\..\..\..\components\libraries\fstorage;..\..\..\..\..\..\components\libraries\gfx;..\..\..\..\..\..\components\libraries\gpiote;..\..\..\..\..\..\components\libraries\hardfault;..\..\..\..\..\..\components\libraries\hci;..\..\..\..\..\..\components\libraries\led_softblink;..\..\..\..\..\..\components\libraries\log;..\..\..\..\..\..\components\libraries\log\src;..\..\..\..\..\..\components\libraries\low_power_pwm;..\..\..\..\..\..\components\libraries\mem_manager;..\..\..\..\..\..\components\libraries\memobj;..\..\..\..\..\..\components\libraries\mpu;..\..\..\..\..\..\components\libraries\mutex;..\..\..\..\..\..\components\libraries\pwm;..\..\..\..\..\..\components\libraries\pwr_mgmt;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\ringbuf;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\sdcard;..\..\..\..\..\..\components\libraries\slip;..\..\..\..\..\..\components\libraries\sortlist;..\..\..\..\..\..\components\libraries\spi_mngr;..\..\..\..\..\..\components\libraries\stack_guard;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\svc;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\twi_mngr;..\..\..\..\..\..\components\libraries\twi_sensor;..\..\..\..\..\..\components\libraries\uart;..\..\..\..\..\..\components\libraries\usbd;..\..\..\..\..\..\components\libraries\usbd\class\audio;..\..\..\..\..\..\components\libraries\usbd\class\cdc;..\..\..\..\..\..\components\libraries\usbd\class\cdc\acm;..\..\..\..\..\..\components\libraries\usbd\class\hid;..\..\..\..\..\..\components\libraries\usbd\class\hid\generic;..\..\..\..\..\..\components\libraries\usbd\class\hid\kbd;..\..\..\..\..\..\components\libraries\usbd\class\hid\mouse;..\..\..\..\..\..\components\libraries\usbd\class\msc;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\nfc\ndef\conn_hand_parser;..\..\..\..\..\..\components\nfc\ndef\conn_hand_parser\ac_rec_parser;..\..\..\..\..\..\components\nfc\ndef\conn_hand_parser\ble_oob_advdata_parser;..\..\..\..\..\..\components\nfc\ndef\conn_hand_parser\le_oob_rec_parser;..\..\..\..\..\..\components\nfc\ndef\connection_handover\ac_rec;..\..\..\..\..\..\components\nfc\ndef\connection_handover\ble_oob_advdata;..\..\..\..\..\..\components\nfc\ndef\connection_handover\ble_pair_lib;..\..\..\..\..\..\components\nfc\ndef\connection_handover\ble_pair_msg;..\..\..\..\..\..\components\nfc\ndef\connection_handover\common;..\..\..\..\..\..\components\nfc\ndef\connection_handover\ep_oob_rec;..\..\..\..\..\..\components\nfc\ndef\connection_handover\hs_rec;..\..\..\..\..\..\components\nfc\ndef\connection_handover\le_oob_rec;..\..\..\..\..\..\components\nfc\ndef\generic\message;..\..\..\..\..\..\components\nfc\ndef\generic\record;..\..\..\..\..\..\components\nfc\ndef\launchapp;..\..\..\..\..\..\components\nfc\ndef\parser\message;..\..\..\..\..\..\components\nfc\ndef\parser\record;..\..\..\..\..\..\components\nfc\ndef\text;..\..\..\..\..\..\components\nfc\ndef\uri;..\..\..\..\..\..\components\nfc\platform;..\..\..\..\..\..\components\nfc\t2t_lib;..\..\..\..\..\..\components\nfc\t2t_parser;..\..\..\..\..\..\components\nfc\t4t_lib;..\..\..\..\..\..\components\nfc\t4t_parser\apdu;..\..\..\..\..\..\components\nfc\t4t_parser\cc_file;..\..\..\..\..\..\components\nfc\t4t_parser\hl_detection_procedure;..\..\..\..\..\..\components\nfc\t4t_parser\tlv;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s140\headers;..\..\..\..\..\..\components\softdevice\s140\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\external\utf_converter;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\config;..\..\..\..\ble_app_bladder_patch;..\..\..\..\..\..\components\libraries\bootloader\dfu;..\..\..\..\..\..\components\libraries\bootloader;..\..\..\..\..\..\modules\nrfx\drivers\src;..\..\..\icm42670p;..\..\..\icm42670p\Invn;..\..\..\icm42670p\Invn\EmbUtils;..\..\..\icm42670p\Invn\imu;..\..\..\icm42670p\Invn\lib_agm;..\..\..\icm42670p\Invn\lib_agm\invn\common;..\..\..\icm42670p\Invn\lib_agm\test_vector;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\icm42670p\app_raw;..\..\..\..\..\..\components\libraries\crypto\backend\cc310;..\..\..\..\..\..\components\libraries\crypto\backend\cc310_bl;..\..\..\..\..\..\components\libraries\crypto\backend\cifra;..\..\..\..\..\..\components\libraries\crypto\backend\mbedtls;..\..\..\..\..\..\components\libraries\crypto\backend\micro_ecc;..\..\..\..\..\..\components\libraries\crypto\backend\nrf_hw;..\..\..\..\..\..\components\libraries\crypto\backend\nrf_sw;..\..\..\..\..\..\components\libraries\crypto\backend\oberon;..\..\..\..\..\..\components\libraries\crypto\backend\optiga;..\..\..\..\..\..\external\nrf_cc310\include;..\..\..\..\..\..\external\mbedtls\include;..\..\..\..\..\..\external\nrf_oberon;..\..\..\..\..\..\external\nrf_oberon\include;..\..\..\..\..\..\external\nrf_tls\mbedtls\nrf_crypto\config;..\..\..\..\..\..\components\libraries\stack_info;..\..\..\..\..\..\pc_firm\ble_security;..\..\..\..\..\..\pc_firm;..\..\..\..\dr_piezo;..\..\..\..\..\..\pc_firm\dr_util;..\..\..\..\..\..\pc_firm\dr_adc121s051 @@ -483,16 +483,6 @@ 1 ..\..\..\..\..\..\pc_firm\dr_adc121s051\dr_adc121s051.c - - dr_w25q32.c - 1 - ..\..\..\..\..\..\pc_firm\dr_w25q32\dr_w25q32.c - - - dr_w25q32.h - 5 - ..\..\..\..\..\..\pc_firm\dr_w25q32\dr_w25q32.h - led_control.c 1 @@ -4691,16 +4681,6 @@ 1 ..\..\..\..\..\..\pc_firm\dr_adc121s051\dr_adc121s051.c - - dr_w25q32.c - 1 - ..\..\..\..\..\..\pc_firm\dr_w25q32\dr_w25q32.c - - - dr_w25q32.h - 5 - ..\..\..\..\..\..\pc_firm\dr_w25q32\dr_w25q32.h - led_control.c 1