|
@@ -97,7 +97,7 @@ static rt_err_t rt_sfud_control(rt_device_t dev, int cmd, void *args) {
|
|
static rt_size_t rt_sfud_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size) {
|
|
static rt_size_t rt_sfud_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size) {
|
|
struct spi_flash_device *rtt_dev = (struct spi_flash_device *) (dev->user_data);
|
|
struct spi_flash_device *rtt_dev = (struct spi_flash_device *) (dev->user_data);
|
|
sfud_flash *sfud_dev = (sfud_flash *) (rtt_dev->user_data);
|
|
sfud_flash *sfud_dev = (sfud_flash *) (rtt_dev->user_data);
|
|
- /* change the block device¡¯s logic address to physical address */
|
|
|
|
|
|
+ /* change the block device's logic address to physical address */
|
|
rt_off_t phy_pos = pos * rtt_dev->geometry.bytes_per_sector;
|
|
rt_off_t phy_pos = pos * rtt_dev->geometry.bytes_per_sector;
|
|
rt_size_t phy_size = size * rtt_dev->geometry.bytes_per_sector;
|
|
rt_size_t phy_size = size * rtt_dev->geometry.bytes_per_sector;
|
|
|
|
|
|
@@ -111,7 +111,7 @@ static rt_size_t rt_sfud_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_si
|
|
static rt_size_t rt_sfud_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size) {
|
|
static rt_size_t rt_sfud_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size) {
|
|
struct spi_flash_device *rtt_dev = (struct spi_flash_device *) (dev->user_data);
|
|
struct spi_flash_device *rtt_dev = (struct spi_flash_device *) (dev->user_data);
|
|
sfud_flash *sfud_dev = (sfud_flash *) (rtt_dev->user_data);
|
|
sfud_flash *sfud_dev = (sfud_flash *) (rtt_dev->user_data);
|
|
- /* change the block device¡¯s logic address to physical address */
|
|
|
|
|
|
+ /* change the block device's logic address to physical address */
|
|
rt_off_t phy_pos = pos * rtt_dev->geometry.bytes_per_sector;
|
|
rt_off_t phy_pos = pos * rtt_dev->geometry.bytes_per_sector;
|
|
rt_size_t phy_size = size * rtt_dev->geometry.bytes_per_sector;
|
|
rt_size_t phy_size = size * rtt_dev->geometry.bytes_per_sector;
|
|
|
|
|
|
@@ -298,6 +298,7 @@ rt_spi_flash_device_t rt_sfud_flash_probe(const char *spi_flash_dev_name, const
|
|
sfud_dev->name = spi_flash_dev_name_bak;
|
|
sfud_dev->name = spi_flash_dev_name_bak;
|
|
/* accessed each other */
|
|
/* accessed each other */
|
|
rtt_dev->user_data = sfud_dev;
|
|
rtt_dev->user_data = sfud_dev;
|
|
|
|
+ rtt_dev->rt_spi_device->user_data = rtt_dev;
|
|
rtt_dev->flash_device.user_data = rtt_dev;
|
|
rtt_dev->flash_device.user_data = rtt_dev;
|
|
sfud_dev->user_data = rtt_dev;
|
|
sfud_dev->user_data = rtt_dev;
|
|
/* initialize SFUD device */
|
|
/* initialize SFUD device */
|
|
@@ -606,6 +607,35 @@ static void sf(uint8_t argc, char **argv) {
|
|
}
|
|
}
|
|
MSH_CMD_EXPORT(sf, SPI Flash operate.);
|
|
MSH_CMD_EXPORT(sf, SPI Flash operate.);
|
|
|
|
|
|
|
|
+sfud_flash_t rt_sfud_flash_find(const char *spi_dev_name)
|
|
|
|
+{
|
|
|
|
+ rt_spi_flash_device_t rtt_dev = RT_NULL;
|
|
|
|
+ struct rt_spi_device *rt_spi_device = RT_NULL;
|
|
|
|
+ sfud_flash_t sfud_dev = RT_NULL;
|
|
|
|
+
|
|
|
|
+ rt_spi_device = (struct rt_spi_device *) rt_device_find(spi_dev_name);
|
|
|
|
+ if (rt_spi_device == RT_NULL || rt_spi_device->parent.type != RT_Device_Class_SPIDevice)
|
|
|
|
+ {
|
|
|
|
+ rt_kprintf("ERROR: SPI device %s not found!\n", spi_dev_name);
|
|
|
|
+ goto error;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ rtt_dev = (rt_spi_flash_device_t)(rt_spi_device->user_data);
|
|
|
|
+ if (rtt_dev && rtt_dev->user_data)
|
|
|
|
+ {
|
|
|
|
+ sfud_dev = (sfud_flash_t)(rtt_dev->user_data);
|
|
|
|
+ return sfud_dev;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ rt_kprintf("ERROR: SFUD flash device not found!\n");
|
|
|
|
+ goto error;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+error:
|
|
|
|
+ return RT_NULL;
|
|
|
|
+}
|
|
|
|
+
|
|
#endif /* defined(RT_USING_FINSH) && defined(FINSH_USING_MSH) */
|
|
#endif /* defined(RT_USING_FINSH) && defined(FINSH_USING_MSH) */
|
|
|
|
|
|
#endif /* RT_USING_SFUD */
|
|
#endif /* RT_USING_SFUD */
|