赟赟、嵌入式
从事于嵌入式软件开发的工作,Qt软件应用和驱动调试和单片机软件开发,请多多指教,相互学习。。。。
展开
-
IMX6Q基于kernel3.0.35版本调试GT9xx触摸屏
第二个需要注意的点是:中断获取触摸坐标点后,需要往寄存器中清0,不然 会出现一种问题,中断函数不断在打印。而linux3.0.35是没有设备树,需要通过加载板级初始化文件board-mx6q_sabresd.c来初始化各个总线接口,串口,网口,GPIO等。linux内核高版本都是在设备树DTB中配置好节点,然后驱动加载时device_id和设备树的compatible是否匹配得上。由于qt版本的原因,上报的事件只能识别到ABS_X,ABS_Y事件。这是第一个需要注意的点:设置设备的输入参数类型。原创 2024-05-29 13:55:13 · 67 阅读 · 0 评论 -
IMX6Q基于linux4.1.15调试音频芯片tas2505
获取时钟频率,因为我这边用的是外部晶振,不是使用CPU引脚MX6QDL_PAD_GPIO_0__CCM_CLKO1输出时钟的。如果上面of_match_table 的字符串跟设备树匹配上的话,接下来进入imx_tas2505_probe函数,这里我想说说设置ssi和audmux的方向问题,要么是由CPU输出BCLK,WCLK给音频芯片;tas2505_dai中的name变量名需要跟imx-tas2505.c中struct snd_soc_dai_link中的codec_dai_name变量名一样。原创 2024-05-29 13:53:18 · 282 阅读 · 0 评论 -
RK356x基于Ubuntu20.04搭建ROS开发环境
一开始我以为Qt的plugin没有设置到export的环境变量导致的,其实不是,只需以下指令。然后重新执行就可以了。网上大多数是去执行乌龟那个程序。安装ros-noetic-desktop-full。操作系统:arm64 Ubuntu20.04。1、首先确保开发板是可以联网的。5、向系统导入ROS环境变量。可能会出现以下错误打印信息。4、安装ros完整的依赖项。6、启动roscore。有可能出现以下报错信息。有可能出现以下报错信息。7、启动rviz工具。原创 2024-01-18 09:12:17 · 394 阅读 · 0 评论 -
linux arm64 Debian12移植操作手册
2023年6月10号Debian官方出了debian12 arm64版本的。如果需要完全适配这个系统的话,需要linux6.10版本。应客户的需求,需要在Debian11升级为Debian12版本。原创 2023-10-27 15:39:22 · 683 阅读 · 0 评论 -
linux uboot制作自定义菜单指令menu
由于有时候需要不同类型的屏幕显示,但是来回烧写又显得非常的麻烦,遇到上述问题的话,我们可以采取以下方法去解决刚刚的问题。尝试过在STM32MP157,RK356X,RK3588里使用。U_BOOT_CMD()函数。原创 2023-09-12 11:37:56 · 341 阅读 · 0 评论 -
linux armhf ubuntu18.04搭建docker
这次搭建docker的环境过程非常的坎坷,一波三折,docker的报错信息一大堆,然后发现这一大堆基本上都是内核没有配置导致的,网上的资料也有限,基本上没有描述docker的报错解决问题。为什么第二步在安装docker的时候会报各种的错误提示呢,这些错误提示的根源就是linux内核,正常来说,有好多配置内核都是默认屏蔽的,所以,需要我们去手动打开,重新去编译。但是往往安装完第四步后,docker的服务是无法正常启动的,会报一堆的错误提示。如果完成第二步和第三步的话,应该docker是能正常运行的了。原创 2022-12-23 14:38:20 · 2394 阅读 · 0 评论 -
linux驱动 usb转串口ch344 改变读取缓冲区大小
首先客户提出这个问题,我的第一个想法是这是个正常现象,因为我在做应用APP的时候,其实串口发送数据指令的时候,也会偶尔出现一条指令突然截断,先接收到帧头+命令字+类型,然后再接收到长度+数据内容+帧尾这类的情况,就此我们常常会在接收串口的函数中加以判断是否是一条完整的指令。果不其然,看到acm->readsize=128,跟现象截断的字节数刚好一样,然后我尝试单单修改acm->readsize=256,串口无法正常使用,证明readsize肯定跟其他值相关联的,仔细看了下代码,我认为跟这个有关系。原创 2022-11-29 09:37:12 · 1425 阅读 · 0 评论 -
基于imx6ul调试DP83848以太网PHY控制器笔记
感觉是没有信号传输到PHY控制器上,一开始我是还以底板上的差分信号线的问题,然后看了下原理图,看到了DP83848芯片中X1引脚是使用外部晶振的同时还用了CPU内部输出时钟频率,有可能导致了两个频率冲突了。最后,就是在MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2替换成MX6UL_PAD_ENET2_TX_CLK__ENET2_TX_CLK。首先是用示波器测量一下X1处的时钟频率,发现虽然有50MHZ输出,但是波形却有点杂乱,更加让我觉得是这个影响了网口通信。原创 2022-10-26 16:29:04 · 965 阅读 · 0 评论 -
基于imx6ul下调试tlv320aic3x声卡
因为这次声卡芯片是tlv320aic3101,从网上搜相关的资料可谓是少之又少,基本上都是有linux2.6版本的,基本上都是没有用到设备树DTB去适配,看了一下内核源码linux4.1.15只有sound/soc/codecs有tlv320aic3x.c和tlv320aic3x.h这两个文件,而sound/soc/fsl/就没有驱动tlv320aic3x的驱动文件。需要自己从网上去下载或者参照imx-sgtl5000.c去重新写一个。内核版本:linux4.1.15。核心板:imx6ul。原创 2022-10-21 17:18:00 · 985 阅读 · 0 评论 -
IMX6 SD卡启动过程中无法挂载文件系统
报错打印信息:解决办法:这可能是由于SD卡有SD-WP引脚,导致了写保护,只读模式。修改内核Kernel 中driver/mmc/card/block.c。原创 2022-08-30 10:50:53 · 496 阅读 · 0 评论 -
IMX6 EMMC、SD卡启动引脚配置及uboot修改为SD2启动
解决办法:把ret =!完成了这一步,就大功告成了。这就导致了按照之前的拨码开关去启动,完全没有串口打印信息,就相当于SD卡启动失败,CPU无法找到SD卡中的uboot加载到内存中启动。有很大可能是因为board_mmc_getcd获取不到正确的CD引脚,导致了return返回值为0,打印出了“MMC: no card present”。追踪board_mmc_init()函数,board_mmc_getcd()函数在board/freescale/mx6sabresd/mx6sabresd.c文件上。..原创 2022-08-30 10:09:47 · 1291 阅读 · 0 评论 -
linux 触摸屏多点触摸改成单点触摸 驱动调试
平台:imx6dl触摸屏芯片:gt911内核板本:linux4.1.5驱动文件:goodix.c需求:客户在Qt应用端使用触摸屏,使用多点触摸会出现问题,所以,需要改成单点触摸。直接一步到位,将goodix_read_config(struct goodix_ts_data *ts)函数中的读取到的ts->max_touch_num 数值改为1;这样的话,其他地方就不需要作改动了。其中input_mt_init_slots这个函数是上报触摸点的数量,其中unsigned int num_slot原创 2022-07-08 17:19:54 · 1445 阅读 · 0 评论 -
触摸屏gt9xx系列芯片驱动调试
平台:STM32MP157触摸屏芯片:gt911驱动:goodix.c现在很多平台都使用gt9xx系列的触摸屏,我在imx6dl平台和imx6ull平台都调试过这个芯片。这次刚好调试157平台遇到了一些小麻烦。建议:调试某些驱动的时候,可以把它编译成模块加载进去,这样不需要每次都替换内核uImage,重新上电才能生效,只需要把insmod,rmmod一下就可以了。节省了很多时间,另外还可以清晰看到打印信息,不需要在内核启动信息那找相关的信息。设备树配置由于原理图触摸屏的I2C是连接到核心板的I2C原创 2022-07-06 11:34:51 · 3873 阅读 · 0 评论 -
linux 驱动手动配置GPIO口必不可少的几个函数
如果有MMU(内存管理单元),都需要地址映射,这也意味着我们不能直接对物理地址进行操作。需要在物理地址对应的虚拟地址进行操作,这时候,我们就需要以下这个参数:void __iomem * ioremap(resource_size_t res_cookie, size_t size)resource_size_t res_cookie:物理地址的起始地址size_t size:映射的内存长度//释放映射void iounmap (volatile void __iomem *addr)volatil原创 2022-06-23 16:18:15 · 435 阅读 · 0 评论 -
基于STM32MP157调试MIPI-DSI屏幕
平台:STM32MP157屏幕:mipi-dsi接口,1024x600内核版本:linux5-4本人是第一次调试mipi屏,在157这个平台上遇到的问题有一点多,接下来简单的描述下我的调试经验二、驱动选择在STM32MP157的源码中,自带了一个文件名为panel-simple.c通用驱动。之前已经在这个文件调通了LCD屏幕,打开文件可以看到,其实这个文件也是可以兼容mipi-dsi的屏幕。可能有些屏幕可以使用这个文件去调试,注意是看看CONFIG_DRM_MIPI_DSI这个选项有无有选择。而我原创 2022-06-10 11:13:26 · 5094 阅读 · 5 评论 -
imx6 LAN8720A网口上电后连接不稳定link up,link down(二)
上一章通过硬件复位的方式去解决网口在系统启动后不稳定。由于领导想不用焊电阻的方法(因为原本网口的复位脚是没有焊接的)去解决这个问题,问题来了,只能通过纯软件改写固件。这几天可谓是头疼。接下来说的一切前提环境是在是使用 CPU引脚输出50MHZ的时钟频率。现象一:上电后,uboot的网口正常这个是一直让我搞不懂。。。直到我老大让我去测试一下在进入到系统后,使用reboot指令重启进入到uboot我才知道。这样做法就验证了其实是上电的问题,导致了phy芯片一开始工作正常。现象二:进入到内核kernel原创 2022-04-26 16:06:06 · 4360 阅读 · 0 评论 -
imx6网口上电后连接不稳定link up,link down
问题:网络不稳定,插入网线后,一直重复link up,link downfec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/txIPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes readyfec 2188000.ethernet eth0: Link is DownIPv6: ADDRCONF(NETDEV_UP): eth0: link is not read原创 2022-04-19 10:25:18 · 4968 阅读 · 0 评论 -
Linux 动态、静态网络设置
Linux 动态、静态网络设置原创 2022-03-08 15:15:23 · 1439 阅读 · 0 评论 -
stm32mp157 wm8960音频驱动调试笔记
这次调试wm8960音频驱动遇到了好多的坑,研究好几天终于调试好了。驱动调试步骤驱动能不能成功加载是调试的第一大步骤,也是最关键的步骤之一。1.查看硬件原理图:2.打开对应的设备树(stm32mp157a-xxx.dtsi):因为wm8960是挂载到I2C4上,所以在设备树I2C4节点上添加wm8960设备节点。wm8960: wm8960@1a { compatible = "wlf,wm8960"; reg = <0x1a>; #原创 2021-09-16 15:38:25 · 3432 阅读 · 0 评论 -
imx6调试Lvds屏幕技术笔记
打开相对应的设备树文件 mxcfb1: fb@0 { compatible = "fsl,mxc_sdc_fb"; disp_dev = "ldb";//显示设备 interface_pix_fmt = "RGB24";//格式 default_bpp = <32>; int_clk = <0>; late_init = <0>; status = "okay";};&ldb { status = "okay"; dual原创 2021-09-24 09:19:56 · 1517 阅读 · 0 评论 -
wifi ap6212驱动移植及调试分析技术笔记
这次帮客户调试wifi模块ap6212模块( BCM43438),由于硬件设计的问题,导致出现了各种驱动加载报错信息,而且网上很少这些报错信息,这才让人头疼,只好慢慢去摸索。本次是基于imx6平台进行调试,在imx6dl和imx6ul两个型号都调试成功。驱动加载将驱动加载到内核里,我没有将wifi编译成模块.ko,如果成功加载会打印以下信息。dhd_module_init inPower-up adapter 'DHD generic adapter' - irq 50 [flags 1044],原创 2021-11-11 15:10:10 · 11133 阅读 · 22 评论