我正在学习pico,用I2C读写AT24C02时遇到一些问题
我希望在地址0x00写入数据0x12,代码如下,但用串口助手读出来的数据却不一样
有人用过树莓派pico的sdk吗?
AT24C02模块是在淘宝买的,三个引脚接地,写地址应当是0xA0,读地址应当是A1。
#include
#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;
}
你是否已经检查过 AT24C02 的配置是否正确?比如说,内存地址是否是 0x00,写保护设置是否正确等。
另外,你可以尝试在写入数据之后,立即读取该数据,看看是否和你写入的数据一致。这将有助于排除写入数据失败的可能性。
你也可以使用串口助手打印出 I2C 传输的日志信息,看看是否有其他的错误信息。
如果以上方法都没有帮助,可以尝试使用其他的
I2C 工具(比如说 i2c-tools)来测试,这将有助于排除硬件问题。
此外,你可以尝试使用 i2c_read_blocking() 和 i2c_write_blocking() 函数的返回值来判断 I2C 传输是否成功。如果函数返回 -1,则表明传输失败。你可以在出现问题时,打印出这些函数的返回值,以帮助排查问题。
首先,我们应该检查一下我们在程序中给出的AT24C02写入地址和读地址是否正确,两个都是0xA0,如果不正确,先手动去查阅一下AT24C02的规格书,再去改正它。
其次,可以尝试添加i2c_start/i2c_stop函数来解决读写AT24C02的问题,不仅如此,也可以增加一些延迟来解决响应不及时的问题。
最后,如果仍然无法解决读写2C02的问题,你可以尝试去物联网相关的论坛或者技术社区寻求帮助,也可以尝试自己调试,熟悉I2C协议和AT24C02的操作流程。
你可以尝试使用pico sdk提供的I2C库函数来读写AT24C02来确保代码的正确性。另外,你可以检查一下您的AT24C02模块是否已经正确接好,确保地址和引脚接口是否正确。
关于pico中的ic2的读写操作,可以参考一些资料,我这里给你找了一些,对你应该有帮助的,都是具体的操作实现实例。你可以照着一步一步实现即可。希望对你解决当前的问题能有所帮助。
资料链接如下:
(1)https://blog.csdn.net/xiaoqi976633690/article/details/123804128
(2)PICO AHT10温湿度传感器i2C读取实例:
https://my.oschina.net/VenusV/blog/5583546