我想在我的Raspberry上用C#启动SPI通信。 bcm2835 lib支持所需的命令,如:
bcm2835_spi_begin()
bcm2835_spi_end()
在C中你必须#include < bcm2835.h >
但在C#中using bcm2835;
不起作用。
安装了RaspberryPiDotNet和bcm2835库。
可以使用GPIOMem
命令控制GPIO引脚,该命令使用bcm2835库。
C#如何使用bcm2835的SPI命令?网上的所有内容都是C或C ++。
答案 0 :(得分:5)
这是一个完整的教程,如何让它工作:
安装Mono:
sudo apt-get update
sudo apt-get install mono-complete
安装RaspberryPiDotNet:
mkdir gpio_csharp
git clone git://github.com/cypherkey/RaspberryPi.Net.git
cd RaspberryPi.Net/RaspberryPiDotNet
xbuild RaspberryPiDotNet.csproj
cp bin/Debug/RaspberryPiDotNet.dll /home/pi/gpio_csharp/
安装bcm2835库:
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.36.tar.gz
tar -zxf bcm2835-1.36.tar.gz
cd bcm2835-1.36
./configure
make
sudo make check
sudo make install
cd src
cc - shared bcm2835.o -o libbcm2835.so
cp libbcm2835.so /home/pi/gpio_csharp/
删除未使用的文件和文件夹:
使用此命令可以删除创建的文件夹和文件,但不要删除“gpio_csharp”:
rm -r <folder>
rm <file>
创建一个C#脚本:
nano /home/pi/gpio_csharp/xxxxx.cs //xxxxx is your filename
CTRL + X //For exit and save script
在脚本中添加SPI命令:
(在程序的“类”空间中添加)
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_begin")]
static extern void spi_begin();
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_end")]
static extern void spi_end();
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_transfer")]
static extern byte spi_transfer(byte val);
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_chipSelect")]
static extern byte spi_chipSelect(GPIOPins pin);
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_setClockDivider")]
static extern byte spi_setClockDivider(int val);
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_setDataMode")]
static extern byte spi_setDataMode(int val);
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_setChipSelectPolarity")]
static extern byte spi_setChipSelectPolarity(GPIOPins pin, bool activeHigh);
在代码中使用命令:
现在您可以使用以下命令来使用SPI。示例在页面下方。
spi_begin();
spi_end();
spi_transfer();
spi_chipSelect();
spi_setClockDivider();
spi_setDataMode();
spi_setChipSelectPolarity();
示例:强>
//SPI Try
spi_setClockDivider(128);
spi_setDataMode(0);
spi_chipSelect(cs);
spi_setChipSelectPolarity(cs, false);
spi_begin();
spi_transfer(0xAA);
spi_end();