int stm32_w25initialize(int minor) { #ifdef HAVE_W25 FAR struct spi_dev_s *spi; FAR struct mtd_dev_s *mtd; #ifndef CONFIG_FS_NXFFS uint8_t devname[12]; #endif int ret; /* Get the SPI port */ spi = up_spiinitialize(2); if (!spi) { fdbg("ERROR: Failed to initialize SPI port 2\n"); return -ENODEV; } /* Now bind the SPI interface to the SST 25 SPI FLASH driver */ mtd = sst25_initialize(spi); if (!mtd) { fdbg("ERROR: Failed to bind SPI port 2 to the SST 25 FLASH driver\n"); return -ENODEV; } #ifndef CONFIG_FS_NXFFS /* And finally, use the FTL layer to wrap the MTD driver as a block driver */ ret = ftl_initialize(minor, mtd); if (ret < 0) { fdbg("ERROR: Initialize the FTL layer\n"); return ret; } #else /* Initialize to provide NXFFS on the MTD interface */ ret = nxffs_initialize(mtd); if (ret < 0) { fdbg("ERROR: NXFFS initialization failed: %d\n", -ret); return ret; } /* Mount the file system at /mnt/w25 */ snprintf(devname, 12, "/mnt/w25%c", a + minor); ret = mount(NULL, devname, "nxffs", 0, NULL); if (ret < 0) { fdbg("ERROR: Failed to mount the NXFFS volume: %d\n", errno); return ret; } #endif #endif return OK; }
int nsh_archinitialize(void) { #ifdef HAVE_SST25 FAR struct spi_dev_s *spi; FAR struct mtd_dev_s *mtd; int ret; /* Get the SPI port */ spi = up_spiinitialize(2); if (!spi) { fdbg("ERROR: Failed to initialize SPI port 2\n"); return -ENODEV; } /* Now bind the SPI interface to the SST 25 SPI FLASH driver */ mtd = sst25_initialize(spi); if (!mtd) { fdbg("ERROR: Failed to bind SPI port 2 to the SST 25 FLASH driver\n"); return -ENODEV; } #ifndef CONFIG_FS_NXFFS /* And finally, use the FTL layer to wrap the MTD driver as a block driver */ ret = ftl_initialize(CONFIG_NSH_MMCSDMINOR, mtd); if (ret < 0) { fdbg("ERROR: Initialize the FTL layer\n"); return ret; } #else /* Initialize to provide NXFFS on the MTD interface */ ret = nxffs_initialize(mtd); if (ret < 0) { fdbg("ERROR: NXFFS initialization failed: %d\n", -ret); return ret; } /* Mount the file system at /mnt/sst25 */ ret = mount(NULL, "/mnt/sst25", "nxffs", 0, NULL); if (ret < 0) { fdbg("ERROR: Failed to mount the NXFFS volume: %d\n", errno); return ret; } #endif #endif return OK; }
int board_app_initialize(void) { #ifdef HAVE_SST25 FAR struct spi_dev_s *spi; FAR struct mtd_dev_s *mtd; int ret; /* Configure SPI-based devices */ /* Get the SPI port */ syslog(LOG_INFO, "Initializing SPI port %d\n", CONFIG_SPARK_FLASH_SPI); spi = stm32_spibus_initialize(CONFIG_SPARK_FLASH_SPI); if (!spi) { syslog(LOG_ERR, "ERROR: Failed to initialize SPI port %d\n", CONFIG_SPARK_FLASH_SPI); return -ENODEV; } syslog(LOG_INFO, "Successfully initialized SPI port %d\n", CONFIG_SPARK_FLASH_SPI); /* Now bind the SPI interface to the SST25 SPI FLASH driver */ syslog(LOG_INFO, "Bind SPI to the SPI flash driver\n"); mtd = sst25_initialize(spi); if (!mtd) { syslog(LOG_ERR, "ERROR: Failed to bind SPI port %d to the SPI FLASH driver\n", CONFIG_SPARK_FLASH_SPI); } else { syslog(LOG_INFO, "Successfully bound SPI port %d to the SPI FLASH driver\n", CONFIG_SPARK_FLASH_SPI); } #ifndef CONFIG_SPARK_FLASH_PART /* Use the FTL layer to wrap the MTD driver as a block driver */ ret = ftl_initialize(CONFIG_SPARK_FLASH_MINOR, mtd); if (ret < 0) { fdbg("ERROR: Initialize the FTL layer\n"); return ret; } #ifdef CONFIG_SPARK_MOUNT_FLASH char partname[16]; char mntpoint[16]; /* mount -t vfat /dev/mtdblock0 /mnt/p0 */ snprintf(partname, sizeof(partname), "/dev/mtdblock%d", CONFIG_SPARK_FLASH_MINOR); snprintf(mntpoint, sizeof(mntpoint)-1, CONFIG_SPARK_FLASH_MOUNT_POINT, CONFIG_SPARK_FLASH_MINOR); /* Mount the file system at /mnt/pn */ ret = mount(partname, mntpoint, "vfat", 0, NULL); if (ret < 0) { fdbg("ERROR: Failed to mount the FAT volume: %d\n", errno); return ret; } #endif #else { int partno; int partsize; int partoffset; const char *partstring = CONFIG_SPARK_FLASH_PART_LIST; const char *ptr; FAR struct mtd_dev_s *mtd_part; char partname[16]; char mntpoint[16]; /* Now create a partition on the FLASH device */ partno = CONFIG_SPARK_FLASH_MINOR; ptr = partstring; partoffset = 0; while (*ptr != '\0') { /* Get the partition size */ partsize = atoi(ptr); mtd_part = mtd_partition(mtd, partoffset, (partsize >> 2) * 16); partoffset += (partsize >> 2) * 16; /* Use the FTL layer to wrap the MTD driver as a block driver */ ret = ftl_initialize(partno, mtd_part); if (ret < 0) { fdbg("ERROR: Initialize the FTL layer\n"); return ret; } snprintf(partname,sizeof(partname), "/dev/mtdblock%d", partno); snprintf(mntpoint,sizeof(mntpoint)-1, CONFIG_SPARK_FLASH_MOUNT_POINT, partno); /* Mount the file system at /mnt/pn */ ret = mount(partname, mntpoint, "vfat", 0, NULL); if (ret < 0) { fdbg("ERROR: Failed to mount the FAT volume: %d\n", errno); return ret; } /* Update the pointer to point to the next size in the list */ while ((*ptr >= '0') && (*ptr <= '9')) { ptr++; } if (*ptr == ',') { ptr++; } /* Increment the part number */ partno++; } } #endif /* CONFIG_SPARK_FLASH_PART */ #endif /* HAVE_SST25 */ #ifdef HAVE_USBMONITOR /* Start the USB Monitor */ ret = usbmonitor_start(0, NULL); if (ret != OK) { syslog(LOG_ERR, "ERROR: Failed to start USB monitor: %d\n", ret); } #endif return OK; }