Hello,
I want to read two files from SD card using nRF9160dk. I tried this code ncs/zephyr/samples/subsys/fs/fat_fs.
The Code:
/* * Copyright (c) 2019 Tavish Naruka <[email protected]> * * SPDX-License-Identifier: Apache-2.0 */ /* Sample which uses the filesystem API and SDHC driver */ #include <zephyr.h> #include <device.h> #include <disk/disk_access.h> #include <logging/log.h> #include <fs/fs.h> #include <ff.h> LOG_MODULE_REGISTER(main); static int lsdir(const char *path); static FATFS fat_fs; /* mounting info */ static struct fs_mount_t mp = { .type = FS_FATFS, .fs_data = &fat_fs, }; /* * Note the fatfs library is able to mount only strings inside _VOLUME_STRS * in ffconf.h */ static const char *disk_mount_pt = "/SD:"; void main(void) { /* raw disk i/o */ do { static const char *disk_pdrv = "SD"; u64_t memory_size_mb; u32_t block_count; u32_t block_size; if (disk_access_init(disk_pdrv) != 0) { LOG_ERR("Storage init ERROR!"); break; } if (disk_access_ioctl(disk_pdrv, DISK_IOCTL_GET_SECTOR_COUNT, &block_count)) { LOG_ERR("Unable to get sector count"); break; } LOG_INF("Block count %u", block_count); if (disk_access_ioctl(disk_pdrv, DISK_IOCTL_GET_SECTOR_SIZE, &block_size)) { LOG_ERR("Unable to get sector size"); break; } printk("Sector size %u\n", block_size); memory_size_mb = (u64_t)block_count * block_size; printk("Memory Size(MB) %u\n", (u32_t)memory_size_mb>>20); } while (0); mp.mnt_point = disk_mount_pt; int res = fs_mount(&mp); if (res == FR_OK) { printk("Disk mounted.\n"); lsdir(disk_mount_pt); } else { printk("Error mounting disk.\n"); } while (1) { k_sleep(1000); } } static int lsdir(const char *path) { int res; struct fs_dir_t dirp; static struct fs_dirent entry; /* Verify fs_opendir() */ res = fs_opendir(&dirp, path); if (res) { printk("Error opening dir %s [%d]\n", path, res); return res; } printk("\nListing dir %s ...\n", path); for (;;) { /* Verify fs_readdir() */ res = fs_readdir(&dirp, &entry); /* entry.name[0] == 0 means end-of-dir */ if (res || entry.name[0] == 0) { break; } if (entry.type == FS_DIR_ENTRY_DIR) { printk("[DIR ] %s\n", entry.name); } else { printk("[FILE] %s (size = %zu)\n", entry.name, entry.size); } } /* Verify fs_closedir() */ fs_closedir(&dirp); return res; }
I am getting the following error:
***** Booting Zephyr OS build v1.14.99-ncs3-snapshot2-2647-gd6e67554cfeb ***** [00:00:00.024,078] [0m<inf> spi_nrfx_spim: CS control inhibited (no GPIO device)[0m [00:00:05.039,306] [1;31m<err> main: Storage init ERROR![0m Error mounting disk. [00:00:10.054,565] [1;31m<err> fs: fs mount error (-5)[0m
nrf9160_pca10090ns.overlay:
/* * Copyright (c) 2019 Tavish Naruka <[email protected]> * * SPDX-License-Identifier: Apache-2.0 */ &spi3 { status = "okay"; cs-gpios = <&gpio0 16 0>; sdhc0: sdhc@0 { compatible = "zephyr,mmc-spi-slot"; reg = <0>; status = "okay"; label = "SDHC0"; spi-max-frequency = <24000000>; }; }; &spi3 { status = "okay"; sck-pin = <19>; mosi-pin = <18>; miso-pin = <17>; };
I checked the voltage levels at SPI_3 pins. Pin 16, 17, 18 shows 3V but 19 which is SCK is at 0V. I am not understanding why it is at 0V.
Why there is error? What else I need to do?