rtthread iic读取M24C64的测试程序

115 阅读1分钟

先加软件包

下面两个参数根据实际情况修改

修改board.h里面的引脚定义

添加驱动

/********EEPROM掉电保存*********/
uint8_t IIC2_WriteBuffer_Test[16], IIC2_ReadBuffer_Test[16];
void iic_write_test(void)//iic写
{
    uint16_t i;

    for(i=0; i<16; i++)
        IIC2_WriteBuffer_Test[i] = rand();

    if(at24cxx_write(i2c2_bus, 0, IIC2_WriteBuffer_Test, 16) == RT_EOK)
        rt_kprintf("\r\n EEPROM 24C64 Write Test OK \r\n");
    else
        rt_kprintf("\r\n EEPROM 24C64 Write Test False \r\n");
}

void iic_read_test(void)//iic读
{
    uint16_t i;

    at24cxx_read(i2c2_bus, 0, IIC2_ReadBuffer_Test, 16);

    for(i=0; i<16; i++)
        rt_kprintf("0x%02X  ",IIC2_ReadBuffer_Test[i]);


    if(memcmp(IIC2_WriteBuffer_Test,IIC2_ReadBuffer_Test,16) == 0 ) /* check date */
        rt_kprintf("\r\n EEPROM 24C64 Read Test OK\r\n");
    else
        rt_kprintf("\r\n EEPROM 24C64 Read Test False\r\n");
}

void iic_rw_test(void)
{
    i2c2_bus = at24cxx_init(M24C64_I2C_BUS_NAME,0x50);//必须为0x50

    if (!i2c2_bus)
    {
        rt_kprintf("at24cxx_init %s failed!\n", M24C64_I2C_BUS_NAME);
        return;
    }
    iic_write_test();
    rt_thread_mdelay(200);
    iic_read_test();
}
MSH_CMD_EXPORT(iic_rw_test, test iic M24C64);

void iic_read(int argc, char**argv)//iic读
{
    if(argc != 2)
    {
       rt_kprintf("Only one parameter bytes num can be entered\r\n");
       return;
    }
    else
    {
        uint8_t byte_num = atoi(argv[1]);
        uint8_t testbuffer[byte_num];
        at24cxx_read(i2c2_bus, 0, testbuffer, byte_num);
        rt_kprintf("read EEPROM 24C64:\n");
        for(uint8_t i=0; i<byte_num; i++)
            rt_kprintf("%c",testbuffer[i]);
        rt_kprintf(" read complete\n");
    }
}
MSH_CMD_EXPORT(iic_read, iic M24C64 read: <bytes>);