?? i2c_demo_program_needtest080803.c
字號:
/* *********I2c Read Data Demo Program*******************************
Program Name:I2c Read Data Demo Program
Function:test i2c Reading Data using the "i2c_driver_test" driver pro
Designer:Donglei (dongleispark@gmail.com)
Description:Read 8 bytes from MCU by i2c bus
Edition:1.0 8_2_08 Afternoon
Problem: The first data of 8 bytes is wrong, can't keep it operating well everytime. And the data which sended need modified by MCU
In addition:Basically it's ok for project,while it need advanted improvment /*************************Read test****************************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <sys/types.h>
#include <fcntl.h>
#include <linux/i2c.h>
#define slaveAddr 0x60 //set salve address ps:0x00 is not an availiable address
#define iicRDTransNum 8 //set read number
#define iicWRTransNum 8 //set write number
#define CmdIICLK 3 //set the i2c clk
#define CmdWR 2 //set write byte number
#define CmdRD 1 //set read byte number
#define CmdSetAddr 0 //cmd to set salve address ps:0x00 is not an availiable address
#define HighFreq 1 //16 prescale for IICCLK
#define LowFreq 0 //16 prescale for IICCLK
#define WriteMode 1 //the write test switch flag 0: not use; 1: use
#define ReadMode 1 //the read test seitch flag 0: not use; 1: use
char sendData[iicWRTransNum];
char recData[iicRDTransNum];
void make_data()
{
char i;
for(i=0;i<iicWRTransNum;i++)
{
sendData[i] = i;
}
}
int main(void)
{
int i;
int fd;
int wr;
int rd;
int ioset;
char *write_test;
char *read_test;
make_data();
write_test = sendData;
read_test = recData;
if(WriteMode)
{
fd = open("/dev/i2c_test",O_WRONLY);
if(fd<0)
{
perror("Not open device i2c_test!\n");
exit(1);
}
printf("Open device i2c !\n");
ioset = ioctl(fd,CmdSetAddr,slaveAddr);
if(ioset<0)
{
perror("Wrong set paramenter1!\n");
}
printf("Slave address set is ok!\n");
ioset = ioctl(fd,CmdWR,iicWRTransNum);
if(ioset<0)
{
perror("Wrong set paramenter2!\n");
}
printf("Slave address set is ok!\n");
ioset = ioctl(fd,CmdIICLK,HighFreq);
if(ioset<0)
{
perror("Wrong set paramenter3!\n");
}
printf("Slave address set is ok!\n");
wr = write(fd,write_test,iicWRTransNum);
if(wr<0)
{
perror("Not pass write test!\n");
exit(1);
}
printf("write operation is ok!\n");
close(fd);
printf("Write i2c tests pass!!\n");
}
if(ReadMode)
{
fd = open("/dev/i2c_test",O_RDONLY);
if(fd<0)
{
perror("Not open device i2c_test!\n");
exit(1);
}
printf("Open device i2c !\n");
ioset = ioctl(fd,CmdSetAddr,slaveAddr);
if(ioset<0)
{
perror("Wrong set paramenter1!\n");
}
printf("Slave address set is ok!\n");
ioset = ioctl(fd,CmdRD,iicRDTransNum);
if(ioset<0)
{
perror("Wrong set paramenter2!\n");
}
printf("Slave address set is ok!\n");
ioset = ioctl(fd,CmdIICLK,HighFreq);
if(ioset<0)
{
perror("Wrong set paramenter3!\n");
}
printf("Slave address set is ok!\n");
rd = read(fd,read_test,iicRDTransNum);
if(rd<0)
{
perror("Not pass read test!\n");
exit(1);
}
printf("\n");
for(i=1;i<=iicRDTransNum; i++)
{
printf("%d",*read_test);
read_test++;
}
printf("Read operation is ok!\n");
close(fd);
printf("Read i2c tests pass!!\n");
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -