I2C通用读写函数

发布者:SparklingEyes最新更新时间:2018-07-17 来源: eefocus关键字:I2C  通用读写函数 手机看文章 扫描二维码
随时随地手机看文章

/////////////////////////////////////////////////////////////////////////////////////

i2c通用读写函数:

static int i2c_ReadData(char *rxdata, int length, u8 cmd)
{
        int ret;
        u8 read_cmd[1] = {cmd};
        
        struct i2c_msg msgs[] = {
                /*{
                        .addr        = this_client->addr,
                        .flags        = 0,
                        .len        = 1,
                        .buf        = read_cmd,
                },*/
                {
                        .addr        = this_client->addr,
                        .flags        = I2C_M_RD,
                        .len        = length,
                        .buf        = rxdata,
                },
        };


        //printk("IIC addr = %x\n",this_client->addr);
        ret = i2c_transfer(this_client->adapter, msgs, 1);
        if (ret < 0)
                printk("msg %s i2c read error: %d\n", __func__, ret);
        
        return ret;
}




static int i2c_Writedata(char *txdata, int length)
{
        int ret;


        struct i2c_msg msg[] = {
                {
                        .addr        = this_client->addr,
                        .flags        = 0,
                        .len        = length,
                        .buf        = txdata,
                },
        };


        ret = i2c_transfer(this_client->adapter, msg, 1);
        if (ret < 0)
                printk("%s i2c write error: %d\n", __func__, ret);


        return ret;
}


/////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////////////
//Actions平台I2C读写
/**
 * i2c_master_send - issue a single I2C message in master transmit mode
 * @client: Handle to slave device
 * @buf: Data that will be written to the slave
 * @count: How many bytes to write, must be less than 64k since msg.len is u16
 *
 * Returns negative errno, or else the number of bytes written.
 */
int i2c_master_send(const struct i2c_client *client, const char *buf, int count)
{
int ret;
struct i2c_adapter *adap = client->adapter;
struct i2c_msg msg;


msg.addr = client->addr;
msg.flags = client->flags & I2C_M_TEN;
msg.len = count;
msg.buf = (char *)buf;


ret = i2c_transfer(adap, &msg, 1);


/*
* If everything went ok (i.e. 1 msg transmitted), return #bytes
* transmitted, else error code.
*/
return (ret == 1) ? count : ret;
}
EXPORT_SYMBOL(i2c_master_send);


/**
 * i2c_master_recv - issue a single I2C message in master receive mode
 * @client: Handle to slave device
 * @buf: Where to store data read from slave
 * @count: How many bytes to read, must be less than 64k since msg.len is u16
 *
 * Returns negative errno, or else the number of bytes read.
 */
int i2c_master_recv(const struct i2c_client *client, char *buf, int count)
{
struct i2c_adapter *adap = client->adapter;
struct i2c_msg msg;
int ret;


msg.addr = client->addr;
msg.flags = client->flags & I2C_M_TEN;
msg.flags |= I2C_M_RD;
msg.len = count;
msg.buf = buf;


ret = i2c_transfer(adap, &msg, 1);


/*
* If everything went ok (i.e. 1 msg received), return #bytes received,
* else error code.
*/
return (ret == 1) ? count : ret;
}
EXPORT_SYMBOL(i2c_master_recv);


/////////////////////////////////////////////////////////////////////////////////////

关键字:I2C  通用读写函数 引用地址:I2C通用读写函数

上一篇:关于单片机死机的一些问题
下一篇:I2C通信 读写数据过程

推荐阅读最新更新时间:2024-03-16 16:09

