I2C
I2C 类层次结构
I2C 接口提供 I2C 主控功能。I2C 是双线串行协议,允许 I2C 主设备与 I2C 从设备交换数据。您可以使用它与 I2C 设备进行通信,例如串行存储器,传感器和其他模块或集成电路。
I2C 协议每条总线最多支持 127 个设备,其默认时钟频率为 100 KHz。
注意: 请记住,在 sda 和 scl 上需要一个上拉电阻。I2C 总线上的所有驱动器都需要是开路集电极,因此必须在两个信号上使用上拉电阻。上拉电阻的典型值约为 2.2 k 欧姆,连接在引脚和 3v3 之间。
I2C 类参考
注意: Arm Mbed API 使用 8 位地址,因此请确保在传递它们之前将 7 位地址左移 1 位。
公共类型 | |
enum | RxStatus { NoData, MasterGeneralCall, MasterWrite, MasterRead } |
enum | Acknowledge { NoACK = 0, ACK = 1 } |
公共成员函数 | |
I2C (PinName sda, PinName scl) | |
void | frequency (int hz) |
int | read (int address, char *data, int length, bool repeated=false) |
int | read (int ack) |
int | write (int address, const char *data, int length, bool repeated=false) |
int | write (int data) |
void | start (void) |
void | stop (void) |
virtual void | lock (void) |
virtual void | unlock (void) |
int | transfer (int address, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) |
void | abort_transfer () |
受保护的成员函数 | |
void | lock_deep_sleep () |
void | unlock_deep_sleep () |
void | irq_handler_asynch (void) |
void | aquire () |
受保护的属性 | |
event_callback_t | _callback |
CThunk< I2C > | _irq |
DMAUsage | _usage |
bool | _deep_sleep_locked |
i2c_t | _i2c |
int | _hz |
静态保护属性 | |
static I2C * | _owner = NULL |
static SingletonPtr< PlatformMutex > | _mutex |
I2C hello, world
/* mbed Example Program
* Copyright (c) 2006-2014 ARM Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "mbed.h"
// Read temperature from LM75BD
I2C i2c(I2C_SDA , I2C_SCL );
const int addr7bit = 0x48; // 7 bit I2C address
const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90
int main() {
char cmd[2];
while (1) {
cmd[0] = 0x01;
cmd[1] = 0x00;
i2c.write(addr8bit, cmd, 2);
wait(0.5);
cmd[0] = 0x00;
i2c.write(addr8bit, cmd, 1);
i2c.read( addr8bit, cmd, 2);
float tmp = (float((cmd[0]<<8)|cmd[1]) / 256.0);
printf("Temp = %.2f\n", tmp);
}
}