硬件介绍
- RT-Thread版本:V4.1.0
- 软件包名称:at24cxx
- MCU型号:AT32F407VET7
- EEPROM型号:AT24C16
使用说明
1、使用menuconfig将软件包添加进入工程,路径如下所示。
2、把IIC总线打开,这里使用软件IIC,如果已经打开了就不用再次打开,IIC所用的引脚暂时先不管。
3、然后编译工程。
4、编译完成以后,打开工程,可以发现IIC驱动已经被添加进来了,at24cxx软件包也添加进来了。
5、然后我们进入at24cxx.h文件,修改我们EEPROM型号。我这里是AT24C6。
6、然后我们进入rtconfig.h文件里面,修改我们的IIC引脚。默认是22和23,这里我直接使用GET_PIN来获取引脚,但是这种方式的缺点就是每次menuconfig以后都要去修改一次,不过我也不是经常去menuconfig,测试时就暂时先这么改吧。
7、然后我们将工程编译一下,没有错误,下载到板子上。在shell中输入at24cxx,然后回车,就会弹出几个命令。分别是probe,read,write。
8、要想使用read/write命令,要先使用probe命令对AT24CXX进行初始化。于是输入下面的命令进行初始化。
9、然后就可以使用at24cxx read 和at24cxx write命令进行读写了。当然这个命令做得太简单了,只是读写都是从0地址开始,读写指定的位置的。而我想读写任意位置的数据,因此需要对命令进行改造一下。经过修改后的函数如下,这样我就可以读写任意位置的数据了。我们来演示一下。
static uint8_t opt_buffer[2048];
void at24cxx(int argc, char *argv[])
{
static at24cxx_device_t dev = RT_NULL;
uint16_t opt_addr, opt_len;
if (argc > 1)
{
if (!strcmp(argv[1], "probe"))
{
if (argc > 2)
{
/* initialize the sensor when first probe */
if (!dev || strcmp(dev->i2c->parent.parent.name, argv[2]))
{
/* deinit the old device */
if (dev)
{
at24cxx_deinit(dev);
}
dev = at24cxx_init(argv[2], atoi(argv[3]));
}
}
else
{
rt_kprintf("at24cxx probe <dev_name> <AddrInput> - probe sensor by given name\n");