社区导航

 

搜索
查看: 568|回复: 5
打印 上一主题 下一主题

[分享] 基于STM8S-DISCOVERY的X-NUCLEO-IKS01A3传感器驱动移植

[复制链接]

61

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

跳转到指定楼层
楼主
发表于 2019-7-30 17:40 | 只看该作者 |只看大图 |倒序浏览 |阅读模式
本帖最后由 sylar^z 于 2019-7-30 17:43 编辑

  本次移植X-NUCLEO-IKS01A3传感器驱动是基于STM8S-DISCOVERY开发板的,使用了官方的en.x-cube-mems1.zip资源包。传感器功能通过编译选项逐个开启,开启标志位于iks01a3_conf。h文件中。为了便于查看数据,接入了OLED显示屏,用来显示采集到的传感器数据。

       本次在STM8S-DISCOVERY上移植驱动采用模拟I2C用于通讯。模拟I2C使用了PC6作为SDAPC7作为SCL。这两个引脚与一组电源和地相邻,便于接线。


在调试过程中,LSM6DSOLIS2DW12LIS2MDLHTS221LPS22HH五个传感器都比较顺利的调通,得到了传感器数据。而STTS751传感器移植无法通讯,在主芯片发送地址信息后,始终都是NACK

  之前查看了STTS751的手册, STTS751使用的SMBus协议。SMBus协议是IntelDuracell共同制订笔记本电脑所用的智能型电池时所研发的接口,参考自I2C,与I2C有交集的部分,也有部分区别,在一般情况下,可以使用I2C协议的接口来进行通讯。区别说明参看2楼。

       1。 首先怀疑的是时序问题,通过逻辑分析仪分析发现当前的频率大于160K了,超过了SMBus10K-100K的范围。调整了一下延时,频率调整到90K左右,还是无法通讯。

       2。 对比模拟I2C与硬件I2C,发现模拟I2C的时序不是准确频率的时序,会时快时慢。由于STM8S-DISCOVERY频率较低。所以将模拟IIC移植到之前已调试过的NUCLEO-L011K4上,同样无法通讯。使用systick定时产生中断,模拟10KI2C信号进行对比(同时测试了模拟引脚片上上拉和不上拉)。两者时序基本相同,仍然无法通讯。时序对比图如下:

 

        3。 然后考虑是否是I2C信号通过ST2378E后电平信号不能完全满足SMBus协议。就直接将模拟I2C连接到I2C1JP7/JP8I2C_SDA/I2C_SCL)上,通讯成功,可以采集数据了。

说明:红色效方块是JP7/JP8的跳线帽;长方形小方框是I2C及电源地的接口;

  这一点非常奇怪,上面2中的对比试验,所有接线都是相同的,都在同样的两个引脚输出。唯一的区别就是一个使用硬件I2C,一个使用模拟I2C。硬件I2C可以通讯,而模拟I2C不行。

    接下去上图:

           驱动HTS221,采集数据。

    驱动LPS22HH,采集数据。

 

    驱动STTS751,采集数据。

 

    驱动LSM6DSO,采集数据。

    驱动LIS2DW12,采集数据。

 

    驱动LIS2MDL,采集数据。

 

 

源码:  STM8S105C6-Board-iarv3104-OLED-IKS01A3(fin-v1.0).rar (10.88 MB, 下载次数: 24)

 

来源:EEWorld ST传感器与低功耗无线技术论坛板块,转载请附上链接


61

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

沙发
 楼主| 发表于 2019-7-30 17:42 | 只看该作者

I2CSMBus之间的差异 

 

电气特性差异:

1. 逻辑电平定义

       I2CHi/Lo逻辑电平有两种认定法:相对认定与绝对认定,相对认定是依据Vdd的电压来决定,Hi0。7Vdd,Lo0.3Vdd,绝对认定则与TTL 准位认定相同,直接指定Hi/Li电压,Hi3。0VLo1。5V。相对的SMBus只有绝对认定,且电平与I2C有异,Hi2.1V,Lo0.8V,与I2C不全然吻合但也算部分交集。

       SMBus后来增订一套更低电压的电平认定,Hi1。4VLo0。6V,这是为了让运用SMBus的装置能更省成本的作法。

 

