i2ctransfer 读写

#!/bin/bash

 设置I2C设备地址和寄存器地址
DEVICE_ADDRESS=0x10
REGISTER_ADDRESS=0x20

# 设置每次读取的字节数和循环次数
BYTES_PER_READ=10
LOOP_COUNT=10

# 循环读取数据
for ((i=0; i<$LOOP_COUNT; i++))
do
    # 读取数据
    i2ctransfer -y 1 w1@$DEVICE_ADDRESS 0x$REGISTER_ADDRESS r$BYTES_PER_READ > /dev/null 2>&1
    data=$(i2ctransfer -y 1 w1@$DEVICE_ADDRESS 0x$REGISTER_ADDRESS r$BYTES_PER_READ)
    
    # 打印读取的数据
    echo "Read data: $data"
    
    # 设置寄存器地址为下一次的读取
    REGISTER_ADDRESS=$((REGISTER_ADDRESS + BYTES_PER_READ))
done

#!/bin/bash

# 设置I2C设备地址和寄存器地址
DEVICE_ADDRESS=0x10
REGISTER_ADDRESS=0x0020

# 设置每次读取的字节数和循环次数
BYTES_PER_READ=10
LOOP_COUNT=10

# 转换寄存器地址为16进制,并去掉0x前缀
REGISTER_HEX=$(printf "%04x" $REGISTER_ADDRESS | sed 's/0x//')

# 循环读取数据
for ((i=0; i<$LOOP_COUNT; i++))
do
    # 读取数据
    i2ctransfer -y 1 w2@$DEVICE_ADDRESS 0x$REGISTER_HEX r$BYTES_PER_READ > /dev/null 2>&1
    data=$(i2ctransfer -y 1 w2@$DEVICE_ADDRESS 0x$REGISTER_HEX r$BYTES_PER_READ)
    
    # 打印读取的数据
    echo "Read data: $data"
    
    # 设置寄存器地址为下一次的读取
    REGISTER_ADDRESS=$((REGISTER_ADDRESS + BYTES_PER_READ))
    REGISTER_HEX=$(printf "%04x" $REGISTER_ADDRESS | sed 's/0x//')
done
#!/bin/bash

DEVICE_ADDRESS=0x10
REGISTER_ADDRESS=0x0020

BYTES_PER_READ=10
LOOP_COUNT=10

REGISTER_HEX=$(printf "%04x" $REGISTER_ADDRESS | sed 's/0x//')

for ((i=0; i<$LOOP_COUNT; i++))
do
    i2ctransfer -y 1 w2@$DEVICE_ADDRESS 0x$REGISTER_HEX r$BYTES_PER_READ > /dev/null 2>&1
    data=$(i2ctransfer -y 1 w2@$DEVICE_ADDRESS 0x$REGISTER_HEX r$BYTES_PER_READ)
    echo "Read data: $data"
    REGISTER_ADDRESS=$((REGISTER_ADDRESS + BYTES_PER_READ))
    REGISTER_HEX=$(printf "%04x" $REGISTER_ADDRESS | sed 's/0x//')
done


#!/bin/bash


# 设置I2C设备地址和寄存器地址
DEVICE_ADDRESS=0x10
REGISTER_ADDRESS=0x0020

# 设置要写入的数据
WRITE_DATA="0x1234"

# 分别写入高8位和低8位
HIGH_BYTE=$(printf "%02x" $((($REGISTER_ADDRESS >> 8) & 0xff)))
LOW_BYTE=$(printf "%02x" $(($REGISTER_ADDRESS & 0xff)))
i2ctransfer -y 1 w3@$DEVICE_ADDRESS 0x$HIGH_BYTE 0x$LOW_BYTE $WRITE_DATA

# 读取寄存器内容
READ_DATA=$(i2ctransfer -y 1 w2@$DEVICE_ADDRESS 0x$(printf "%02x" $((REGISTER_ADDRESS & 0xff))) r2)
echo "Read data: $READ_DATA"



#!/bin/bash

# 设置I2C设备地址和寄存器地址
DEVICE_ADDRESS=0x10
REGISTER_ADDRESS=0x0020

# 设置每次读取的字节数和循环次数
BYTES_PER_READ=10
LOOP_COUNT=10

# 循环读取数据
for ((i=0; i<$LOOP_COUNT; i++))
do
    # 读取数据
    HIGH_BYTE=$(printf "%02x" $(($REGISTER_ADDRESS >> 8)))
    LOW_BYTE=$(printf "%02x" $(($REGISTER_ADDRESS & 0xff)))
    i2ctransfer -y 1 w@$DEVICE_ADDRESS 0x$HIGH_BYTE 0x$LOW_BYTE r$BYTES_PER_READ > /dev/null 2>&1
    data=$(i2ctransfer -y 1 w@$DEVICE_ADDRESS 0x$HIGH_BYTE 0x$LOW_BYTE r$BYTES_PER_READ)
    
    # 打印读取的数据
    echo "Read data: $data"
    
    # 设置寄存器地址为下一次的读取
    REGISTER_ADDRESS=$((REGISTER_ADDRESS + BYTES_PER_READ))
done
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值