rt-thread icon indicating copy to clipboard operation
rt-thread copied to clipboard

EEPROM的设备框架

Open xfwangqiang opened this issue 3 years ago • 10 comments

从源码上看,rt-thread还没有一个EEPROM的设备框架,是否考虑新增这个。关于memory的设备目前已经有了设备类型RT_Device_Class_MTD和RT_Device_Class_Block,但从这两个设备的API看来,主要还是面向Flash型的设备。 软件包到是有一个AT24Cxx,可能已经支持市面上很多EEPROM(很多非ATmal的也可以使用),但API的命名上还是以AT24为,在实际的项目中,可能还是容易造成误解,所以建议增加一个EEPROM的设备框架。 `#ifndef RT_EEPROM_H #define RT_EEPROM_H

#include <rtthread.h> #include <rtdevice.h>

struct rt_eeprom_ops { rt_err_t (*init)(rt_device_t dev); rt_err_t (*write)(rt_device_t dev, rt_uint32_t addr, void *data, rt_size_t size); rt_err_t (*read)(rt_device_t dev, rt_uint32_t addr, void *data, rt_size_t size); rt_err_t (*control)(rt_device_t dev, rt_uint32_t cmd, void *arg); rt_err_t (*close)(rt_device_t dev); };

struct rt_eeprom_dev { struct rt_device parent; struct rt_eeprom_ops *ops; };

typedef struct rt_eeprom_dev rt_eeprom_t;

rt_size_t rt_eeprom_write(rt_device_t dev, rt_uint32_t addr, void *data, rt_size_t size); rt_size_t rt_eeprom_read(rt_device_t dev, rt_uint32_t addr, void *data, rt_size_t size); rt_err_t rt_eeprom_device_register(rt_eeprom_t *dev, char *name, void *user_data);

#endif /* RT_EEPROM_H */`

xfwangqiang avatar Jun 26 '22 09:06 xfwangqiang

可以先尝试提交个软件包上来,我们一起看看。

supperthomas avatar Jun 27 '22 00:06 supperthomas

因为涉及到设备类型,需要增加RT_Device_Class_EEPROM,可能按软件包来估计不行,要不我先提PR?

xfwangqiang avatar Jun 27 '22 03:06 xfwangqiang

因为涉及到设备类型,需要增加RT_Device_Class_EEPROM,可能按软件包来估计不行,要不我先提PR?

EEPROM 是不是通过IIC通信的?可否用这个RT_Device_Class_I2CBUS ? 你可以尝试整理下AT24Cxx的API。

supperthomas avatar Jun 27 '22 07:06 supperthomas

也有一些eeprom是spi接口的,不过还是i2c接口的多

ccx-lan avatar Jun 28 '22 06:06 ccx-lan

也有一些eeprom是spi接口的,不过还是i2c接口的多

可以搞个软件包,对接SPI 或者I2C,上层操作应该差不多的吧?提供接口。

supperthomas avatar Jun 28 '22 07:06 supperthomas

如果放在软件包,从驱动往EEPROM的设备框架层注册时,就只能用现有的设备枚举类型,用RT_Device_Class_I2CBUS或是RT_Device_Class_SPI应该都不合适,RT_Device_Class_MTD和RT_Device_Class_Block也好像不合适, 好像RT_Device_Class_MTD比其它几个会合适点,那就用这个吧

xfwangqiang avatar Jun 28 '22 10:06 xfwangqiang

如果放在软件包,从驱动往EEPROM的设备框架层注册时,就只能用现有的设备枚举类型,用RT_Device_Class_I2CBUS或是RT_Device_Class_SPI应该都不合适,RT_Device_Class_MTD和RT_Device_Class_Block也好像不合适, 好像RT_Device_Class_MTD比其它几个会合适点,那就用这个吧

RT_Device_Class_MTD 嗯,就这个比较好

supperthomas avatar Jun 30 '22 09:06 supperthomas

你好 EEPROM 我们这里有一份NASA 的EEFS文件系统,是否可以考虑作为框架? 美国航天局用在卫星上的:我只是整理了一下,但是还没有适配到rt-thread上来 https://github.com/RT-Thread-packages/eefs 如果感兴趣 我可以给你权限。

mysterywolf avatar Aug 11 '22 06:08 mysterywolf

你好 EEPROM 我们这里有一份NASA 的EEFS文件系统,是否可以考虑作为框架? 美国航天局用在卫星上的:我只是整理了一下,但是还没有适配到rt-thread上来 https://github.com/RT-Thread-packages/eefs 如果感兴趣 我可以给你权限。

我看了下这个仓库,通过readme了解来看,这个应该是个文件系统,应该跟FatFS或LitteFS一样,只要是个MTD的设备就可以挂载,是不是应该跟EEPROM解耦才好?

xfwangqiang avatar Aug 12 '22 07:08 xfwangqiang

是的!是得先有个EEPROM设备框架才行

mysterywolf avatar Aug 13 '22 02:08 mysterywolf