苦逼的研究生被导师压榨,连续肝3个项目同时进行,累死我了,咱们要好(fa)好(qi)学(fan)习(kang),天(顺)天(来)向(逆)上(受)。好了不闹了。
2022年5月10日20:26:28
浅谈linux驱动开发到imx6ull上,简单点说ubuntu下tftp通讯搭建好,imx6ull内核编译好,就打开万能的vscode,然后编译,通过tftp发送到核心板,多简(kun)单(nan)。具体看正点原子37linux内核移植,40字符设备开发,62spi驱动实验
spi驱动:CPOL, CPHA两个模式是spi通讯的基础,因为两个clk需要对应,所以通过极性和相位来合拍,所以就是这两参数设置模式的。具体程序参考正点原子的,我只是一个小白闪闪可怜没人爱,技术还菜。
实现的功能:spi不断发送数据。至于代码,抄啊,copy啊。
在驱动汇总写好myspi_write具体的函数
然后驱动和上一层关联
.write = myspi_write,
主函数调用write即可,其余和c语言编程一样
static s32 myspi_write(struct icm20608_dev *dev, u8 *buf, u8 len)
{
int ret;
unsigned char txdata[len];
struct spi_message m;
struct spi_transfer *t;
struct spi_device *spi = (struct spi_device *)dev->private_data;
t = kzalloc(sizeof(struct spi_transfer), GFP_KERNEL); /* 申请内存 */
gpio_set_value(dev->cs_gpio, 0); /* 片选拉低 */
/* 发送要写入的数据 */
t->tx_buf = buf; /* 要写入的数据 */
t->len = len; /* 写入的字节数 */
spi_message_init(&m); /* 初始化spi_message */
spi_message_add_tail(t, &m);/* 将spi_transfer添加到spi_message队列 */
ret = spi_sync(spi, &m); /* 同步发送 */
kfree(t); /* 释放内存 */
gpio_set_value(dev->cs_gpio, 1);/* 片选拉高,释放ICM20608 */
return ret;
}
//以下是主函数
filename = argv[1];
fd = open(filename, O_RDWR);
if(fd < 0) {
printf("can't open file %s\r\n", filename);
return -1;
}
while (1) {
ret = write(fd,databuf,sizeof(databuf));
if(ret == 0) {
printf("send:ok");
}
usleep(100000); /*100ms */
}
程序弄好以后,改一下makefile的输出xxxxx.o,之后在vscode的控制台中make -j32下就行
2023年7月3日12:36:35
我擦,一年前写的项目,那么一年后又回来继续搞,老板在催了。搞了pcb图
先来欣赏一下布线,看着就舒服