STM32部分知识之I2C
I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。 多主机I2C总线系统结构: 因为STM32自带的I2C不稳定所以采用模拟I2C,所以首先的初始化I0口 void IIC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,
[单片机]
STM32部分知识之<font color='red'>I2C</font>
stm32的模拟/硬件的spi和i2c通信及其应用
本章节主要讲解:模拟spi、硬件spi、两种方法驱动6针oled、模拟i2c、硬件i2c、硬件i2c驱动mpu6050 一、硬件spi 1、首先是基础知识,这里参考正点原子的资料:s 2、接下来讲一讲硬件spi及cubemx配置方法: 这里在cubemx配置,Mode部分配置是全双工还是半双工还是单线通信,是主机模式还是从机模式,如果是单线,那么是只接受还是只接受 Hardware NSS Signal配置NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制 最下面配置一些参数,包括但不限于数据大小,第一位是MSB位还是LSB位,串行同步时钟的空
[单片机]
stm32的模拟/硬件的spi和<font color='red'>i2c</font>通信及其应用
基于STM32 I2C的TMP101温度传感器的C源码
搞这个历程差不多花了我一个周末的时间,一片小小的TMP101确实让我破费脑筋。最后甚至使用了示波器直接观察SDA SCL 的波形。不过示波器的使用确实纠正我一个严重且低级的错误。这期间也在网上搜过STM32 的I2C 应用 大多都是在说 STM32 的I2C固件库写的烂、STM32的硬件有问题、I2C接口没法用等等,最后解决方式都是用软件像51那样用IO口软件模拟IIC时序。但我看了STM32最新的勘误表,根本没有所谓STM32的IIC硬件设计缺陷。我可不想把STM32用的像8051一样。我要用高效的硬件I2C而且要用ST官方库来实现~! 心得: 函数 I2C_CheckEvent () 这个典型的用法是 while(!
[单片机]
基于STM32 <font color='red'>I2C</font>的TMP101温度传感器的C源码
MPU6050使用I2C协议读出X轴原始数据的51单片机程序
主:STC89C54 下面代码 #include reg51.h #define uchar unsigned char //#define addr_x 0xae // 写 //#define addr_d 0xaf // 读 sbit sda = P2^1; //数据管脚 sbit scl = P2^0; //时钟管脚 bit ack; //**************************************** // 定义MPU6050内部地址 //**************************************** #define SMPLRT_DIV 0x19 //陀螺
[单片机]
i2c子系统之at24c02简介
AT24C02存储规格 总共32个page,每个page为8byte。总共256KB(2Kb),地址的长度需要使用8bit(刚好可以用来表示256个字节的地址)来表示。 AT24CC02的地址 设备的地址由8bit组成,前4 bit是固定的(1010);接着的3 bit是和A2 A1 A0的硬件连接相关,通过指定这3 bit可以在统一个I2C系统里面最多连接8个AT24C02设备;第8bit用来表示读/写选择,1表示读/0表示写。AT24C02会和总线上的设备地址进行比较,假如一直则AT24C02输出一个0,不一致则返回的是standby状态。 TQ2440开发板的A2 A1 A0地址线全接地,所
[单片机]
<font color='red'>i2c</font>子系统之at24c02简介
51单片机普通IO口模拟IIC(I2C)接口通讯的程序代码
I2C总线是Philips公司提出的一种集成电路IC器件之间相连接的总线协议,其目的是使电子系统(不只 限于单片机系统)各个IC器件之间的连线变得容易。因为使用传统的并行总线在IC器件之间连接,往往会使得IC之间连线较多,显得非常复杂。而I2C总线 则使IC器件之间只需SDA、SCL两条连线就可以传送数据,因而十分方便。由于I2C在印刷体中不容易书写(需要上标),所以实际书写时,还常见到 IIC、I2C等书写方法,本文采用IIC的写法,敬请注意。关于IIC总线的知识,请参阅相关书籍,此处不再做进一步介绍。 I2C总线是Philips公司提出的一种集成电路IC器件之间相连接的总线协议,其目的是使电子系统(不只 限于单片机系统)
[单片机]
51单片机普通IO口模拟IIC(<font color='red'>I2C</font>)接口通讯的程序代码
在P87LPC764单片机I2C总线系统中扩展LCD显示器
1 引言    I2C总线是Philips公司推出的芯片间串行传输总线。它仅用串行数据线(SDA)和串行时钟线(SCL)两根连线便实现了完善的全双工同步数据传送,并可很方便地构成多机系统和外围器件扩展系统。    本文介绍在P87LPC764单片机中利用I2C总线系统中典型的LCD驱动控制器件PCF8577C来扩展256段静态LCD的电路设计方法。 2 硬件电路设计 2.1 P87LPC764单片机的I2C总线接口    P87LPC764是Philips公司生产的一种小封装、低成本、高性能的单片机(具体内容见参考文献2)。它采用80C51加速处理器结构,片内带有支持I2C总线的硬件接口。当激活I2C总线时,P87L
[单片机]
I2C总线控制的TV显示处理器TDA9332H及其应用
摘要:TDA9332H是飞利浦公司生产的适合高档彩电的显示处理器,可用于单扫描(50或60Hz)和双扫描(100或120Hz)的电视信号处理。文章介绍了TDA9332H的结构原理和性能特点,同时给出了TDA9332H在高档彩电中的应用方法。 关键词:显示处理器;高档彩电;YUV/RGB;TDA9332H 1 TDA9332H的主要特点 TDA9332H是飞利浦公司为高档彩电设计的显示处理器。它采用44脚QFP封装形式,图1所示是其引脚排列图。此外,该芯片还有以下特点: ●具有YUV输入端和带快速消隐的RGB信号输入端,它的OSD/Text输入端与其它视频信号输入端分开,而且既有快速消隐功能又可混合插入;同时内设RGB控制
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved