|
|
@ -115,8 +115,7 @@ int16_t ThreeLeadECG_battery_get_adc_val() { |
|
|
|
* sd card |
|
|
|
* switch |
|
|
|
*/ |
|
|
|
|
|
|
|
#define SDCARD_SPI_CS_PIN 20 |
|
|
|
#define SDCARD_SPI_CS_PIN 28 |
|
|
|
#define SDCARD_SPI_MISO_PIN 31 |
|
|
|
#define SDCARD_SPI_MOSI_PIN 30 |
|
|
|
#define SDCARD_SPI_SCK_PIN 29 |
|
|
@ -196,14 +195,40 @@ NRF_BLOCK_DEV_SDC_DEFINE(m_block_dev_sdc, |
|
|
|
static FATFS fs; |
|
|
|
|
|
|
|
void sdcard_test_write_text() { |
|
|
|
#define FILE_NAME "IFLYTOP_W_TEST.TXT" |
|
|
|
static FIL file; |
|
|
|
uint32_t bytes_written; |
|
|
|
#define FILE_NAME "/5.TXT" |
|
|
|
static FIL file; |
|
|
|
uint32_t bytes_written; |
|
|
|
static DIR dir; |
|
|
|
static FILINFO fno; |
|
|
|
|
|
|
|
NRF_LOG_INFO("\r\n Listing directory: /"); |
|
|
|
FRESULT ff_result = f_opendir(&dir, "/"); |
|
|
|
if (ff_result) { |
|
|
|
NRF_LOG_INFO("Directory listing failed!"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
do { |
|
|
|
ff_result = f_readdir(&dir, &fno); |
|
|
|
if (ff_result != FR_OK) { |
|
|
|
NRF_LOG_INFO("Directory read failed."); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (fno.fname[0]) { |
|
|
|
if (fno.fattrib & AM_DIR) { |
|
|
|
NRF_LOG_RAW_INFO(" <DIR> %s", (uint32_t)fno.fname); |
|
|
|
} else { |
|
|
|
NRF_LOG_RAW_INFO("%9lu %s", fno.fsize, (uint32_t)fno.fname); |
|
|
|
} |
|
|
|
} |
|
|
|
} while (fno.fname[0]); |
|
|
|
NRF_LOG_RAW_INFO(""); |
|
|
|
|
|
|
|
NRF_LOG_INFO("Writing to file " FILE_NAME "..."); |
|
|
|
FRESULT ff_result = f_open(&file, FILE_NAME, FA_READ | FA_WRITE | FA_OPEN_APPEND); |
|
|
|
ff_result = f_open(&file, FILE_NAME, FA_CREATE_ALWAYS | FA_READ | FA_WRITE | FA_CREATE_NEW); |
|
|
|
if (ff_result != FR_OK) { |
|
|
|
NRF_LOG_INFO("Unable to open or create file: " FILE_NAME "."); |
|
|
|
NRF_LOG_INFO("Unable to open or create file: " FILE_NAME ". %d", ff_result); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
@ -216,6 +241,29 @@ void sdcard_test_write_text() { |
|
|
|
|
|
|
|
(void)f_close(&file); |
|
|
|
} |
|
|
|
bool mountsuc = false; |
|
|
|
/** |
|
|
|
* @brief 对接 get_fattime |
|
|
|
* @return DWORD |
|
|
|
*/ |
|
|
|
|
|
|
|
static DWORD get_fattime_0(uint32_t year, uint32_t month, uint32_t day, uint32_t hour, uint32_t min, uint32_t sec) { |
|
|
|
// return ((DWORD)(year - 1980) << 25 | (DWORD)month << 21 | (DWORD)day << 16); |
|
|
|
DWORD fattime = 0; |
|
|
|
fattime |= ((DWORD)(year - 1980) << 25); // 年份从1980年开始 |
|
|
|
fattime |= ((DWORD)(month + 1) << 21); // 月份范围是1-12 |
|
|
|
fattime |= ((DWORD)day << 16); // 日 |
|
|
|
fattime |= ((DWORD)hour << 11); // 时 |
|
|
|
fattime |= ((DWORD)min << 5); // 分 |
|
|
|
fattime |= ((DWORD)sec / 2); // 秒,以2秒为单位 |
|
|
|
|
|
|
|
return fattime; |
|
|
|
} |
|
|
|
|
|
|
|
DWORD get_fattime(void) { |
|
|
|
return get_fattime_0(2024, 1, 23, 23, 29, 31); |
|
|
|
// ((DWORD)(_NORTC_YEAR - 1980) << 25 | (DWORD)_NORTC_MON << 21 | (DWORD)_NORTC_MDAY << 16) |
|
|
|
} |
|
|
|
|
|
|
|
void ThreeLeadECG_sdcard_mount() { |
|
|
|
/** |
|
|
@ -234,27 +282,35 @@ void ThreeLeadECG_sdcard_mount() { |
|
|
|
* @brief |
|
|
|
* 1. 初始化SPI引脚,驱动flash |
|
|
|
*/ |
|
|
|
|
|
|
|
static diskio_blkdev_t drives[] = // |
|
|
|
{DISKIO_BLOCKDEV_CONFIG(NRF_BLOCKDEV_BASE_ADDR(m_block_dev_sdc, block_dev), NULL)}; |
|
|
|
|
|
|
|
diskio_blockdev_register(drives, ARRAY_SIZE(drives)); |
|
|
|
|
|
|
|
DSTATUS disk_state = STA_NOINIT; |
|
|
|
for (uint32_t retries = 3; retries && disk_state; --retries) { |
|
|
|
disk_state = disk_initialize(0); |
|
|
|
} |
|
|
|
if (disk_state) { |
|
|
|
NRF_LOG_INFO("Disk initialization failed. %d", disk_state); |
|
|
|
return; |
|
|
|
} |
|
|
|
NRF_LOG_INFO("Disk initialization succeeded."); |
|
|
|
FRESULT ff_result; |
|
|
|
ff_result = f_mount(&fs, "", 1); |
|
|
|
if (ff_result) { |
|
|
|
NRF_LOG_INFO("Mount failed."); |
|
|
|
return; |
|
|
|
if (!mountsuc) { |
|
|
|
static diskio_blkdev_t drives[] = // |
|
|
|
{DISKIO_BLOCKDEV_CONFIG(NRF_BLOCKDEV_BASE_ADDR(m_block_dev_sdc, block_dev), NULL)}; |
|
|
|
|
|
|
|
diskio_blockdev_register(drives, ARRAY_SIZE(drives)); |
|
|
|
|
|
|
|
DSTATUS disk_state = STA_NOINIT; |
|
|
|
for (uint32_t retries = 3; retries && disk_state; --retries) { |
|
|
|
disk_state = disk_initialize(0); |
|
|
|
} |
|
|
|
if (disk_state) { |
|
|
|
NRF_LOG_INFO("Disk initialization failed. %d", disk_state); |
|
|
|
return; |
|
|
|
} |
|
|
|
NRF_LOG_INFO("Disk initialization succeeded."); |
|
|
|
FRESULT ff_result; |
|
|
|
ff_result = f_mount(&fs, "", 1); |
|
|
|
if (ff_result) { |
|
|
|
NRF_LOG_INFO("Mount failed."); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
uint32_t blocks_per_mb = (1024uL * 1024uL) / m_block_dev_sdc.block_dev.p_ops->geometry(&m_block_dev_sdc.block_dev)->blk_size; |
|
|
|
uint32_t capacity = m_block_dev_sdc.block_dev.p_ops->geometry(&m_block_dev_sdc.block_dev)->blk_count / blocks_per_mb; |
|
|
|
NRF_LOG_INFO("Capacity: %d MB", capacity); |
|
|
|
|
|
|
|
mountsuc = true; |
|
|
|
} |
|
|
|
|
|
|
|
sdcard_test_write_text(); |
|
|
|
} |
|
|
|
void ThreeLeadECG_sdcard_umount() { |
|
|
|