Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
[分享]使用RT-Thread的I2C总线读写EEPROM或铁电(FRAM)
发布于 2014-04-02 11:05:25 浏览:12021
订阅该版
上周刚好调I2C的驱动,所以写了一段测试小程序,分享一下。 ```c #include
#include
static const char * i2c_bus_device_name = "i2c1"; static const rt_uint8_t eeprom_addr = 0x50; /* 1010A2A1A0 - R/W */ rt_err_t i2c_test(void) { struct rt_i2c_bus_device * i2c_device; struct rt_i2c_msg msgs[2]; rt_uint8_t buffer1[2]; rt_uint8_t buffer2[2]; rt_size_t i; i2c_device = rt_i2c_bus_device_find(i2c_bus_device_name); if(i2c_device == RT_NULL) { rt_kprintf("i2c bus device %s not found! ", i2c_bus_device_name); return -RT_ENOSYS; } //step 1: read out. buffer1[0] = 0; msgs[0].addr = eeprom_addr; msgs[0].flags = RT_I2C_WR; /* Write to slave */ msgs[0].buf = buffer1; /* eeprom offset. */ msgs[0].len = 1; msgs[1].addr = eeprom_addr; msgs[1].flags = RT_I2C_RD; /* Read from slave */ msgs[1].buf = buffer2; msgs[1].len = sizeof(buffer2); if( rt_i2c_transfer(i2c_device, msgs, 2) != 2 ) { rt_kprintf("read EEPROM fail! "); } rt_kprintf("read EEPROM at I2C address: 0x%02X ", eeprom_addr); rt_kprintf("0x0000: "); for(i=0; i
FINSH_FUNCTION_EXPORT(i2c_test, i2c_test); #endif // RT_USING_FINSH ```
查看更多
17
个回答
默认排序
按发布时间排序
rockleerocklee
2014-04-02
这家伙很懒,什么也没写!
好,厉害呀,正好需要。
rockleerocklee
2014-04-20
这家伙很懒,什么也没写!
为什么没注册设备而直接寻找设备。
石头
2014-04-29
这家伙很懒,什么也没写!
你好。看了你的这个模块,感觉和RT-Thread的驱动有点不同;驱动里面用到的读写应该是i2c_bus_device_read和i2c_bus_device_write,而你用的是更加底层的模块。你为什么不直接用封装好的驱动模块进行读写?在rt_i2c_transfer上面应该还有两层封装啊。而rt_i2c_transfer里面调用的master_xfer则是要用户实现的最底层的部份。这样理解对吗?
aozima
2014-04-29
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
master_xfer是硬件驱动,跟具体硬件相关,每个硬件要单独编写。 rt_i2c_transfer是I2C的基本操作接口。 i2c_bus_device_read/write是基于rt_i2c_transfer封装的更易用的API。 根据实际需要合理选择。
石头
2014-04-29
这家伙很懒,什么也没写!
你的这种使用方法没有用到RT-Thread的设备管理吧。相当于裸机的形式咯?
bernard
2014-04-29
这家伙很懒,什么也没写!
RT-Thread的设备接口并不是说一定要使用device_read/write等啊,IIC、SPI都采用了另外一种形式,要具备灵活性
石头
2014-04-29
这家伙很懒,什么也没写!
>RT-Thread的设备接口并不是说一定要使用device_read/write等啊,IIC、SPI都采用了另外一种形式,要具备灵活性 --- 这样做确实是具备了灵活性,但是同样带来的是不一致性,为什么不将各个接口统一起来呢。这样使用就更加方便了。从的这段代码我看到了查找设备;但是并未看到通过设备调用接口的部份,这样的话注册设备的意义在哪里?我参加工作也就两年,以前也就移植UcCos玩了下,并没有深入,这次有机会接触了下RT-Thread,没有深入的接触过其他操作系统,不好对RT-Thread做深入评价;但是就我目前来说,这款操作系统用起来还是很忙好用的,其中的Finsh简直就是调试神器啊。目前能简单的应用,我目前想把驱动好好的琢磨下;这样以后使用起来会更加的方便。很感谢各位大牛的解答。
bernard
2014-04-29
这家伙很懒,什么也没写!
不明白为啥现在论坛上老是希望点名呢,大家一起交流交流下即可 [s:170]
石头
2014-04-29
这家伙很懒,什么也没写!
>不明白为啥现在论坛上老是希望点名呢,大家一起交流交流下即可 [s:170] --- 对不起。我全部删掉了。很希望和你们交流下。对你们的操作系统很是感兴趣。能帮我解释下上面的问题吗?
bernard
2014-04-29
这家伙很懒,什么也没写!
RT-Thread本身初期提供的是rt_device_read/write/open/close/control的API,但是显然,这些API并不可能代表所有的设备操作,特别是一些设备可能是基于另外一些外设(例如基于SPI Flash的块设备,块设备依然是read/write等接口,但是SPI设备则完全不需要) 所以这中间还有一类设备,它的接口也相对统一、固定,但是是由上层固定的组件或其他逻辑层的设备驱动来使用,所以这个时候依然使用device_read/write已经失去意义了。但设备注册依然有好处,注册设备后,可以根据设备名称来查找到相应的设备,然后进行访问。
撰写答案
登录
注册新账号
关注者
0
被浏览
12k
关于作者
aozima
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
提问
92
回答
4479
被采纳
380
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部