存江 2023-01-08 21:01 采纳率: 33.3%
浏览 75
已结题

树莓派pico I2C读写AT24C02

问题遇到的现象和发生背景

我正在学习pico,用I2C读写AT24C02时遇到一些问题
我希望在地址0x00写入数据0x12,代码如下,但用串口助手读出来的数据却不一样
有人用过树莓派pico的sdk吗?
AT24C02模块是在淘宝买的,三个引脚接地,写地址应当是0xA0,读地址应当是A1。

代码
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include "pico/binary_info.h"

// I2C defines
// This example will use I2C0 on GPIO8 (SDA) and GPIO9 (SCL) running at 400KHz.
// Pins can be changed, see the GPIO function select table in the datasheet for information on GPIO assignments
#define I2C_PORT i2c0
#define I2C_SDA 8
#define I2C_SCL 9

#define ADDR_W 0xA0 //AT24写地址
#define ADDR_R 0xA1 //AT24读地址


int main()
{
    stdio_init_all();

    // I2C Initialisation. Using it at 400Khz.
    i2c_init(I2C_PORT, 400*1000);
    
    gpio_set_function(I2C_SDA, GPIO_FUNC_I2C);
    gpio_set_function(I2C_SCL, GPIO_FUNC_I2C);
    gpio_pull_up(I2C_SDA);
    gpio_pull_up(I2C_SCL);

    //bi_decl(bi_2pins_with_func(I2C_SDA,I2C_SCL,GPIO_FUNC_I2C));

    uint8_t buf[2]={0x00,0x12};
    uint8_t buffer[1];
    uint8_t reg_addr=0x00;

    i2c_write_blocking(I2C_PORT,ADDR_W,buf,2,false);//写入数据


    printf("completed");
    //puts("Hello, world!");
    while (1)
    {


        i2c_write_blocking(I2C_PORT,ADDR_W,®_addr,1,true);//写入要读取的地址
        i2c_read_blocking(I2C_PORT,ADDR_R,buffer,1,false);//读取数据

        printf("now output results\n");
        printf("%d\n",buffer[0]);
        printf("completed\n");
        sleep_ms(1000);
    }

    return 0;
}


  • 写回答

4条回答 默认 最新

  • heart_6662 2023-01-08 23:18
    关注
    获得7.50元问题酬金

    你是否已经检查过 AT24C02 的配置是否正确?比如说,内存地址是否是 0x00,写保护设置是否正确等。

    另外,你可以尝试在写入数据之后,立即读取该数据,看看是否和你写入的数据一致。这将有助于排除写入数据失败的可能性。

    你也可以使用串口助手打印出 I2C 传输的日志信息,看看是否有其他的错误信息。


    如果以上方法都没有帮助,可以尝试使用其他的

    I2C 工具(比如说 i2c-tools)来测试,这将有助于排除硬件问题。

    此外,你可以尝试使用 i2c_read_blocking() 和 i2c_write_blocking() 函数的返回值来判断 I2C 传输是否成功。如果函数返回 -1,则表明传输失败。你可以在出现问题时,打印出这些函数的返回值,以帮助排查问题。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月16日
  • 创建了问题 1月8日

悬赏问题

  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算