×
单片机 > 单片机程序设计 > 详情

用户态应用程序直接访问I2C驱动

发布时间:2020-08-28 发布时间:
|
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "sys/types.h"
#include "sys/stat.h"
#include "fcntl.h"
#include "i2c-dev.h"       //调用来自“i2c-tools-3.1.0.tar.bz2”,包含操作I2C函数的声明
 
 
// i2c_usr_test r addr
 * i2c_usr_test w addr val
//
 
void print_usage(char *file)
{
   printf("%s r addr\n", file);
   printf("%s w addr val\n", file);
}
 
int main(int argc, char **argv)
{
   int fd;
   unsigned char addr, data;
   int dev_addr;
   
   if ((argc != 5) && (argc != 6))
   {
      print_usage(argv[0]);
      return -1;
   }
 
   fd = open(argv[1], O_RDWR);
   if (fd < 0)
   {
      printf("can't open %s\n", argv[1]);
      return -1;
   }
 
   dev_addr = strtoul(argv[2], NULL, 0);
   if (ioctl(fd, I2C_SLAVE, dev_addr) < 0)
   {    
      // ERROR HANDLING; you can check errno to see what went wrong //    
      printf("set addr error!\n");
      return -1;
   }
 
   if (strcmp(argv[3], "r") == 0)
   {
      addr = strtoul(argv[4], NULL, 0);
      
      data = i2c_smbus_read_word_data(fd, addr);
         
      printf("data: %c, %d, 0x%2x\n", data, data, data);
   }
   else if ((strcmp(argv[3], "w") == 0) && (argc == 6))
   {
      addr = strtoul(argv[4], NULL, 0);
      data = strtoul(argv[5], NULL, 0);
      i2c_smbus_write_byte_data(fd, addr, data);      
   }
   else
   {
      print_usage(argv[0]);
      return -1;
   }
   
   return 0;
}
 
关键字:用户态  应用程序  I2C驱动

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向