vb.net - FTDI libMPSSE.dll I2C_DeviceRead() 总是返回 0xFF
问题描述
我导入了 FTDI 芯片 libMPSSE.dll 并在 I2C 模式下使用它。我的测试设备是传感器 BMP280。我尝试读取它的 ID 寄存器,其中包含 0x58 值。问题是方法I2C_DeviceRead()总是返回 0xFF,尽管我使用逻辑分析仪看到传感器正确回答:
方法的原始声明是:
FT_STATUS I2C_DeviceRead(FT_HANDLE handle, uint32 deviceAddress, uint32 sizeToTransfer, uint8 *buffer, uint32 *sizeTransferred, uint32 options)
FT_STATUS I2C_DeviceWrite(FT_HANDLE handle, uint32 deviceAddress, uint32 sizeToTransfer, uint8 *buffer, uint32 *sizeTransferred, uint32 options)
我像这样导入这个方法:
<DllImport(DLL_MPSSE_PATH, SetLastError:=True, CallingConvention:=CallingConvention.Cdecl)>
Private Shared Function I2C_DeviceRead(ByVal handle As Integer, ByVal deviceAddress As Integer, ByVal sizeToTransfer As Integer, ByVal buffer As Byte(), ByRef sizeTransfered As Integer, ByVal options As I2C_TRANSFER_OPTIONS) As Integer
End Function
<DllImport(DLL_MPSSE_PATH, SetLastError:=True, CallingConvention:=CallingConvention.Cdecl)>
Private Shared Function I2C_DeviceWrite(ByVal handle As Integer, ByVal deviceAddress As Integer, ByVal sizeToTransfer As Integer, ByVal buffer As Byte(), ByRef sizeTransfered As Integer, ByVal options As I2C_TRANSFER_OPTIONS) As Integer
End Function
I2C_TRANSFER_OPTIONS 是带有控制位掩码的枚举。并根据传感器数据表进一步调用它(伪代码)。一、写寄存器地址:
Dim sensorAddr as Integer = &H77
Dim idRegister as Byte() = {&HD0}
Dim options as Integer = &H13 'I2C_TRANSFER_OPTIONS_START_BIT | I2C_TRANSFER_OPTIONS_STOP_BIT | I2C_TRANSFER_OPTIONS_FAST_TRANSFER_BYTES
Dim transferred as Integer = 0
I2C_DeviceWrite(myhandle, sensorAddr, 1, idRegister, transferred, options)
然后读取传感器寄存器的内容:
Dim readLen as Integer = 1
Dim readBuf(readLen-1) as Byte
I2C_DeviceRead(myhandle, sensorAddr, readLen, readBuf, transferred, options)
如果 readLen 是,例如 4,那么 readBuf() 包含四个 0xFF,尽管传感器写入数据线(图片上的 SDA)其他值:
我的代码有什么问题?为什么我可以写正确,但阅读是错误的?谢谢!
解决方案
推荐阅读
- security - 在 Apex 中为 Cookie 设置 SameSite
- batch-file - 如何使批处理文件不可读但可执行?
- javascript - 如何使用 jQuery 和 CSS 显示容器
- c++ - 从指针有条件地初始化 std::vector
- c# - 如果 c# 是类型安全语言,那么为什么允许使用动态和对象关键字更改对象类型?
- mysql - 选择逗号分隔的字符串 SQL 中的第一个和最后一个单词
- php - 喜欢 + 不喜欢 Laravel
- azure - 根据与其他指标的比较定义警报
- c# - System.NotSupportedException:'不支持返回 System.IServiceProvider 的配置服务。' 带结构图
- android - 访问 React-Native AndroidManifest.xml 中的环境变量