- 博客(63)
- 收藏
- 关注
原创 CAN通信
CAN通信与IIC、SPI等通信协议不太一样,它是一种局域网络通信,是由博世最早开发的。最开始主要用于汽车,现在很多地方都用到了。汽车通信网络如下图。
2024-07-23 23:48:08 579
原创 linux网络驱动(以太网)
由于最近要做一个MCU的以太网通信,学习一下以太网。由于过来实习没带MCU,只能继续做一下SOC,所以这期还是imx6ull的以太网(以下简称网络)驱动。
2024-07-16 23:51:41 1381 1
原创 imx6ull----IIC--AP3216C
数据传输的时候要保证在 SCL 高电平期间, SDA 上的数据稳定,因此 SDA 上的数据变化只能在 SCL 低电平期间发生,意思就是在SCL低电平的时候SDA才能改变电平,在SCL为高电平时读取数据,SDA的高低电平就是数据的01.另一种是告诉我们,比如读是0xaa,写是0xab,这是因为把读写位放在第八位,地址为实际上是高七位的0x55(1010101),但在我们驱动开发的时候,读写位是通过一些寄存器直接发送的,所以我们发地址的时候是分开的,还是只用低7位。它的地址是0x1E,这是芯片厂商规定好的。
2024-04-25 12:26:28 350
原创 imx6ull -- SPI
SPI 是 Motorola 公司推出的一种同步串行接口技术,是一种高速、全双工的同步通信总线, SPI 时钟频率相比 I2C 要高很多,最高可以工作在上百 MHz。SPI 以主从方式工作,通常是有一个主设备和一个或多个从设备,一般 SPI 需要4 根线,但是也可以使用三根线(单向传输)。
2024-04-23 22:44:24 831
原创 imx6ull设备树驱动--pinctl、ioctl
进入arch/arm/boot/dts目录下dts文件在iomuxc下添加pinctl+led节点将 GPIO1_IO03 这个 PIN 复用为 GPIO1_IO03,电气属性(配置GPIO一些列寄存器)值为 0X10B0。
2024-04-21 22:49:15 298
原创 正点原子阿尔法无法挂载nfs根文件系统
本来是跟着用户指南配置busybox的,结果搞了一下午,最后挂载不上。搜了很多文章,最后在这篇之后好了。直接用配置好的根文件系统。
2024-04-17 22:57:45 171
原创 imx6ull构建根文件系统
进入gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib。进入刚解压的gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linuxgnueabihf/libc/lib。进入gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib。
2024-04-17 09:44:24 244
原创 imx6ull官方源码linux内核移植
在正点原子给的资料里找到NXP官方原版linux源码,路径为: 1、例程源码->4、 NXP 官方原版 Uboot和 Linux->linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2。复制并解压。修改顶层Makefile编译一下make -j16出现以下错误修改就可以了。
2024-04-16 18:43:10 455
原创 imx6ul uboot移植
1.解压uboot2.复制config并修改3.复制头文件修改4.复制板级文件夹5.修改里面的文件(左上角是文件名)修改Kconfig(添加)新建脚本2.进入uboot目录下修改Makefile编译完成后如图。
2024-04-15 21:40:51 456
原创 杂项设备驱动和自动创建设备结点
make uImage --------》 板子运行。misc_register 参数是我们上个结构体的地址。misc_deregister删除设备,驱动注销时也要写上。1.填充结构体 miscdevice。这个结构体我们就用前三个成员,如下。我们复制一个以前的驱动文件修改。2.注册杂项设备、生成设备结点。然后就可以向板子上添加了。
2024-04-12 13:09:30 186
原创 内核驱动更新
2.在Kconfig里面修改设备,bool(双态)-----》tristate(三态)4.编译内核 make modules。3.进入menuconfig修改为M。也许你会看到一个 .ko 文件。.c 文件末尾加上。5.复制到根目录文件下。1.声明我们是开源的。
2024-04-11 22:38:09 286
原创 arm内核驱动-中断
用wake_even_interruptible这个卡死就可以被中断,也可以用wake_even_timeout,设置超时时间,当时间到了还在之前的地方就会被强制打断,上图红字所示。这里用的wake_even_interruptible而不用wake_event,如果是wake_event,在进入底层后,程序调度无法影响到它。irq:中断号,就是我们上面第一张图所显示的,这里是K1的EINT8。后面两个参数就是中断的名字和我们给回调函数传的参数,不在赘述。handler:中断回调函数,懂的都懂。
2024-04-11 22:04:39 504
原创 更换make版本问题解决
define __alloca alloca //stat也是一样的。显示未定义_stat 或者 __alloca未定义。如果报错man1文件已经存在了,就去相应目录下删除man1。找到make-4.1/glob/glob.c。tar -xvf 解压到ubuntu。在make的时候,可能会报错。重新make install。make install时。再次make -v查看版本。
2024-04-11 16:54:14 178
原创 linux内核驱动-在内核代码里添加设备结点
这是我们在编写内核驱动代码时特别的写法,目的就是告诉操作系统这个函数是内核的初始化以及追销的函数。我们在用户层用一些系统函数(如:fopen等等)时,会进入内核,内核会在字符注册了的设备号链表中查找。其实还是对寄存器的操作,然后把这些操作再移植到之前提到的系统给我们提供的函数(指针),最后去调用这些函数就行了。到这里我们的内核就添加了一个我们自己的驱动,但这个驱动文件里只有一些打印,我们想要实现硬件功能怎么办呢。我们在前面已经讲了怎么创建一个内核程序,我们在驱动文件的目录下创建我们自己的驱动程序。
2024-04-10 22:38:04 456
原创 linux启动流程(s3c2400)
大致流程:内核(kernel)都是由bootloader程序引导启动的,所以我们应该先烧进去bootloader程序。然后可以通过保存的内核代码或者通过远程连接(nfs/tftp)的主机下载再运行,再挂载根文件系统。
2024-04-09 17:09:48 357
原创 armlinux裸机-uart
uart是一对一的串行异步全双工通信通信协议,串行速度较慢(usart支持同步通信)我们使用S3C2440芯片,具体寄存器操作可以查看用户手册。为满足使用需求,我们一般都用带fifo缓冲中断。
2024-04-07 13:21:32 419
原创 armlinux-外部中断
应该遵守先关前面的中断源开关,再关后面的挂起标志。因为是前者产生的后者,不关前者就会一直产生后者。红色区域是对中断的处理,自定义。蓝色是对中断的关闭,需要用到的寄存器就是代码上的那些。由于是按键的外部中断,通过引脚的高低电平来触发。如果我们单纯配置一个按键的外部中断,就不存在子中断与优先级的问题。I=1时,IRQ(中断模式)被禁止;还要初始化中断的寄存器: 中断屏蔽(INTMSK)寄存器。通过用户手册可以看到,我们需要初始化IO口配置的寄存器有。我们还要配置程序状态寄存器CPRS的I位,打开中断。
2024-04-05 20:25:08 553
原创 arm裸机-1、定时器pwm
我们使用s3c2440,主频12M,查看用户手册通过锁相环抬升到400MHZ,分成三条通路,通过HHDIVN和PDIVN配置频率比,这个频率比配置手册已经给出。配置MPLL主频400Mhz,通过这个公式算出MPLLs、p、m都已经给出,事实上手册已经给出了一些普遍的值。这里我们选择127-2-1代码如下。
2024-04-04 22:38:20 275
原创 arm裸机(1)、点灯|按键
大意为我们在相应引脚赋1就是高电平,0就是低电平。学过51单片机的同学应该很熟悉。只不过这里用了寄存器。首先看原理图,led_1234分别对应引脚GPB 5678。芯片是S3C2440。
2024-04-03 22:13:50 244
原创 线程的两个示例--线程池与线程邮箱
在硬件资源充裕条件下,把线程的创建放在程序初始化阶段,避免后期需要用到进程时动态创建而浪费的时间 ------------------用空间换时间道理很好明白,直接上代码-------------------------上当了,此处省略略---
2024-03-27 22:29:15 364 1
原创 linux-开发板移植MQTT
链接:https://pan.baidu.com/s/1kvvO-HhDMDXkQ_wlNtyW_A?pwd=332i提取码:332i以下步骤教程里都写了,我这里边进行,方便大家对照。
2024-03-25 22:34:59 571
原创 并发通信(网络进程线程)
如果为每个客户端创建一个进程(或线程),因为linux系统文件标识符最多1024位,是有限的。所以使用IO复用技术,提高并发程度。
2024-03-11 21:08:11 1182
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人