当前位置:  技术问答>100分请教高手I2C驱动的小问题 iis7站长之家

关于i2c驱动的问题

    来源: 互联网  发布时间:2016-12-05

    本文导语:  在linux2.6.28内核中的include/linux/i2c.h中有这样的一个结构体:struct i2c_client_address_data {         const unsigned short *normal_i2c;         const unsigned short *probe;         const unsigned short *ignore;         const...

在linux2.6.28内核中的include/linux/i2c.h中有这样的一个结构体:struct i2c_client_address_data {
        const unsigned short *normal_i2c;
        const unsigned short *probe;
        const unsigned short *ignore;
        const unsigned short * const *forces;
};

可是在内核2.6.38中没有了?问下38中是怎样处理i2c操作的?用什么来代替这个结构体了?

|
下面是我写 的应用程序, 驱动我不会
I2C.h和I2C.cpp

#include "StdAfx.h"

class CI2C //I2C接口设备的底层程序,包括键盘,温度控制器
{
private:
CI2C ( void ){}
~CI2C ( void ){}
static CI2C m_Instance;
//CI2C &operator=(CI2C&);  //disallowed 
//CI2C ( const CI2C& );    //disallowed
public:
static CI2C &GetInstance ( void ) { return m_Instance; }
void Initial ( void );
void Cleanup ( void );

int GetTmp ( void );
int GetLastKey ( void );

private:
void ReadI2C ( UCHAR device_addr, UCHAR reg_addr, int read_len, UCHAR *out_buf );
void WriteI2C ( USHORT device_addr, UCHAR reg_addr, UCHAR data );


struct i2c_msg
{
USHORT addr;  //从设备地址
USHORT flags; //1:读,0:写
 
USHORT len;   //数据长度
UCHAR *buf;   //数据
};

struct i2c_rdwr_ioctl_data
{
i2c_msg *msgs; // 
int nmsgs; //nmsgs这个数量决定了有多少开始信号,对于“单开始时序”,取1

};  
int m_nfd; //设备节点 /dev/i2c-1
CLock m_Lock; //互斥锁,包含不能同时读写I2C
};

namespace i2c_namespace
{
//common
const int I2C_RETRIES = 0x0701;
const int I2C_TIMEOUT = 0x0702;
const int I2C_RDWR    = 0x0707; 
const int MAX_MSG_NUM = 2; //一次连续可以发多少条消息
const int MAX_BUF_NUM = 2; //每条消息最多带几个数据

//key
const int ADDR_KEY = 0x34;

//temperature
const int ADDR_TMP     = 0x4f;
}
 

extern CI2C &g_I2C;


/////////////////////////I2C.cpp///////////////////////
#include "I2C.h"

using namespace i2c_namespace;

CI2C CI2C::m_Instance;
CI2C &g_I2C = CI2C::GetInstance();

/*/////////////////////////////////////////////////////////////////////////////
  Function:       Initial 
  Description:    初始化I2C和互斥锁
  Calls:          ---
  Called By:      ---
  Input:          ---
  Output:         ---
  Return:         ---
  Others:         public
/////////////////////////////////////////////////////////////////////////////*/ 
void CI2C::Initial ( void )
{
m_nfd = open("/dev/i2c-1",O_RDWR);
ioctl(m_nfd,I2C_TIMEOUT,1);/*超时时间*/
ioctl(m_nfd,I2C_RETRIES,2);/*重复次数*/

//key:
WriteI2C ( ADDR_KEY, 0x01, 0x2d );
WriteI2C ( ADDR_KEY, 0x1d, 0x3f );
WriteI2C ( ADDR_KEY, 0x1e, 0x3f );
WriteI2C ( ADDR_KEY, 0x1f, 0x00 );
WriteI2C ( ADDR_KEY, 0x23, 0xc0 );
WriteI2C ( ADDR_KEY, 0x24, 0xc0 );
WriteI2C ( ADDR_KEY, 0x25, 0x03 );

//temperature
WriteI2C ( ADDR_TMP, 0x01, 0x60 );

m_Lock.Initialize();
}

/*/////////////////////////////////////////////////////////////////////////////
  Function:       Cleanup 
  Description:    数据清理
  Calls:          ---
  Called By:      ---
  Input:          ---
  Output:         ---
  Return:         ---
  Others:         public
/////////////////////////////////////////////////////////////////////////////*/ 
void CI2C::Cleanup ( void )
{
m_Lock.Destroy();
close ( m_nfd );
}

/*/////////////////////////////////////////////////////////////////////////////
  Function:       GetTmp 
  Description:    取得温度(摄氏度)
  Calls:          ---
  Called By:      ---
  Input:          ---
  Output:         ---
  Return:         温度
  Others:         public
/////////////////////////////////////////////////////////////////////////////*/ 
int CI2C::GetTmp ( void )
{
UCHAR buf[2];

ReadI2C ( ADDR_TMP, 0, 2, buf );

return (  ( ( ( buf[0]  8 );
}

/*/////////////////////////////////////////////////////////////////////////////
  Function:       GetLastKey 
  Description:    取得键值
  Calls:          ---
  Called By:      ---
  Input:          ---
  Output:         ---
  Return:         键值
  Others:         public
/////////////////////////////////////////////////////////////////////////////*/ 
int CI2C::GetLastKey ( void )
{  
int data;
UCHAR buf[1];

ReadI2C ( ADDR_KEY, 0x03, 1, buf );
data = ( buf[0] & 0xff); //缓存的个数

for ( int i = 0 ; i 

    
 
 

您可能感兴趣的文章:

  • i2c 驱动的问题,高人指教。
  • linux2.6 i2c驱动的几个问题
  • i2c驱动对应的应用程序
  • i2c设备加载驱动后没有执行probe
  • 100分请教高手I2C驱动的clock指针的问题
  • Linux下的i2c驱动
  • I2C驱动测试 有问题啊啊啊
  • 【求教】Linux I2C设备驱动开发流程
  • 新手问题,如何应用内核中的i2c设备驱动
  • freescale imx51 u-boot中i2c驱动 mxc_i2c.c
  • 关于i2c总线驱动加载方式问题
  • I2C总线上字符设备驱动加载不成功,probe函数没有执行。
  • I2C驱动里的一个结构体
  • s3c6410平台的I2C驱动问题
  • 请问下linux的i2c驱动问题
  • 100分请教高手I2C驱动的小问题
  • 关于LINUX I2C驱动的Probe方法
  • linux2.6.21下的I2C驱动问题
  • kernel中关于i2c处的问题,大家指教。
  • 关于I2C传输协议和串口问题
  • I2C设备数据通信问题
  • 视屏采集和I2C设备使用的问题请教
  • i2c通信问题
  • 关于LINUX I2C,GCC的奇怪问题。。。问题依旧。。
  • 100分请教高手一个 android串口控制台和i2c超时的问题(本人结贴率达到90%)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • I2C 错误
  • 如何读取i2c 上 ds1337时钟芯片 ~~~~~~~
  • 求助,LINUX的I2C
  • I2c能否通过mmap读写
  • 关于LINUX的 I2C,高手速度进!
  • 请教:不创建cdev,能访问spi或i2c设备么?
  • I2C如何Restart
  • i2c/pca9539.c文件的新模式probe疑问
  • gpio模拟i2c 读取24c02寄存器的值为0xff?
  • 求助:中段里使用i2c导致系统崩溃


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3