基于S3c2440的I2C驱动与测试程序追踪交叉分析

发布时间:2023-01-09  

VMware虚拟机+Fedora10, 硬件平台TQ2440, 内核2.6.30.4

对应的驱动程序豁然开朗, 然后自己添加了一些dev_dbg后, 对于不理解的地方也有了一定的参考提示, 记录下来与大家分享。


测试程序如下:

/*i2c_test.c

* hongtao_liu

*/

#include

#include

#include

#include

#include

#include

#include

#include

#define I2C_RETRIES 0x0701

#define I2C_TIMEOUT 0x0702

#define I2C_RDWR 0x0707

/*********定义struct i2c_rdwr_ioctl_data和struct i2c_msg,要和内核一致*******/

struct i2c_msg

{

unsigned short addr;

unsigned short flags;

#define I2C_M_TEN 0x0010

#define I2C_M_RD 0x0001

unsigned short len;

unsigned char *buf;

};

struct i2c_rdwr_ioctl_data

{

struct i2c_msg *msgs;

int nmsgs;

/* nmsgs这个数量决定了有多少开始信号,对于“单开始时序”,取1*/

};

/***********主程序***********/

int main()

{

int fd,ret;

struct i2c_rdwr_ioctl_data e2prom_data;

fd=open(“/dev/i2c-0”,O_RDWR);

/*

*dev/i2c-0是在注册i2c-dev.c后产生的,代表一个可操作的适配器。如果不使用i2c-dev.c

*的方式,就没有,也不需要这个节点。

*/

if(fd《0)

{

perror(“open error”);

}

e2prom_data.nmsgs=2;

/*

*因为操作时序中,最多是用到2个开始信号(字节读操作中),所以此将

*e2prom_data.nmsgs配置为2

*/

e2prom_data.msgs=(struct i2c_msg*)malloc(e2prom_data.nmsgs*sizeof(struct i2c_msg));

if(!e2prom_data.msgs)

{

perror(“malloc error”);

exit(1);

}

ioctl(fd,I2C_TIMEOUT,1);/*超时时间*/

ioctl(fd,I2C_RETRIES,2);/*重复次数*/

/***write data to e2prom**/

e2prom_data.nmsgs=1;

(e2prom_data.msgs[0]).len=2; //1个 e2prom 写入目标的地址和1个数据

(e2prom_data.msgs[0]).addr=0x50;//e2prom 设备地址

(e2prom_data.msgs[0]).flags=0; //write

(e2prom_data.msgs[0]).buf=(unsigned char*)malloc(2);

(e2prom_data.msgs[0]).buf[0]=0x10;// e2prom 写入目标的地址

(e2prom_data.msgs[0]).buf[1]=0x58;//the data to write

ret=ioctl(fd,I2C_RDWR,(unsigned long)&e2prom_data);

if(ret《0)

{

perror(“ioctl error1”);

}

sleep(1);

/******read data from e2prom*******/

e2prom_data.nmsgs=2;

(e2prom_data.msgs[0]).len=1; //e2prom 目标数据的地址

(e2prom_data.msgs[0]).addr=0x50; // e2prom 设备地址

(e2prom_data.msgs[0]).flags=0;//write

(e2prom_data.msgs[0]).buf[0]=0x10;//e2prom数据地址

(e2prom_data.msgs[1]).len=1;//读出的数据

(e2prom_data.msgs[1]).addr=0x50;// e2prom 设备地址

(e2prom_data.msgs[1]).flags=I2C_M_RD;//read

(e2prom_data.msgs[1]).buf=(unsigned char*)malloc(1);//存放返回值的地址。

(e2prom_data.msgs[1]).buf[0]=0;//初始化读缓冲

ret=ioctl(fd,I2C_RDWR,(unsigned long)&e2prom_data);

if(ret《0)

{

perror(“ioctl error2”);

}

printf(“buff[0]=%xn”,(e2prom_data.msgs[1]).buf[0]);

/***打印读出的值,没错的话,就应该是前面写的0x58了***/

close(fd);

return 0;

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    技术获高度赞誉会议期间多位院士关心地来到智现未来展台,共同探讨在高端制造领域进行工业软件应用的技术发展路径及应用价值。智现未来向中国工程院桂卫华院士重点介绍了运用多元时序异常检测混合模型提升数据检测效能、精确预测生产异常......
    行时进行深入训练。 具有输出热图的新型异常检测:新型异常检测算法在缺陷定位方面更为稳健,同时还能生成输出热图。运行时的热图对于获取缺陷的位置和形状非常实用,无需在训练时进行图像注释。 数据......
    项研究中,介绍了一种方法来提高车辆在十字路口的自我意识,以应对使用I2V通信时最大的可预见挑战之一:网络安全。本文介绍的异常检测算法,运行在自动驾驶车辆上,评估I2V通信在多种网络安全攻击下的健康状况。该分......
    传感器模块 和编写应用代码,利用模块内部智能传感处理器()处理与运动检测相关的运算工作,例如,直接在传感器上运行活动识别和异常检测算法算法运算下移到网络边缘有助于降低系统功耗,缩短响应延迟,减轻......
    对基于机器学习的汽车CAN总线异常检测方法展开具体介绍;目前机器学习是研究车辆网络入侵检测技术的热门方向,通过引入机器学习算法来识别车载总线上的网络报文,可实现对车辆已知/未知威胁的入侵检测。这种基于机器学习的异常检测......
    现问题所需的时间从数月降低至几乎实时。 该公司与现有客户合作,在真实应用中开发和测试其新的异常检测器,主要应用领域包括汽车、赛车运动和工业领域。该软件使用了一种独特的深度学习算法,可以基于复杂的系统行为在测试结果和数百个通道中发现多种异常......
    下技术节点集成电路制造的关键计算光刻技术之一。上海光机所科研人员提出的这种基于虚拟边与双采样率像素化掩模图形的快速光学邻近效应修正技术,能够将不同类型的成像失真归结为两种类型的成像异常,即内缩异常与外扩异常。利用不同的成像异常检测......
    的测试。 (3)对于人体异常行为算法的优化与改进。结合混合高斯模型目标检测算法和YOLO目标检测算法解决环境复杂及有遮挡物等原因下得出更加准确的目标检测算法,针对目标确定后的对象本身,加入卡尔曼滤波和均值漂移算法......
    增益控制(AGC)技术: AGC技术根据电机的负载条件自动调节电机驱动电流,以减少额外的电流,从而大大减少电机驱动IC和电机产生的热量。这有助于减少系统中的总热量产生和由此产生的退化。 异常检测......
    相关的运算工作,例如,直接在传感器上运行活动识别和异常检测算法算法运算下移到网络边缘有助于降低系统功耗,缩短响应延迟,减轻本地微控制器的运算量,根据具体实际应用设定传感器的行为。 当采......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>