工具/软件:Linux
您好!
USB 集线器2517仅支持 smbus 块读取/写入。
我正在使用以下应用程序、但不会发生写入/读取。
/*
*简单 I2C 示例
*
*版权所有2017 Joel Stanley
*
*此程序是免费软件;您可以重新分发和/或修改
*根据发布的 GNU 通用公共许可证的条款
*免费软件基础;许可证的版本2、或
*(可选)任何后续版本。
*
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
静态内联__s32 i2c_smbus_access (int 文件、char read_write、__u8命令、
int 大小、union i2c_smbus_data *数据)
{
struct i2c_smbus_ioctl_data args;
args.read_write = read_write;
args.command =命令;
args.size =大小;
args.data =数据;
返回 ioctl (file、I2C_SMBus、&args);
}
静态内联__s32 i2c_smbus_read_Byte_data (int file、__u8命令)
{
union i2c_smbus_data;
if (i2c_smbus_access (file、I2C_SMBus_read、command、
I2C_SMBus_Byte_data (&data)))
返回-1;
其他
返回0x0FF 和 data.byte;
}
静态内联__s32 i2c_smbus_read_block_data (int 文件、__u8命令、
_u8 *值)
{
union i2c_smbus_data;
int i;
if (i2c_smbus_access (file、I2C_SMBus_read、command、
I2C_SMBus_BLOCK_DATA、和数据))
返回-1;
否则{
对于(i = 1;i <= data.block[0];i++)
values[I-1]= data.block[i];
返回 data.block[0];
}
}
静态内联__s32 i2c_smbus_write_block_data (int 文件、__u8命令、
__u8长度,__u8 *值)
{
union i2c_smbus_data;
int i;
如果(长度> 32)
长度= 32;
对于(i = 1;i <= length;i++)
data.block[i]=值[i-1];
data.block[0]=长度;
返回 i2c_smbus_access (file、I2C_SMBus_write、command、
I2C_SMBus_BLOCK_DATA、&DATA);
}
int main (int argc、char ** argv)
{
uint8_t data=0x00、addr = 0x00、reg = 0x00;
_u8 read_data[32]={0x00}、write_data[32]={0x00}、offset=0;
const char * path = argv[1];
int 文件、rc、i=0、r_w=0;
如果(argc = 1)
errx (-1、"路径[i2c 地址][寄存器]");
如果(argc > 2)
Addr = strtol (argv[2]、NULL、0);
如果(argc > 3)
reg = strtoul (argv[3]、NULL、0);
File = open (path、O_RDWR);
如果(文件< 0)
ERR (errno、"尝试打开'%s'、路径);
RC = ioctl (file、I2C_slave、addr);
如果(RC < 0)
{
printf ("未检测到从属设备\n");
Close (file);
返回0;
}
printf ("请输入0/1以进行读取/写入\n");
scanf ("%d"、&r_w);
如果(r_w=1)
{
for (i=0;i<32;i++)
{
write_data[i]=(_u8) i;
}
rc=i2c_smbus_write_block_data (file、reg、8、write_data);
if (rC<0)
printf ("写入失败\n");
}
//data = i2c_smbus_read_Byte_data (file、reg);
//printf ("%s":地址0x%02x 上的器件0x%02x:0x%02x\n"、 路径、地址、寄存器、数据);
其他
{
rc=i2c_smbus_read_block_data (file、reg、read_data);
//rc=i2c_smbus_read_Byte_data (file、reg);
if (rC<0)
{
printf ("读取失败\n");
}
其他
{
// printf ("value returned from read%x\n",rc);
for (i=0;i<32;i++)
printf ("%x "、read_data[i]);
printf ("\n");
}
}
Close (file);
}
///opt/sdk_ti/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf-gcc /opt/sdk_ti/hub_config.c -o hub_block_read_2c
/www.linux-mag.com/...