2. 限流

       由于SMBus一开始就是运用在笔记本电脑内,所以省电的表现优于I2C,只需100uA就能维持工作,I2C却要到3mA同样的低用电特性也反应在漏电流(Leakage Current)的要求上,I2C最大的漏电流为10uA,SMBus1uA,但是1uA似乎过度严苛,使运用SMBus的装置在验证测试时耗费过多的成本与心力,因此之后的SMBus 1.1版放宽了漏电流上限,最高可至5uA

 

3。 其他相关限制

       I2C有线路电容的限制,SMBus却没有,但也有相类似的配套规范,即是电平下拉时的电流限制,当SMBus的集电极开路Pin导通而使线路接地时,流经接地的电流不能高于350uA,另上电流(即相同的集电极开路Pin开路时)也一样有规范,最小不低于100uA,最高也是不破350uA的。

 

时序差别

1。 运作频率

       I2C此方面相当宽裕,最低频可至0Hz(直流状态,等于时间暂停),高可至100kHzStandard Mode)、400kHzFast Mode)、乃至3.4MHzHigh Speed Mode),相对的SMBus就很局限,最慢不慢于10kHz,最快不快于100kHz。很明显的,I2CSMBus的交集运作频率即是10kHz100kHz间。

 

2. 数据保持时间(Data Hold Time

       SMBus在数据传输后还有数据保持时间的要求,SMBus 规定SMBCLK线路的电平下降后,SMBDAT上的数据必须持续保留300nS,但I2C 却没有对此有相同的强制要求。

 

3. 恢复时间

       SMBus对接口被重置(Reset)后的恢复时间(Timeout)也有要求,一般而言是35mS,I2C这方面亦无约束,可以任意延长时间。相同的SMBus也要求无论是在主控端(Master)或受控端(Slave),其频率处于Lo电平时的最长持续时间不得超越限制,以免因为长时间处在Lo准位,而致收发两端时序脱轨(失去同步,造成后续误动作)。

 

4. [已妥][未妥]机制的强制性差别

       I2C并没有强制规定接收端非要做出响应,而SMBus上是不允许接收端在接收地址信息后却不发出回应,每次都要回应。



809

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

板凳
发表于 2019-7-30 18:48 | 只看该作者

学习了,谢谢分享!



1121

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

4
发表于 2019-7-30 19:29 | 只看该作者

在SMBus基础上又发展出一个PMBus.

点评

度了一个,PMBus是数字电源管理协议。PMBus用了指令的通讯形式,总线更像一个载体。  详情 回复 发表于 2019-8-2 08:26


61

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

5
 楼主| 发表于 2019-8-2 08:26 | 只看该作者
yang_alex 发表于 2019-7-30 19:29 在SMBus基础上又发展出一个PMBus.

度了一个,PMBus是数字电源管理协议。PMBus用了指令的通讯形式,总线更像一个载体。

点评

I2C  SMBus 不也是指令形式吗?只不过PMBus更细致罢了。  详情 回复 发表于 2019-8-2 11:00


1121

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

6
发表于 2019-8-2 11:00 | 只看该作者
sylar^z 发表于 2019-8-2 08:26 度了一个,PMBus是数字电源管理协议。PMBus用了指令的通讯形式,总线更像一个载体。

I2C  SMBus 不也是指令形式吗?只不过PMBus更细致罢了。



您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( )

GMT+8, 2019-9-16 10:05 , Processed in 0.193489 second(s), 19 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表
万彩彩票开户投注注册 北京赛车pk10计划 北京赛车pk10计划 北京赛车pk10计划 北京赛车pk10开奖 北京赛车pk10计划 澳彩网彩票注册开户平台 万彩彩票开户投注注册 我赢彩票注册开户投注 北京赛车pk10开奖