- #define I2C_INTER_DEVICE "/dev/i2c-7"
- int i2c2_fd;
- i2c_rdwr_ioctl_data i2c2;
- struct bme680_dev gas_sensor;
- struct bme680_field_data bme680fd;
- int I2C_Device_Read(uint8_t i2c_dev_addr , uint8_t read_data[] , int len , uint8_t reg_addr)
- {
- int i;
- if ((i2c2_fd = open(I2C_INTER_DEVICE , O_RDWR))<0)
- {
- printf("Fail to open %s device\n" , I2C_INTER_DEVICE);
- return 1;
- }
- ioctl(i2c2_fd , I2C_TIMEOUT , 2);
- ioctl(i2c2_fd , I2C_RETRIES , 1);
- i2c2.nmsgs = 2;
- i2c2.msgs = (struct i2c_msg*)malloc(i2c2.nmsgs * sizeof(struct i2c_msg));
- if(!i2c2.msgs)
- {
- printf("malloc error\n");
- return 2;
- }
- (i2c2.msgs[0]).len = 1;
- (i2c2.msgs[0]).addr = i2c_dev_addr;
- (i2c2.msgs[0]).flags = 0;
- (i2c2.msgs[0]).buf = (unsigned char*)malloc(1);
- (i2c2.msgs[0]).buf[0] = reg_addr;
- (i2c2.msgs[1]).len = len;
- (i2c2.msgs[1]).addr = i2c_dev_addr;
- (i2c2.msgs[1]).flags = I2C_M_RD;
- (i2c2.msgs[1]).buf = (unsigned char*)malloc(len);
- (i2c2.msgs[1]).buf[0] = 0;
- if(ioctl(i2c2_fd , I2C_RDWR , &i2c2) < 0)
- {
- //printf("Read failed.\n");
- for(i = 0 ; i < i2c2.nmsgs ; i ++)
- {
- free(i2c2.msgs[i].buf);
- }
- free(i2c2.msgs);
- close(i2c2_fd);
- return 3;
- }
- else
- {
- //printf("Read success.\n");
- memcpy(read_data , i2c2.msgs[1].buf , len);
- for(i = 0 ; i < i2c2.nmsgs ; i ++)
- {
- free(i2c2.msgs[i].buf);
- }
- free(i2c2.msgs);
- close(i2c2_fd);
- return 0;
- }
- }
- int I2C_Device_Write(uint8_t i2c_dev_addr , uint8_t s[] , int len , uint8_t reg_addr)
- {
- int i;
- if ((i2c2_fd = open(I2C_INTER_DEVICE , O_RDWR))<0)
- {
- printf("Fail to open i2c-2 device\n");
- return 1;
- }
- ioctl(i2c2_fd , I2C_TIMEOUT , 2);
- ioctl(i2c2_fd , I2C_RETRIES , 1);
- i2c2.nmsgs = 1;
- i2c2.msgs = (struct i2c_msg*)malloc(i2c2.nmsgs * sizeof(struct i2c_msg));
- if(!i2c2.msgs)
- {
- printf("malloc error\n");
- return 2;
- }
-
- i2c2.nmsgs = 1;
- i2c2.msgs[0].len = 1 + len;
- i2c2.msgs[0].addr = i2c_dev_addr;
- i2c2.msgs[0].flags = 0;
- i2c2.msgs[0].buf = (unsigned char*)malloc(1 + len);
- i2c2.msgs[0].buf[0] = reg_addr;
- memcpy(i2c2.msgs[0].buf + 1 , s , len);
- if(ioctl(i2c2_fd , I2C_RDWR , &i2c2) < 0)
- {
- //printf("Write failed.\n");
- for(i = 0 ; i < i2c2.nmsgs ; i ++)
- {
- free(i2c2.msgs[i].buf);
- }
- free(i2c2.msgs);
- close(i2c2_fd);
- return 3;
- }
- else
- {
- //printf("Write success.\n");
- for(i = 0 ; i < i2c2.nmsgs ; i ++)
- {
- free(i2c2.msgs[i].buf);
- }
- free(i2c2.msgs);
- close(i2c2_fd);
- return 0;
- }
- }
- int8_t user_i2c_write(uint8_t dev_id , uint8_t reg_addr , uint8_t *reg_data , uint16_t len)
- {
- I2C_Device_Write(0x77 , reg_data , len , reg_addr);
- return 0;
- }
- int8_t user_i2c_read(uint8_t dev_id , uint8_t reg_addr , uint8_t *reg_data , uint16_t len)
- {
- I2C_Device_Read(0x77 , reg_data , len , reg_addr);
- return 0;
- }
QMC5883L地磁指南针代码:
- void QMC5883L_Init()
- {
- uint8_t data_qmc;
-
- data_qmc = 0x0d;
- I2C_Device_Write(0x0d , &data_qmc , 1 , 0x09);
- I2C_Device_Read(0x0d , &data_qmc , 1 , 0x09);
- printf("QMC5883L 0x09 = 0x%02x.\n" , data_qmc);
- data_qmc = 0x01;
- I2C_Device_Write(0x0d , &data_qmc , 1 , 0x0b);
- I2C_Device_Read(0x0d , &data_qmc , 1 , 0x0b);
- printf("QMC5883L 0x0b = 0x%02x.\n" , data_qmc);
-
- data_qmc = 0x40;
- I2C_Device_Write(0x0d , &data_qmc , 1 , 0x20);
- I2C_Device_Read(0x0d , &data_qmc , 1 , 0x20);
- printf("QMC5883L 0x20 = 0x%02x.\n" , data_qmc);
-
- data_qmc = 0x01;
- I2C_Device_Write(0x0d , &data_qmc , 1 , 0x21);
- I2C_Device_Read(0x0d , &data_qmc , 1 , 0x21);
- printf("QMC5883L 0x21 = 0x%02x.\n" , data_qmc);
- }
PAJ7620手势传感器代码:
- #define PAJ7620_ADDR_BASE 0x00
- #define PAJ7620_REGITER_BANK_SEL (PAJ7620_ADDR_BASE + 0xEF)
- #define PAJ7620_ID 0x73
- #define PAJ7620_VAL(val, maskbit) ( val << maskbit )
- #define PAJ7620_BANK0 PAJ7620_VAL(0,0)
- unsigned char paj_init_register_array[][2] =
- // Initial Gesture
- {
- {0xEF,0x00},
- {0x32,0x29},
- {0x33,0x01},
- {0x34,0x00},
- {0x35,0x01},
- {0x36,0x00},
- {0x37,0x07},
- {0x38,0x17},
- {0x39,0x06},
- {0x3A,0x12},
- {0x3F,0x00},
- {0x40,0x02},
- {0x41,0xFF},
- {0x42,0x01},
- {0x46,0x2D},
- {0x47,0x0F},
- {0x48,0x3C},
- {0x49,0x00},
- {0x4A,0x1E},
- {0x4B,0x00},
- {0x4C,0x20},
- {0x4D,0x00},
- {0x4E,0x1A},
- {0x4F,0x14},
- {0x50,0x00},
- {0x51,0x10},
- {0x52,0x00},
- {0x5C,0x02},
- {0x5D,0x00},
- {0x5E,0x10},
- {0x5F,0x3F},
- {0x60,0x27},
- {0x61,0x28},
- {0x62,0x00},
- {0x63,0x03},
- {0x64,0xF7},
- {0x65,0x03},
- {0x66,0xD9},
- {0x67,0x03},
- {0x68,0x01},
- {0x69,0xC8},
- {0x6A,0x40},
- {0x6D,0x04},
- {0x6E,0x00},
- {0x6F,0x00},
- {0x70,0x80},
- {0x71,0x00},
- {0x72,0x00},
- {0x73,0x00},
- {0x74,0xF0},
- {0x75,0x00},
- {0x80,0x42},
- {0x81,0x44},
- {0x82,0x04},
- {0x83,0x20},
- {0x84,0x20},
- {0x85,0x00},
- {0x86,0x10},
- {0x87,0x00},
- {0x88,0x05},
- {0x89,0x18},
- {0x8A,0x10},
- {0x8B,0x01},
- {0x8C,0x37},
- {0x8D,0x00},
- {0x8E,0xF0},
- {0x8F,0x81},
- {0x90,0x06},
- {0x91,0x06},
- {0x92,0x1E},
- {0x93,0x0D},
- {0x94,0x0A},
- {0x95,0x0A},
- {0x96,0x0C},
- {0x97,0x05},
- {0x98,0x0A},
- {0x99,0x41},
- {0x9A,0x14},
- {0x9B,0x0A},
- {0x9C,0x3F},
- {0x9D,0x33},
- {0x9E,0xAE},
- {0x9F,0xF9},
- {0xA0,0x48},
- {0xA1,0x13},
- {0xA2,0x10},
- {0xA3,0x08},
- {0xA4,0x30},
- {0xA5,0x19},
- {0xA6,0x10},
- {0xA7,0x08},
- {0xA8,0x24},
- {0xA9,0x04},
- {0xAA,0x1E},
- {0xAB,0x1E},
- {0xCC,0x19},
- {0xCD,0x0B},
- {0xCE,0x13},
- {0xCF,0x64},
- {0xD0,0x21},
- {0xD1,0x0F},
- {0xD2,0x88},
- {0xE0,0x01},
- {0xE1,0x04},
- {0xE2,0x41},
- {0xE3,0xD6},
- {0xE4,0x00},
- {0xE5,0x0C},
- {0xE6,0x0A},
- {0xE7,0x00},
- {0xE8,0x00},
- {0xE9,0x00},
- {0xEE,0x07},
- {0xEF,0x01},
- {0x00,0x1E},
- {0x01,0x1E},
- {0x02,0x0F},
- {0x03,0x10},
- {0x04,0x02},
- {0x05,0x00},
- {0x06,0xB0},
- {0x07,0x04},
- {0x08,0x0D},
- {0x09,0x0E},
- {0x0A,0x9C},
- {0x0B,0x04},
- {0x0C,0x05},
- {0x0D,0x0F},
- {0x0E,0x02},
- {0x0F,0x12},
- {0x10,0x02},
- {0x11,0x02},
- {0x12,0x00},
- {0x13,0x01},
- {0x14,0x05},
- {0x15,0x07},
- {0x16,0x05},
- {0x17,0x07},
- {0x18,0x01},
- {0x19,0x04},
- {0x1A,0x05},
- {0x1B,0x0C},
- {0x1C,0x2A},
- {0x1D,0x01},
- {0x1E,0x00},
- {0x21,0x00},
- {0x22,0x00},
- {0x23,0x00},
- {0x25,0x01},
- {0x26,0x00},
- {0x27,0x39},
- {0x28,0x7F},
- {0x29,0x08},
- {0x30,0x03},
- {0x31,0x00},
- {0x32,0x1A},
- {0x33,0x1A},
- {0x34,0x07},
- {0x35,0x07},
- {0x36,0x01},
- {0x37,0xFF},
- {0x38,0x36},
- {0x39,0x07},
- {0x3A,0x00},
- {0x3E,0xFF},
- {0x3F,0x00},
- {0x40,0x77},
- {0x41,0x40},
- {0x42,0x00},
- {0x43,0x30},
- {0x44,0xA0},
- {0x45,0x5C},
- {0x46,0x00},
- {0x47,0x00},
- {0x48,0x58},
- {0x4A,0x1E},
- {0x4B,0x1E},
- {0x4C,0x00},
- {0x4D,0x00},
- {0x4E,0xA0},
- {0x4F,0x80},
- {0x50,0x00},
- {0x51,0x00},
- {0x52,0x00},
- {0x53,0x00},
- {0x54,0x00},
- {0x57,0x80},
- {0x59,0x10},
- {0x5A,0x08},
- {0x5B,0x94},
- {0x5C,0xE8},
- {0x5D,0x08},
- {0x5E,0x3D},
- {0x5F,0x99},
- {0x60,0x45},
- {0x61,0x40},
- {0x63,0x2D},
- {0x64,0x02},
- {0x65,0x96},
- {0x66,0x00},
- {0x67,0x97},
- {0x68,0x01},
- {0x69,0xCD},
- {0x6A,0x01},
- {0x6B,0xB0},
- {0x6C,0x04},
- {0x6D,0x2C},
- {0x6E,0x01},
- {0x6F,0x32},
- {0x71,0x00},
- {0x72,0x01},
- {0x73,0x35},
- {0x74,0x00},
- {0x75,0x33},
- {0x76,0x31},
- {0x77,0x01},
- {0x7C,0x84},
- {0x7D,0x03},
- {0x7E,0x01},
- };
- #define INIT_REG_ARRAY_SIZE (sizeof(paj_init_register_array)/sizeof(paj_init_register_array[0]))
- void PAJ7620_Init()
- {
- uint32_t i;
- uint8_t data_paj;
-
- data_paj = PAJ7620_BANK0;
- I2C_Device_Write(PAJ7620_ID , &data_paj , 1 , PAJ7620_REGITER_BANK_SEL);
- I2C_Device_Read(PAJ7620_ID , &data_paj , 1 , PAJ7620_REGITER_BANK_SEL);
- I2C_Device_Read(0x0d , &data_paj , 1 , 0);
- printf("PAJ7620 Init 0 = 0x%02x\n" , data_paj);
- I2C_Device_Read(0x0d , &data_paj , 1 , 1);
- printf("PAJ7620 Init 1 = 0x%02x\n" , data_paj);
- for(i = 0 ; i < INIT_REG_ARRAY_SIZE ; i ++)
- {
- data_paj = paj_init_register_array[i][1];
- I2C_Device_Write(PAJ7620_ID , &data_paj , 1 , paj_init_register_array[i][0]);
- }
- data_paj = PAJ7620_BANK0;
- I2C_Device_Write(PAJ7620_ID , &data_paj , 1 , PAJ7620_REGITER_BANK_SEL);
- I2C_Device_Read(PAJ7620_ID , &data_paj , 1 , PAJ7620_REGITER_BANK_SEL);
- I2C_Device_Read(0x0d , &data_paj , 1 , 0);
- printf("PAJ7620 Init 0 = 0x%02x\n" , data_paj);
- I2C_Device_Read(0x0d , &data_paj , 1 , 1);
- printf("PAJ7620 Init 1 = 0x%02x\n" , data_paj);
- }
- uint8_t PAJ7620_Read()
- {
- uint8_t paj7620_gest = 0;
- I2C_Device_Read(PAJ7620_ID , &paj7620_gest , 1 , 0x43);
- if(paj7620_gest != 0)
- {
- printf("paj7620_gest = %d.\n" , paj7620_gest);
- }
- return paj7620_gest;
- }
串口发送:
- str_uart[0] = 0xaa;
- str_uart[1] = 0xbb;
-
- str_uart[2] = 0x01;
-
- str_uart[3] = (bme680fd.temperature >> 8) & 0xff;
- str_uart[4] = bme680fd.temperature & 0xff;
-
- str_uart[5] = (bme680fd.pressure >> 24) & 0xff;
- str_uart[6] = (bme680fd.pressure >> 16) & 0xff;
- str_uart[7] = (bme680fd.pressure >> 8) & 0xff;
- str_uart[8] = bme680fd.pressure & 0xff;
-
- str_uart[9] = (bme680fd.humidity >> 24) & 0xff;
- str_uart[10] = (bme680fd.humidity >> 16) & 0xff;
- str_uart[11] = (bme680fd.humidity >> 8) & 0xff;
- str_uart[12] = bme680fd.humidity & 0xff;
- str_uart[13] = (qmcs_angle_xy_32 >> 8) & 0xff;
- str_uart[14] = qmcs_angle_xy_32 & 0xff;
- str_uart[15] = paj7620_gest;
-
- str_uart[30] = 0xcc;
- str_uart[31] = 0xdd;
- count_uart = write(fd_uart , str_uart , 32);
- printf("count_uart = %d.\n" , count_uart);
- if (count_uart < 0)
- {
- printf("UART write failed.\n");
- }
- tcflush(fd_uart , TCIFLUSH);
- tcflush(fd_uart, TCOFLUSH);
- tcflush(fd_uart, TCIOFLUSH);
演示视频:
哎总算结束这糟心的试用活动了,立马归还开发板给论坛好好睡个觉。