主题:[求助] 阻塞式读取SPI和I2c

  共有44445人关注过本帖    
帅哥哟,离线,有人找我吗?
barrypp
1楼 信息 | 搜索 | 邮箱


加好友 发短信
[求助] 阻塞式读取SPI和I2c  发帖心情 Post By:2016-11-28 15:45:00   [只看该作者]

请问, 针对ESM3354 Linux环境,有没有阻塞式读取SPI、I2C数据的方法。类似串口上的阻塞式读取。


  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lgz
2楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-11-28 17:07:00   [只看该作者]

你好,因为spi和i2c都是主从设备的模式,你在应用程序里面进行读写,3354上的spi和i2c都会马上进行数据读写,读写完设置的数据或者是检测到总线错误后才会返回,这两种总线的阻塞非阻塞读写没有意义,函数返回的时候肯定是完成了读写或者总线出错(i2c有应答信号检测),而且作为主设备会控制时钟信号,不会出现串口那种没有预期的等待数据的状态。你所说的阻塞读取是想实现什么

  单帖管理 | 引用 | 回复 回到顶部
barrypp
3楼


  发帖心情 Post By:2016-11-28 17:21:00   [只看该作者]

如果当前从设备没有发送数据,而我在linux里调用读取函数,那这个函数是立即返回还是等待?





  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lgz
4楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-11-28 17:26:00   [只看该作者]

这两个总线都是有时钟信号同步的,3354上的作为主设备生成时钟信号并且只在时钟信号上进行采样,这个过程与从设备是否发送数据无关,对于i2c拉低时钟信号的情况,会等到所有数据接收完成后函数才会返回
[此贴子已经被作者于2016-11-28 17:33:24编辑过]

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
barrypp
5楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2016-11-28 17:40:00   [只看该作者]

在多线程中,读写操作可以同时进行么?


另外,如何设置i2c的时钟频率

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lgz
6楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-11-28 18:05:00   [只看该作者]

你好,多线程中请做好线程的同步互斥管理,不要同时读写

i2c驱动没有引出时钟频率设置函数,i2c设备只分标准模式和高速模式,我们现在的配置是高速模式,如果你的设备支持高速模式那就是可以进行通信的,高速模式应该是兼容标准模式的,如果你的设备是标准模式的设备并且没法和我们主板通信,我们可以给你配置成工作于标准模式的

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
barrypp
7楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2016-11-28 19:32:00   [只看该作者]

明天我试试吧,那个设备最高只支持15khz时钟,并且它似乎没有寄存器地址这个概念,不知道能不能通信

另外linux核心板能作为从设备么?

  单帖管理 | 引用 | 回复 回到顶部
帅哥,在线噢!
hzc
8楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-11-28 19:41:00   [只看该作者]

你好,i2c只有两种传输速度,标准的是100Kbps,快速模式为400Kbps。默认使用的是快速模式。
核心板的I2C只能做为主控端。

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
barrypp
9楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2016-11-29 12:22:00   [只看该作者]

试了试,不行。老是返回remote io error

因此,要如何修改i2c时钟速率
[此贴子已经被作者于2016-11-29 12:22:53编辑过]

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lgz
10楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-11-29 12:58:00   [只看该作者]

你好,请先确定你的设备的i2c地址,如果地址不对,i2c设备是不会返回应答信号的,应用程序就会返回remote io error了

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
barrypp
11楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2016-11-29 13:15:00   [只看该作者]

设备说明书里写的是0x80,这个数值可以直接赋值给i2c_msg结构体中的addr吧

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lgz
12楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-11-29 13:32:00   [只看该作者]

是的,应用程序可以参考我们光盘中的I2C扩展模块的应用,另外不要操作I2C复用的GPIO(26、27)

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
barrypp
13楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2016-11-29 13:46:00   [只看该作者]

那个示例程序已经看过了。

关键是如何改时钟频率?是简单的设置个参数就可以了,还是需要重刷固件?

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lgz
14楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-11-29 13:51:00   [只看该作者]

要重新烧写固件,我一会邮件发给你

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
barrypp
15楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2016-11-29 13:57:00   [只看该作者]

如果要重刷固件的话,那我还是先试试spi算了,那个外设倒也支持spi

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lgz
16楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-11-29 14:13:00   [只看该作者]

好的,spi可以设置时钟频率,esm3354最高为48MHz

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
barrypp
17楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2016-11-29 15:54:00   [只看该作者]

esm3354最大支持多少个中断呢?



  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lgz
18楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-11-29 16:01:00   [只看该作者]

2个外部中断,可以查看dev文件夹下面的设备节点

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
barrypp
19楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2016-11-29 16:41:00   [只看该作者]

如果要增加外部中断的数量的话,有哪些办法呢?

  单帖管理 | 引用 | 回复 回到顶部
帅哥,在线噢!
hzc
20楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-11-29 18:00:00   [只看该作者]

你好,标准的板卡只支持两路外部中断,请问需要多路中断来实现什么功能呢?

  单帖管理 | 引用 | 回复 回到顶部

返回首页

[求助] 阻塞式读取SPI和I2c

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: