gpt4 book ai didi

c# - Linux 上的 I2C 与 C#/Mono

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:09 24 4
gpt4 key购买 nike

我有一个小型嵌入式设备 (Beaglebone Black),其 I2C 设备连接到 /dev/i2c-2

现在我正在尝试从 C#/Mono 与该设备进行通信,这怎么可能?我看过一些 C++ 代码,但我对该语言的了解不是很强,但看起来可以将其作为文件打开并写入它?虽然我不确定这段代码如何转换为 C#。

//C++ sample of i2c communication...
int BMA180Accelerometer::writeI2CDeviceByte(char address, char value){
cout << "Starting BMA180 I2C sensor state write" << endl;
char namebuf[MAX_BUS];
snprintf(namebuf, sizeof(namebuf), "/dev/i2c-%d", I2CBus);
int file;
if ((file = open(namebuf, O_RDWR)) < 0){
cout << "Failed to open BMA180 Sensor on " << namebuf << " I2C Bus" << endl;
return(1);
}
if (ioctl(file, I2C_SLAVE, I2CAddress) < 0){
cout << "I2C_SLAVE address " << I2CAddress << " failed..." << endl;
return(2);
}

char buffer[2];
buffer[0] = address;
buffer[1] = value;
if ( write(file, buffer, 2) != 2) {
cout << "Failure to write values to I2C Device address." << endl;
return(3);
}
close(file);
cout << "Finished BMA180 I2C sensor state write" << endl;
return 0;
}

最佳答案

我不确定这是否为时已晚,但我已经使用单声道在 BBB 上完成了此操作。您需要查看 DLLImport 属性。基本上,您需要编写一个小的 C++ 文件并编译它,其中包含一个仅调用名为 invoke_ioctl(...) 的 ioctl() 的自定义方法,然后将编译后的 DLL 放入 BBB 上的/bin 目录中,并将其添加到您的 C# 项目代码中。

[DllImport("pinvoke.dll")]
[SuppressUnmanagedCodeSecurityAttribute()] //Optional, for speed
private static extern int invoke_ioctl(int file_handle, int address);

public static FileStream getI2CStream(byte address)
{
FileStream result = File.Open("/dev/i2c-2", FileMode.Open);
invoke_ioctl(result.SafeFileHandle.DangerousGetHandle().ToInt32(), address);
return result;
}

写入特定 I2C 地址时,这将为 I2C 线路设置 ioctl()。只需打开 I2C 线上每个设备的文件即可。可能有一种 C# 方法可以更安全/有效地执行此操作。

关于c# - Linux 上的 I2C 与 C#/Mono,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21949527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com