ubuntu使用虚拟can
1. sudo modprobe vcan //加载虚拟can模块
2. sudo ip link add dev can0 type vcan //添加can0网卡
3. ifconfig -a //查看can0
4. sudo ip link set dev can0 up //开启can0
5. sudo ip link set dev can0 down //关闭can0
6. sudo ip link del dev can0 //删除can0
ubuntu调试can
安装调试工具
sudo apt install can-utils
candump --version
CAN启动
ip link set can0 down //关闭CAN
ip link set can0 type can bitrate 500000 //设置⽐特率500KHz
ip -details -statistics link show can0 //打印can0信息
ip link set can0 up //启动CAN
CAN发送
cansend can0 123#DEADBEEF //发送(标准帧,数据帧,ID:123,date:DEADBEEF)
cansend can0 123#R //发送(标准帧,远程帧,ID:123)
cansend can0 00000123#12345678 //发送(扩展帧,数据帧,ID:00000123,date:DEADBEEF)
cansend can0 00000123#R //发送(扩展帧,远程帧,ID:00000123)
CAN接收
candump can0



![]()
using SocketCANSharp;
using SocketCANSharp.Network;
using System.Text;
namespace CanCore
{
internal class Program
{
public static string ToHexString(byte[] bytes)
{
string hexString = string.Empty;
if (bytes != null)
{
StringBuilder strB = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
strB.Append(bytes[i].ToString("X2") + " ");
}
hexString = strB.ToString();
}
return hexString.Trim();
}
static void Main(string[] args)
{
CanNetworkInterface vcan0 = CanNetworkInterface.GetAllInterfaces(true).First(iface => iface.Name.Equals("can0"));
using (var senderSocket = new RawCanSocket())
using (var receiverSocket = new RawCanSocket())
{
senderSocket.Bind(vcan0);
receiverSocket.Bind(vcan0);
int bytesWritten = senderSocket.Write(new CanFrame(0x123, new byte[] { 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }));
while (true)
{
int bytesRead = receiverSocket.Read(out CanFrame frame);
if (bytesRead > 0)
{
Console.WriteLine($"bytesRead:{bytesRead},CanId:{frame.CanId},Data:{ ToHexString(frame.Data) }");
}
Thread.Sleep(1000);
}
}
Console.ReadLine();
}
}
}



















