BMP280:数据表
文档修订1.12
文档发布日期7月11日,2014年
文件编号BST-BMP280-DS001-10
技术参考代码(s)0 273 300 354 0273 300 391,0273 300 416
备注:本文档中的数据如有更改,恕不另行通知。产品照片和图片仅供演示目的,可能不同实际产品的外观。
BMP280 数字压力传感器(DIGITAL PRESSURE SENSOR)
关键参数
压力范围 300…1100 hPa (equiv. + 9000…-500高于/低于海平面)
LGA metal-lid 包有
引脚规格:2.0× 2.5 毫米, 高度:0.95毫米
± 0.12 hPa equiv.± 1 m 相对精度
(950…1050 hpa @25°C)
绝对精度 ± 1 hPa typ。
(950…1050 hPa 0…+ 40°C)
温度系数补偿 1.5 Pa / K,equiv. 12.6cm/ K
(25…40°C @900hPa)
I2C(3.4兆赫 )数字接口
和 4线,10 MHz) SPI(3 电流消耗 采样率2.7μA @ 1 Hz
温度范围 -40…+ 85°C
通过无铅认证无卤
标准一级湿度感应
典型的应用
?增强GPS导航(例如time-to-first-fix改进、船位推算,斜率检测)
?室内导航(地板检测、电梯检测)
?户外导航、休闲和运动的应用程序
?天气预报
?医疗保健应用程序(如肺量测定法)
?垂直速度指示(如上升/下沉速度)
目标设备
?手机,如手机、平板电脑、GPS设备 ?导航系统
?家里气象站 便携式医疗设备 飞行玩具 手表
一般的描述
罗伯特?博世是世界上为压力传感器在汽车和消费市场的领导者应用程序。博世的专有APSM
MEMS(先进的多孔硅膜)生产过程完全是CMOS兼容,并允许一个密封的密封腔的全硅的过程。BMP280基于博世的压阻压力传感器技术EMC稳健性高、准确度高、线性和长期稳定性。
BMP280是绝对气压传感器特别是在易变环境中的应用。传感器模块是装在一个非常紧凑的栅格阵列允许电池@1Hz2.7μA 毫米包高度。它的小尺寸和低功耗的0.95和2毫米2.52.0×包的封装只有 封装,
中的实现驱动的设备,如手机、GPS模块或手表。
广泛采用BMP180继承者,BMP280提供高性能需要精确的压力测量的应用程序。BMP280运行低噪音,支持新过滤器模式和SPI接口在一个BMP180引脚小于63%。
BMP180TCO在同一时间。
新兴的室内导航的应用、医疗保健以及GPS细化要求相对精度高和低的和BMP280是适合应用与如地板检测,因为传感器特性优良,相对的hPa精度±0.12,相当于±1米高度的差异。非常低的补偿温度系数(TCO) 1.5 Pa / K的转化为只有12.6厘米/ K的温度漂移。
BMP280 各项性能指标
封装2.0 × 2.5 mm
最低电压 1.71V IO口最低电压 1.20V
电流损耗(3Pa均方根噪声) 1.2uA 均方根噪声 1.3 Pa
压力分辨率 1.6Pa
温度分辨率 0.01 。C
接口 I2C & SPI(3和4线,模式“00”和“11”) 测量模式 P&T, forced or periodic
测量速率 可达 175Hz 筛选器选项 五个带宽
1. 设计规格
?全电压范围内所有的值是有效的
?最小/最大值都给出完整的准确温度范围
?最大值/最小值的漂移,补偿和温度系数是±3在运行中
?电流和状态机的典型值确定计时25°C
?最小/最大电流的值确定使用区域很多在温度范围完成
?最小/最大值状态机的计时决心使用范围很多在0…+ 65°C的温度范围
规范表分成BMP280压力和温度的一部分
表2:参数规范
参数 标志 条件 最小值 典型值 最大值 单位
。+85 C
-40 25 操作温度范围 TA 操作+65 0
满精度
Hpa 1100 工作压力范围 P
满精度 300
V 3.6 1.8 传感器电源电压 V_DD 波动最大值50mV 1.71
V 1.2 1.8 3.6 V_IODD 接口电源电压
uA 2.8 4.2 电源电流 I_DDLP 1赫兹强制模式中,压力 和温度,最低的能量
uA 峰值电流 I_peak 压力测量期间 720 1100
电流在温度测量 I_DDT uA 325
0.3 0.1 uA I_DDSL 睡眠电流 25。C
0.2 25(待机电流不活跃的 I_DDSB 。C 0.5 uA
2) 时期正常模式 +-0.12 700 … 900hPaA_rel hPa 相对精读的压力值m
25 . . . 40 °C V_DD = 3V +-1.0
VDD = VDDIO = 1.8 V1典型值,VDD = VDDIO = 3.6 V最大价值。
典型值2。VDD = VDDIO = 3.6 V最大价值VDD = VDDIO = 1.8 V, 3目标值
温度补偿系数 TCO 900hPa25 . . . 40 °C +1.5 Pa/K
cm/K 12.6
Pa/K 300 . . . 1100 hPa-20 . . . 0 °C 绝对压力精度 +1.7 A P ext
300 . . . 1100 hPa0 . . . 65 °C Pa/K A P full +1.0
在超高分辨率的输出 R_H hPa 0.0016 压力
R_T 温度 数据分辨率模式 0.01 4 。
C
V p,full 完整的带宽,超高分辨率 Pa 0.2 噪声压力
最低带宽、超高分辨率cm 1.7 V p,filtered
绝度温度精读 A T °C ±0.5 25 °C
±1.0 °C 0 . . . +65 °C
PSRR (DC) ±PSRR 0.005 Pa/Mv 完整的V DD 范围?长期稳定性 hPa P_stab 个月 1.0 12最小焊接高度hPa 50μm Solder drifts 0.5 +2
时间先沟通后 V DD > 1.58 V 启动时间 2
ms
t startup
0.65 V DDIO > V
和
osrs_t = osrs_p = 1 可能的采样率 f sample 157 182 tdp Hz
%
待机时间的准确性 +25 +5 ?t standby
(绝对最大额定参数表3中提供。绝对最大额定参数 )
表3:绝对最大额定参数
最小值 参数 最大值 单位 条件
提供接口电压 V DD and V DDIO 接口 4.25 V -0.3
V_IODD+0.3 -0.3 V 所有接口电压
65% rel. H.
-45 +85 C 。
储存温度 ≤ 0 压力hPa 20000
静电释放(ESD )KV
HBM +-2 在任何接口接口类型
功能性说明BMP280由压阻压力传感元件和一个混合信号集成电路。ASIC 执行A / D转换,并提供转换结果通过数字接口和传感器特定的补偿数据。
测量时间和能耗通过选择从大量的可能可以适应对于精度要求, BMP280为设计师提供最高的灵活性,的组合传感器的设置。
BMP280可以在三种权力模式操作(见章节 3.6): ? 睡眠模式 正常模式 ? 强制模式 ?正常模式由一个自动不断循环在活跃的测量周期和不活跃的待机时间之则不执行测量。
在睡眠模式下,间。在强制模式下,执行单一度量值。当测量完成后,传感器返回睡眠模式。
该设置是预定义的组合压 一组过采样设置可从超低功率超高分辨率设置从而适应目标应用的传感器。力测量过采样和温度测量采样过密。压力和温度测量过采样可以单独选择从0到16倍过采样(见3.3.1和3.3.2章):
温度测量? 超低功率?
标准分辨率? 低功率?
?超高分辨率 ?高分辨率
BMP280配备了一个内置的IIR滤波器,以减少短期扰动造成的输出数据溢出。滤波器系数范围从0
(off)到16。
提供了博世Sensortec,为了简化设备的使用, 减少能量的大量可能的组合模式过采样率和过滤设置,
一套经过验证的常见用例在智能手机、移动气象站或飞行玩具(见章节 3.4):
)(如运行Android的智能手机手持设备低功耗? 如运行 Android的智能手机)手持动态设备?( ( 设置最低功耗)天气监测? 电梯/地板变化检测?
?下降检测
? 室内导航
框图(图1显示了一个简化的BMP280框图)
电源管理
BMP280有两个单独的电源引脚
?V DD是所有内部的主电源模拟和数字功能块
?V DDIO是一个单独的电源销,用于数字接口的供应
加电复位生成器是建在重置后的逻辑电路和寄存器值接通电源的序列。没有限制提高VDD的斜率和序列和VDDIO水平。驱动后,传感器落定在睡眠模式(见3.6.1)。
关掉可能永久损坏设备(由于 V_DDIO或警告:持有任何接口类型(SDI,SDO,SCKCSB)逻辑高水平当过度引起的电流通过二极管ESD保护。)
BMP280 V DD提供电源, 接口保持高电平。而不是V_DD,总线因此已经可以自由使用前V_DDIO如果供应。
3.3 测量流
BMP280测量周期由温度和压力测量与可选择的过采样。测量周期后,数据是通过一个可选的IIR滤波 。流程如下图中描述。)如造成的溢出(消除短期波动压力,器.
跳过) 设定的采样过密;如果osrs_t = 0 2. 测量温度 (osrs_t1.开始周期测量 ) ;如果osrs_p = 0跳过3. 测量压力 (osrs_p设定的采样过密 跳9 滤波器使能 否4. IIR 9 滤波器初始化? 否 跳 是 5. IIR 否 跳10 是 6.更新过滤器内存使用,过滤内存,ADC值和滤波器系数 ) 值复制到过滤器的内存(initalises IIR滤波器9. ADC 10. 过滤内存复制到输出寄存器 结束周期循环测量 11.
上面的图块将在以下分章详细。
3.3.1压力测量
压力测量可以启用或跳过。跳过测量可能是有用的,如果BMP280作为温度传感器。启用时,几个过采样选项存在。每个过采样步骤减少噪音和增加一个比特的输出分辨率,这是存储在XLSB 0Xf9数据寄存器。启用/禁用测量和过采样设置选择通过osrs_p(2:0)位0 xf4控制寄存器。
表4:osrs_p设置
压力过采样 典型的解决压力 建议温度过采样 过采样设置
跳过压力测试 跳过(输出设置为 0 x80000)
根据需要
超低功耗 x1 x1 16bit/2.62Pa
低功率x1 17bit/1.31Pa x2
x4 x1 分辨率 18bit/0.66Pa
x8 x1 高分辨率 19bit/0.33Pa
超高分辨率 x2
x16 20bit/0.16Pa
osrs_p为了找到一个合适的设置,请参考章节3.4。
3.3.2温度测量温度测量可以启用或跳过。跳过测量可能是有用的测量压力非常迅速。启用时,几个过采样选项存在。每个过采样步骤减少噪音和增加一个比特的输出分辨率,这是存储在XLSB 0xfc数据寄存器。启用/禁用温度测量和过采样设置选择通过osrs_t 2:0位控制0 xf4登记。
表4:osrs_t设置
典型的解决温度 osrs_t[2:0] 温度过采样
跳过 ( 000 输出设置为0 x80000)
建议osrs_t的价值基础的选择价值osrs_p按表4所示。
以上温度采样过密×2是可能的,但不会显著提高进一步压力输出的准确性。
原因是噪声补偿压力值取决于原始压力比原始温度噪声。以下推荐的设置会导致最优noise-to-power比率。
3.3.2 IIR滤波器
环境压力是许多短期变化,如造成摔门或窗(数据溢出?) ,或风吹到传感器。抑制这些干扰在输出数据而不造成额外的接口流量和处理器工作负载,BMP280特性内部IIR滤波器。它有效地降低了输出信号的带宽。下一步测量的输出滤波器是使用以下公式:
的数据来自前面的获得(数据)data_filtered_old ADC。IIRdata_ADC 的数据来自滤波前的: 0 xf5以下选项滤波器可以配置(2:0)比特控制寄存器IIR 使用滤波器的 过滤器设置 表6:
filter[2:0]
14计算见表 ) 过滤系数 带宽(ODR
为了找到一个合适的设置过滤器,请参考章节3.4。
当写寄存器过滤器,该过滤器是重置。下一个值将通过过滤器和过滤器的初始内存值。如果温度或压力测量是跳过,相应的过滤内存将保持不变,即使输出寄存器设置为0x80000。以前跳过测量重新启用时,输出 将使用过滤器过滤内存从上次测量没有跳过。.
3.4过滤选择 为了选择最佳设置,建议以下用例:
表 7 :推荐基于用例的过滤器设置(模式都为正常)
过采样设置RMSNoise[cm]
osrs_p osrs_t
ODR[Hz] IIR滤波器多 I DD[μA] 使用案例
) )(3.5项式系数。
(see3.3.3)(see3.7)(3.8.2 手持低功耗设备(例如安卓) 超高分辨率 x16 x2 247 10 40 4
手持动态(力)x4 x1 设备(android) 2.4 83.3 16 577
1
1
超低功率 off 天气监测 26.4 1/60 0.14
()强迫模式最低4
50.9 电梯 / 7.3 6.4 地板变化检测 标准分辨率 x4 x1
下降检测 低功率 128 509 20.8 x2 x1 off
16 26.3
超高分辨率 1.6
650 x16 x2
室内导航
噪声3.5噪音取决于选择的过采样和过滤设置。在控制压力表示值测定环境和基于连续 32个测量的平均标准 偏差点在最高采样速度。这是需要为了排除长期漂移噪声的测量。
噪音压力8:表
3.6 电源模式
BMP280提供三个权力模式:睡眠模式,强制模式和正常模式。这些可以选择使用模式(1:0)位0xf4控制
寄存器。
3.6.1睡眠模式Sleep mode
睡眠模式上电复位后默认设置。在睡眠模式下,不进行测量和功耗(I_DDSM)最低。所有寄存器都可以访问;Chip-ID和补偿系数可以读取。
强迫模式3.6.2
在强制模式下,执行单一度量值根据选定的测量和过滤选项。当完成测量,传感器返回到睡眠模式,可从数据寄存器获得测量结果。下一个测量,迫使模式需要再次选择。这类似于BMP180操作。强制模式建议应用程序需要低采样率或基于主机的同步。
3.6.3 正常模式
正常模式之间的连续周期(主动)测量周期和一个备用(不活跃)时期,他们的时间被定义为t_standy备用。当前在备用期间(I_DDSB)略高于睡眠模式。设置模式后,测量和过滤选项,最后可获得测量结果从数据寄存器,无需进一步的写访问。正常模式建议使用IIR滤波器时,和有用的应用程序中,短期扰动(如吹到传感器)应该被过滤。
根据下表0xf5比特控制寄存器(2:0)的内容t_sb待机时间是由
3.6.4模式转换图
支持的模式转换显示如下。如果设备目前执行测量 ,执行模式切换命令推迟到当前运行的测量周期的结束。下(进?)一步模式更改命令忽略到最后执行模式更改命令。模式转换除了下面所示的是测试稳定但不代表推荐使用的设备。
3.7电流损耗
当前的电流损耗取决于ODR和过采样设置。下面给出的值归一化的ODR 1 Hz。实际的消费可以计算在给定的ODR乘以ODR的表12中消费使用。实际的ODR是通过定义用户设置强制的频率测量或由过 。14备用设置在正常模式在表t采样和
3.8 测量时间
测量的速度可以在强制执行模式取决于osrs_t和osrs_p过采样设置。他们在正常模式下执行的速度取决于osrs_t osrs_p和过采样设置设置待机时间t备用。在给出下表生成的odr的建议osr的组合。
下表说明了典型和最大测量时间的基础上选定的过采样设置。最低可实现的频率取决于最大测量时 间。
3.8.2 正常模式的测量速率
下表说明了测量利率预计将会在正常模式基于过采样设置和t_standy备用。
)
基于用例(传感器时间根据推荐设置15:表.
3.9 数据读出
读出数据转换后,强烈建议使用突发读因为他不需要每一个单独寄存器的地址。这将防止可能属于不同的字节混乱测量流量,减少接口。读出的数据是通过开始从0xf7到0xfc突发读取。一个无符号的20位格式的数据读出的压力和温度。强烈建议使用BMP280 API,可以从博世Sensortec读出和补偿。内存映射和接口的详细信息,请参考章节分别为3.12和5。
数据读出的时间应该选择强迫模式,最大测量时间(见3.8.1章)是比较推崇的。在正常模式下,读出速度可以做类似于预期的数据输出率(见3.8.2章)。后“ut”和“up”的值已经阅读,实际压力和温度需要计算使用补偿参数存储在设备。在3.11章阐述的过程。
3.10 数据寄存器shadowing 阴子数据寄存器??
在正常模式下,测量时间不一定是同步的读出。这意味着新的测量结果可能会出现在用户阅读之前的测量结果。在这种情况下,跟踪执行,以保证数据的一致性。(shadowing)阴影只会工作,如果所有数据寄存器读取一个阅读。因此,用户必须使用突发(burst)读取如果他不同步数据读出测量周期。使用几个独立的读命令可能会导致不一致的数据。
如果完成一个新的测量和数据寄存器仍在阅读,新的测量结果转移到阴影数据寄存器。影子寄存器传输到数据寄存器的内容当用户结束阅读,即使不是所有的数据寄存器读。读出数据跨多个数据寄存器,因此只能保证一致的在一个测量周期如果使用单一读出读取命令。突发读出的结束标记的前沿CSB销在SPI情况下或停止条件I2C的识别情况。突发阅读结束后,所有用户数据寄存器更新。
3.11 输出补偿
BMP280输出由ADC输出值。然而,每个传感元件的行为不同,和实际压力和温度必须使用一组计算校正参数。推荐的计算在3.11.3章使用定点算术。在高级语言Matlab?或虚拟仪器?,定点的代码可能不支持。在这种情况下,浮点代码在附录8.1中可以作为一个替代选择。对于8位微控制器,变量的大小可能是有限的。在这种情况下,一个简化的32位整数代码与降低精度在附录8.2中给出。
3.11.1 计算消耗
下表显示了所需的时钟周期数量补偿计算与GCC 32位微控制器Cortex-M3优化级别- 02。该控制器 存在。FPU应用程序只建议在PC因此所有浮点计算模拟。浮点,不包含浮点单元.
3.11.3补偿公式
请注意,强烈建议使用API可以从博世Sensortec执行读出和补偿。如果这不是想要的,下面的代码可以应用在用户的风险(risk)。压力和温度的值都将收到20位格式,积极的,存储在一个32位带符号整数。
变量t_fine(32位)带有温度高分辨率值压力补偿公式,可以实现为一个全局变量。数据类型“BMP280_S32_t”应该定义一个32位带符号整数变量类型,通常可以定义为“long singed int”。
数据类型“BMP280_U32_t”应该定义一个32位无符号整数变量类型,通常可以定义为“long unsigned int”。最好的计算精度,64位整数支持是必要的。如果这是不可能的在你的平台上,请见附件8.2一个32位的选择。
数据类型“BMP280_S64_t”应该定义一个64位带符号整数变量类型,这在大多数支持平台可以被定义为“长长的签署int”。rev.1.1代码的修改。
3.12 计算压强跟温度
下面的图显示了压力和温度测量的详细算法。
这个算法C源代码提供给客户作为参考( 从博世Sensortec BMP28x_ API)和通过其销售和分销合作伙 伴。
全局内存映射和寄存器描述4. 18 给出了内存映射表所示。保留寄存器没有显示。
总论4.1.
所有通信设备是由读取或写入寄存器。寄存器具有一个8位的宽度。有几个寄存器保留;他们不应该写,不保证特定值时读出数据。在接口的详细信息,请参考第5章。
4.2内存映射
给出了内存映射表18所示。保留寄存器没有显示
4.3寄存器说明
4.3.1 寄存器 0xd0 “id” //0xd0是内存映射地址
“id”寄存器包含了芯片身份证号码chip_id 7:0,0x58。这个数字就可以读取设备完成上电复位。
4.3.2 寄存器 0xe0 复位 4.3.2 Register 0xE0 “reset”
“重置”寄存器包含软复位复位(7:0)。如果该值0xb6写入寄存器,设备使用完整的上电复位复位程序。写其他值比0xb6没有影响。读出的值总是0x00。
4.3.3 状态寄存器 4.3.3 Register 0xF3 “status” //等待寄存器为零
“状态”寄存器包含两位表示设备的状态。
Register 0xF3 名字 描述
“status” '那时候结果已经转移到数据寄存器。',' Bit 3 measuring[0] 自动转换运行时设置为' 1 0
复制完成1 im_update[0] 自动设置为' Bit 0 '当NVM数据被复制到映像寄存器和' 后置 0。在上电复位和数据复制每一个转换。4.3.4 寄存器 0xF4 “ctrl_meas”
“ctrl_meas”寄存器设置数据采集设备的选择。
名字 描述 Register 0xF4
“ctrl_meas”
Bit 7, 6, 5 osrs_t[2:0] 控制温度数据的采样过密。看到章3.3.2详情。
控制采样过密的压力数据。详情见3.3.1章。osrs_p[2:0] 2 4, Bit 3,
章。3.6控制设备的电源模式。详情见mode[1:0]
0 1, Bit
4.3.5 Register 0xF5 “config” 4.3.5 寄存器0xF5 “配置”
“配置”设置寄存器、过滤和接口设备的选择。写入 “配置”注册在正常模式可能被忽略。在睡眠模式下 写不被忽视。Description
Register 0xF5 Name
“config”控制活动时间t在正常模式下备用。有关详细信息,请参阅3.6.3 t_sb[2:0] 章。Bit 7, 6, 5
IIR滤波器的控制时间常数。有关详细信息,请参阅 Bit 4, 3, 2 3.3.3filter[2:0] 章。
使能 Bit 0 SPI 接口spi3w_en[0] ,当设置为“1”。详情见5.3章。
4.3.6 寄存器 0xF7…0xF9 “press” (_msb, _lsb, _xlsb)//数据读出
“压力”寄存器包含原始压力测量输出数据(19:0)。有关如何阅读设备的压力和温度信息,请咨询chapter3.9。
Register 0xF7-0xF9 Description
Name
“press” 原始压力测量的输出数据。(19:12)MSB包含 0xF7 press_msb[7:0] 部分 原始压力测量的输出数据。(12:4)部分LSB包含 press_lsb[7:0] 0xF8
pressxlsb[3:0] 包含XLSB部分4)(3:0)原始压力测量的输出数据。内容取决于温度0xF9 (bit 7, 6, 5,
分辨率, 见表5。
4.3.7 Register 0xFA…0xFC “temp” (_msb, _lsb, _xlsb) //不用 4.3.7 临时寄存器
“ 临时”寄存器包含原始温度测量输出数据ut[19:0]。有关如何阅读设备的压力和温度信息,请参考章节3.9。
Register 0xF7-0xF9 Name Description
press”“ temp_msb[7:0] 包含MSB ut(19:12)部分原始温度测量输出数据。0XFA
包含 temp_lsb[7:0]
LSB 0XFB ut(12:4) 部分原始温度测量输出数据。0XFC(bit 7, 6, 5, 4) pressxlsb[3:0] XLSB 包含ut(3:0)部分原始温度测量输出数据。决议内容取决于 见表压力,4。
5. 数字接口BMP280支持I2C 和SPI数字接口;它作为一个从机的协议。I2C接口支持的标准、快速和高速模式。SPI接口支持SPI模式“00”(CPOL = CPHA = 0)和模式“11”(CPOL = CPHA = ' 1 ')在四线和电话配置。
支持以下事务:
?单字节写
?多个字节写(使用成对的注册地址和注册数据)
?单一字节读
?多个字节读(使用一个注册地址自动递增)
5.1 接口选择
界面选择自动完成基于CSB(芯片选择)的地位。如果连接到V_DDIO CSB,I2C接口是活跃的。如果CSB拉低(低电平),SPI接口被激活。CSB推倒一次后(无论发生任何时钟周期),I2C接口是禁用的,直到下一次上电复位。这样做是为了避免无意中解码SPI交通到另一个从机I2C数据。因为上电复位时才执行V_DD和V_DDIO都建立,没有错误的协议序列检测由于升高的风险。然而,如果使用I2C和CSB不是直接连接到V_DDIO而是通过可编程销,它必须确保这个销已经输出V_DDIO水平在上电复位装置。如果不是这种情况,设备将被锁定在SPI模式并没有回应I2C命令。
5.2 I2C接口
I2C从机接口是兼容飞利浦I2C规范2.1版本。详细计时参考表27。所有模式(标准、快速、高速)支持。SDA和SCL并非纯粹的开路(漏极?)。里面包含VDDIO ESD保护二极管和接地。设备不执行时钟拉 结构是高电平的输入没有拉低能力。,SCL伸.
S,的最后一点改变的值可以改变在操作期间。位MSB是固定的。
SDO7位设备地址是111011 x。6
BMPx77),也就是连接到V_DDIO导致从机地址1110111(0 DO连接到接地导致从机地址1110110(0 x76), ,I2C地址将无定义。接口类型不能左浮动;如果左浮动I2C180 的地址。SDO 接口使用以下接口类型: I2C SCK:串行时钟(sci)? (SDA) ?SDI:数据')
1 = ' = ' 0 ',V DDIO LSB(?SDO:从机地址接地V_DDIOGND:它必须通过把外部连接到接口I2C。SDI 是双向流通到CSB必须连接到V_DDIO选择 6章连接指令。电阻器。请参考第 协议的数据:以下缩写将用于I2C 开始 ?S
停止?P?ACKS 从机应答
?ACKM 主机应答
?NACKM 主机无应答
5.2.1 I2C写
写是通过发送从机地址以写模式(RW = 0),导致从机地址111011 x0(“X”是由SDO接口状态。然后主发送对寄存器地址和寄存器数据。传输结束后停止条件。这是图7所示。
5.2.2 I2C读 /*******************/
能够读取寄存器,首先寄存器地址必须被发送以写模式(从机地址111011 x0)。然后一个停止或重复开始必须生成条件(等待应答)。解决该从机后以读模式(RW = ' 1 ')地址111011 x1,从机发出数据后自动递增寄存器地址,直到NOACKM发生和停止条件。图8所示,两个字节读取从0xf6和0xf7寄存器。/**翻译的乱七八糟的*/
5.4接口技术规格
5.4.1通用接口技术
给出了通用接口参数表26所示
5.4.2 I2C时间控制
因为I2C计时,以下使用缩写:
? “S?&F模式”=标准和快速模式
? “HS模式”=高速模式
? Cb =总线电容在SDA行
)月2.1(2000规范年1I2C 所有其他的命名是指 给出相应的值。27所示。表12计时图如图I2C.
.
上述I2C特定时间对应于以下内部添加延迟:
?SDI和SCK输入之间的输入延迟:SDI比SCK延迟通常100 ns的标准和快速模式和一般20 ns高速模式。
?输出延迟SCK下降沿SDI输出传播通常是140 ns标准和快速模式,通常在高速模式下70纳秒。
补偿公式
32位
// Returns temperature in DegC, resolution is 0.01 DegC. Output value of “5123” equals 51.23 DegC.
// t_fine carries fine temperature as global value
BMP280_S32_t t_fine;
BMP280_S32_t bmp280_compensate_T_int32(BMP280_S32_t adc_T)
{
BMP280_S32_t var1, var2, T;
var1 = ((((adc_T>>3) – ((BMP280_S32_t)dig_T1<<1))) * ((BMP280_S32_t)dig_T2)) >> 11;
var2 = (((((adc_T>>4) – ((BMP280_S32_t)dig_T1)) * ((adc_T>>4) – ((BMP280_S32_t)dig_T1))) >> 12) *
14;
>> ((BMP280_S32_t)dig_T3))
t_fine = var1 + var2;
T = (t_fine * 5 + 128) >> 8;
return T;
}
// Returns pressure in Pa as unsigned 32 bit integer. Output value of “96386” equals 96386 Pa = 963.86 hPa
BMP280_U32_t bmp280_compensate_P_int32(BMP280_S32_t adc_P)
{
BMP280_S32_t var1, var2;
BMP280_U32_t p;
var1 = (((BMP280_S32_t)t_fine)>>1) – (BMP280_S32_t)64000;
var2 = (((var1>>2) * (var1>>2)) >> 11 ) * ((BMP280_S32_t)dig_P6);
var2 = var2 + ((var1*((BMP280_S32_t)dig_P5))<<1);
var2 = (var2>>2)+(((BMP280_S32_t)dig_P4)<<16);
var1 = (((dig_P3 * (((var1>>2) * (var1>>2)) >> 13 )) >> 3) + ((((BMP280_S32_t)dig_P2) * var1)>>1))>>18;
var1 =((((32768+var1))*((BMP280_S32_t)dig_P1))>>15);
if (var1 == 0)
{
return 0; // avoid exception caused by division by zero
}
p = (((BMP280_U32_t)(((BMP280_S32_t)1048576)-adc_P)-(var2>>12)))*3125;
if (p < 0
{
p = (p << 1) / ((BMP280_U32_t)var1);
}
else
{
p = (p / (BMP280_U32_t)var1) * 2;
}
var1 = (((BMP280_S32_t)dig_P9) * ((BMP280_S32_t)(((p>>3) * (p>>3))>>13)))>>12;
var2 = (((BMP280_S32_t)(p>>2)) * ((BMP280_S32_t)dig_P8))>>13;
p = (BMP280_U32_t)((BMP280_S32_t)p + ((var1 + var2 + dig_P7) >> 4));
return p;
}
64位
// Returns temperature in DegC, double precision. Output value of “51.23” equals 51.23 DegC.
value
global as temperature fine carries t_fine //
BMP280_S32_t t_fine;
double bmp280_compensate_T_double(BMP280_S32_t adc_T)
{
double var1, var2, T;
var1 = (((double)adc_T)/16384.0 – ((double)dig_T1)/1024.0) * ((double)dig_T2);
var2 = ((((double)adc_T)/131072.0 – ((double)dig_T1)/8192.0) *
(((double)adc_T)/131072.0 – ((double) dig_T1)/8192.0)) * ((double)dig_T3);
t_fine = (BMP280_S32_t)(var1 + var2);
T = (var1 + var2) / 5120.0;
return T;
}
// Returns pressure in Pa as double. Output value of “96386.2” equals 96386.2 Pa = 963.862 hPa
double bmp280_compensate_P_double(BMP280_S32_t adc_P)
{
double var1, var2, p;
var1 = ((double)t_fine/2.0) – 64000.0;
var2 = var1 * var1 * ((double)dig_P6) / 32768.0;
var2 = var2 + var1 * ((double)dig_P5) * 2.0;
var2 = (var2/4.0)+(((double)dig_P4) * 65536.0);
var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0;
var1 = (1.0 + var1 / 32768.0)*((double)dig_P1);
if (var1 == 0.0)
{
return 0; // avoid exception caused by division by zero
}
p = 1048576.0 – (double)adc_P;
p = (p – (var2 / 4096.0)) * 6250.0 / var1;
var1 = ((double)dig_P9) * p * p / 2147483648.0;
var2 = p * ((double)dig_P8) / 32768.0;
p = p + (var1 + var2 + ((double)dig_P7)) / 16.0;
return p;
}
以上是本人使用数据手册时,简单翻译,如果有误,望指出,轻喷,谢谢!