嵌入式开发
文章平均质量分 86
嵌入式开发记录
赏善罚饿
被编程耽搁的股民
展开
-
STM32F0 硬件I2C读取AT24C64
AT24C32、AT24C64都是大容量的,寄存器地址要用16位如果I2C总线上只挂一个芯片,直接把写保护、A0、A1、A2全部拉低即可I2C的读可以跨页,但是不能跨块,AT24C08等小容量的块大小是256K字节,AT24C64的块大小是8192字节,而且读的字节数越多,中间出错的概率也变大了,因此不建议一次性读取太多的字节数。I2C的写是不能跨页的,因此要做到忽略硬件页的影响,需要自己设计算法,把应用层的一次写,在底层分为多次写来实现。原创 2023-01-08 10:30:38 · 2632 阅读 · 0 评论 -
SVN客户端使用详细
SVN的使用,全功能讲解原创 2022-08-14 22:35:04 · 1208 阅读 · 0 评论 -
用VSCode做STM32项目遇到的问题
vscode下做STM32项目遇到的问题,比如无法跳转到函数定义原创 2022-08-13 18:28:44 · 2832 阅读 · 2 评论 -
海思UVC调试
前言本文记录一下这几天调试海思UVC的心得,本次使用的芯片及SDK是海思3531DV100,最终的结果是两路USB摄像头接入海思的两个USB(不同的root hub),HDMI输出四分屏,显示两个摄像头的画面参考过的文章如下:https://blog.csdn.net/zhenglie110/article/details/89360312https://blog.csdn.net/zhenglie110/article/details/89360423https://blog.csdn.net原创 2020-12-02 10:24:50 · 3936 阅读 · 2 评论 -
STM32硬件I2C的一点心得(AT24C32C和AT24C64C)
前言网上有些人说STM32的硬件I2C使用起来有问题,我用起来一点问题都没有,下面大致说一下最近做这个的心得CubeMX设置软件采用最新的CubeMX和SDK生成,芯片型号STM32F107RC首先时钟使用常规的72M,这部分配置很多芯片都一样I2C的配置也是普普通通,保持默认就好,不使用DMA传输I2C初始化代码以下代码由CubeMX自动生成,在用户代码区(USER CODE)添加了解除写保护WR的代码,除此之外没有其它修改void MX_I2C1_Init(void){ hi原创 2020-11-24 14:15:19 · 8402 阅读 · 3 评论 -
海思3531d下的tlv320aix3101音频驱动及sample
前言目前一直在使用海思的hi3531dv100芯片,声卡已经调过tlv320aic3254和tlv320aix3101官方SDK中 mpp/extdrv中提供了一个文件夹tlv320aic31,但是部分设置并不是很完美,因此根据自己硬件的不同,做了部分调整下载连接https://download.csdn.net/download/whitefish520/13010235硬件连接左边是I2S和I2C右边是输入和输出声卡驱动/* * * Copyright (c) 2006 Hisi原创 2020-10-22 13:31:45 · 6625 阅读 · 0 评论 -
嵌入式QT的键盘鼠标和触摸屏支持
在不使用触摸屏的情况下,嵌入式QT对多个键盘鼠标,包括热拔插,都是支持的很好的但是一旦使用了触摸屏,就会发现鼠标失效了,因为使用触摸屏,必然要使用tslib进行校准,否则屏幕的箭头是很不准的,使用了tslib,就必须在环境变量QWS_MOUSE_PROTO中指定触摸屏的设备节点,于是鼠标就不起作用了关于如何实现同时支持触摸屏和鼠标,网上有很多做法,其实无非是两种,一个环境变量QWS_MOUSE_PROTO中即指定触摸屏节点,也指定鼠标节点,但是这种有非常大的问题,就是不一定每次生成设备节点的时候,都是按原创 2020-09-18 13:52:19 · 11421 阅读 · 0 评论 -
局域网内查询嵌入式设备IP的几种方式
前言最近有个需求,所有本地海思的板子,都要能查询到他们的IP。如果是用串口调试,当然很容易知道IP,但是大部分情况下,我们还是用telnet远程连接,这时候,不知道IP就啥也干不了。因此我想着在海思的板子上跑一个服务器程序,然后在本地运行客户端程序去查询,服务器接收到数据就将自己的IP返回给客户端,这样就知道所有海思芯片的IP了。一开始是做了一个用TCP协议通信的,但是考虑到ABC三类IP加起来数量太多了,线程开太多,程序会把电脑卡死。然后又尝试了UDP广播,但是又不能做到跨网段,最终的解决方案是不使原创 2020-09-10 13:57:53 · 9611 阅读 · 2 评论 -
海思如何固定MAC地址,并且保证每个板MAC地址不同
MAC地址的组成mac地址都是由IEEE的注册管理机构RA分配给厂商,分配时只分配前三个字节,后三个字节由各厂商自行分配mac地址由IEEE组织统一管理,所有合法的mac地址都可以通过IEEE官网查询到厂商IEEE组织会定期更新oui文件,用于查询mac地址厂商oui文件包含了mac地址的注册信息,包含mac地址前缀(前三个字节)和公司名等oui文件下载地址http://standards.ieee.org/develop/regauth/oui/oui.txt可以在浏览器中下载或通过wg原创 2020-09-07 16:47:04 · 9708 阅读 · 1 评论 -
rockchip的调试手段
NFS在rockchip的sdk中,一般默认情况下是不打开NFS功能的,这给习惯使用NFS挂载的人带来了一定的麻烦,不过稍微修改一下内核,就能支持NFS进入kernel目录sudo make menuconfig进行如下的修改[*] Networking support ---> Networking options ---> [*] IP: kernel level autoconfiguration [*] IP: DH原创 2020-08-25 13:45:30 · 10429 阅读 · 2 评论 -
sdk解压出现隐形错误
刚把rockchip 1808 的sdk从windows复制到linux下,检察了md5sum,都没啥问题,于是兴高采烈开始编译,没想到uboot就出现严重错误 CC arch/arm/cpu/armv8/fwcall.o LD arch/arm/cpu/armv8/built-in.o CC cmd/version.o CC common/main.o LD cmd/built-in.o LD common/built-i原创 2020-08-24 11:43:10 · 8237 阅读 · 0 评论 -
海思hi3531d音频外接codec (tlv320aic32x4)
前言为了在海思平台上使用tlv320aic3254,花了大概2个星期研究海思音频部分的手册、3254的用户手册,最终参考tlv320aic31的代码,实现了3254的驱动,同时在mpp的sample中,增加了3254对应的宏,以及相应的初始化代码,这篇文章主要是做一个阶段性的梳理参考资料资料说明ReleaseDoc\zh\00.hardware\chip\Hi3531DV100 H.265编解码处理器用户指南.pdf寄存器说明中文版ReleaseDoc\en\00.hard原创 2020-08-20 18:31:13 · 11518 阅读 · 1 评论 -
使用sil9233a芯片控制海思hi3531d的hdmi输入
前言准备用hi3531d做hdmi输入,但是只有IT6801FN的驱动ko,担心调不好,于是决定先使用原来一直用的sii9233a,这款芯片的资料比较难找,而且都是英文的,所以我先放个链接好了链接:https://pan.baidu.com/s/1Ikt8G5sJTTrnsrHmg7SLUQ 提取码:gkh7通过海思的应用层i2c接口,完成sii9233a的配置,代码较长,可以参考,从main函数看起sii9233a.c#include "sii9233a.h"#define SELF_T原创 2020-08-05 15:07:59 · 9495 阅读 · 5 评论 -
海思himm工具的使用
前言海思提供的himm工具,能在linux命令行中,直接对gpio进行操作,对于调试来说非常方便himm的位置如果已经按照要求完整地编译了海思的sdk,那么这个目录下,将生成许多工具osdrv/pub/bin/board_uclibc主要关注这两个,可以发现本质上himm就是btools-rwxrwxrwx 1 root root 45564 7月 13 10:41 btoolslrwxrwxrwx 1 root root 6 7月 13 10:41 himm ->原创 2020-07-31 11:23:05 · 14456 阅读 · 0 评论 -
Buildroot用户手册(节选)
Buildroot用户手册文章目录Buildroot用户手册前言第一部分-入门第1章 关于Buildroot第2章 系统要求强制安装的包可选的包第3章 获取Buildroot第4章 Buildroot快速入门第5章 社区资源第二部分-用户指南第6章 Buildroot配置交叉编译工具链内部工具链后端外部工具链后端外部工具链包装器/ dev管理初始化系统第7章 其他组件的配置第8章 Buildroot的一般用法make 的一些技巧了解何时需要完全重建了解如何重建软件包离线版本建立树外环境变量有效处理文件系统原创 2020-07-29 16:49:19 · 9201 阅读 · 0 评论 -
海思开机Logo的使用
前言文本记录海思hi3531d在uboot的命令行,以及启动函数中,加载logo的过程参考资料:HiMPP 开机画面使用指南.pdf图片的要求要求是jpeg、jpg格式,不然无法解码,如果你自己用ps导的图片,出现无法解码,可以尝试在一些在线的图片格式转换网站,把图片转一下格式命令行显示logo进入uboot后,不启动内核,进入命令行模式将图片通过tftp,或者从flash加载到内存中tftp方式:tftp 0x43000000 logo.jpeg读fla原创 2020-07-27 11:33:53 · 10163 阅读 · 1 评论 -
海思的rtc说明
文章目录前言使用设置获取时间设置获取闹钟时间读取、设置 RTC 内部寄存器复位 RTC 模块固定分频模式分频系数微调设置打开、关闭电池电量监测功能解决linux系统时间问题设置时区利用NTP获取网络时间前言关于海思的RTC,官方给出了一份文档RTC 应用指南.pdf里面讲到需要编译对应的驱动和应用程序,代码地址位于Hi3531DV100_SDK_V1.0.5.0\drv\rtc注意,如果你的arm-linux-gcc这个没有指向对应的工具链的话,就要先修改makefile,指定一下CC的原创 2020-07-23 19:03:43 · 9652 阅读 · 0 评论 -
H264和adpcm解码和HDMI输出(一)
文章目录系统架构及缓存池概述系统架构MPP架构视频缓存池系统的去初始化参考代码及makfileglx_hdmi.cmakefilestep1step2step3step4系统的初始化参考代码step1step2step3step4VDEC的初始化VDEC基础知识码流发送方式解码协议切换图像输出方式时间戳(PTS)处理解码图像旋转亮度统计信息用户图片解码帧存分配方式码流 Buffer 配置模式通道解码能力step1 解码缓存池的初始化参考代码:设置模块公共视频缓冲池属性创建公共视频缓存池step2 创建通道参原创 2020-07-22 15:31:16 · 10883 阅读 · 0 评论 -
海思hi3531d实现h264视频解码adpcm音频解码和HDMI输出音视频
把例子化简了,功能目前都正常#include <stdio.h>#include <string.h>#include <stdlib.h>#include <signal.h>#include <unistd.h>#include "hi_comm_sys.h"#include "hi_comm_vb.h"#include "hi_comm_vdec.h"#include "hi_comm_vpss.h"#include "原创 2020-07-15 17:30:55 · 11251 阅读 · 1 评论 -
海思芯片缩略语解释
Acronym or AbbreviationFull Name3DNRthree-dimensional noise reductionADECaudio decoderAENCaudio encodingAIaudio inputAOaudio outputASICapplication-specific integrated circuitBBbad blockBVTbroadband video terminalDD...原创 2020-07-13 16:35:24 · 10154 阅读 · 1 评论 -
海思开发记录(一):3559A开发环境搭建
说明这次安装的是Ubuntu14.04-64位系统,没有选择装虚拟机,而是物理机单系统因为在另一台电脑上,不方便截图,所以只记录重点启动u盘制作系统镜像获取:http://mirrors.aliyun.com/ubuntu-releases/u盘烧录工具:https://rufus.akeo.ie镜像选择为14.04 64位系统,桌面版(而不是服务器server版本,server版本试过安装不成功)将系统ISO文件烧录到u盘系统安装重启后进入BIOS,修改启动优先级,选择u盘启动安装原创 2020-06-11 14:21:39 · 15774 阅读 · 2 评论 -
source inside的add from list如何使用
前言现在linux内核文件越来越多,在source inside添加工程的时候,如果不加区别,全部添进去,会导致工程很大,耗时很长,而且搜索时也特别不方便,查找函数的时候,也会出现N个同名函数,让人不知道到底哪个才是最终被编译的为了解决这个问题,只需要添加编译内核的log中提到的文件即可关于这个的做法,网上有写c++程序取做替换的,有用脚本替换的,还有的写的不知道什么东西放到github让人下载的,但是都没用说明白具体的原理,实际去操作,发现并不能成功因此这篇文章将以最简单的方法,一步步教你如何去做原创 2020-07-29 10:21:11 · 8663 阅读 · 0 评论 -
RK1808 uboot的编译分析
前言为了更深入了解rk1808 sdk,对其中关于uboot部分的脚本和makefile等做一个分析主要参考文件:Rockchip_Developer_Guide_Linux_Software_CN.pdfuboot的编译根据文档的说法,编译uboot有两种方法在uboot目录下编译这种方法,先cd到uboot目录下,然后执行sudo ./make.sh rk1808在顶层目录下编译这种方法,利用底层目录的build.sh,传递参数uboot进行编译sudo ./build.s原创 2020-07-28 14:50:06 · 9824 阅读 · 0 评论 -
如何在arm-linux下支持2T硬盘
文章目录前言硬盘的分区内核的修改调试过程中遇到的其它问题默认挂载失败驱动加载失败其它报错前言因产品需要,硬盘容量从1T提升到4T,当前的磁盘的分区表为mgr,文件系统为ext3这两个选项均不支持2T以上硬盘,所以要对内核进行一些修改和调试,本文档记录调试过程中碰到的问题和解决办法硬盘的分区首先得将硬盘分区为GPT,由于arm linux上的工具比较简陋,因此暂时选择在ubuntu上做分区工作ubuntu接上硬盘后,用fdisk查看,可以得到基本的信息,比如容量2000GBsudo fdisk原创 2020-07-20 16:23:47 · 9717 阅读 · 0 评论 -
RK1808调试记录(一)
文章目录前言uboot以太网NFS网络测试工具iperf前言最近在使用RK1808,板子是公司硬件的同事做的,除了cpu外,其它元器件和电路大部分是参考的demo板,因此调试过程不是很顺利,有坑的地方我尽量记录下来uboot默认SDK里面的uboot设置有个问题,那就是启动时delay为0,当然产品可以这样做,但是调试的时候偶尔还是需要进入command line的,因此这里需要做一定的修改打开默认的配置文件:vi your_sdk/u-boot/configs/rk1808_defconfig原创 2020-07-06 18:39:46 · 15805 阅读 · 1 评论 -
TSLIB调试记录
下载源代码tar.gz压缩包,网址如下https://github.com/libts/tslib/releases在linux下面进行解压目录下运行./autogen.sh可能会报错,是因为某些软件没有安装,根据报错提示百度即可sudo apt-get install autoconf sudo apt-get install automake sudo apt...原创 2019-09-19 14:16:19 · 22602 阅读 · 0 评论 -
WG225模块(SDIO WIFI)调试记录
WG225模块(SDIO+WIFI)调试记录这是一款SDIO接口的WIFI+蓝牙芯片先调试wifi功能获取到厂家提供的WIFI驱动RTL8821CS_WiFi_linux_v5.2.8_21706_COEX20170310-1212.20170323document中的Quick_Start_Guide_for_Driver_Compilation_and_Installation会教你...原创 2019-09-19 14:13:17 · 27704 阅读 · 1 评论 -
gcc编译器常用选项及功能
文章目录gcc提供的工具gcc常用选项预处理阶段常用选项生成库文件静态链接库动态链接库链接库文件链接动态库文件链接静态库文件查看库的依赖属性动态加载库文件gcc提供的工具gcc常用选项选项说明示例-E预处理指定的源文件,不进行编译,生成.i文件gcc -E circle.c -o circle.i-S编译指定的源文件,但是不进行汇编,生成.s文件-c编译、汇编但是不连接,生成.o文件gcc -c test1.c test2.c test3.c-o原创 2020-05-29 15:49:42 · 14403 阅读 · 0 评论 -
跟我一起写 Makefile(完整版)
文章目录作者介绍概述关于程序的编译和链接Makefile 介绍Makefile的规则一个示例make是如何工作的makefile中使用变量让make自动推导另类风格的makefile清空目标文件的规则Makefile 总述Makefile里有什么?显式规则隐晦规则变量的定义文件指示注释Makefile的文件名引用其它的Makefile环境变量 MAKEFILESmake的工作方式书写规则规则举例规...转载 2020-01-15 13:36:45 · 45134 阅读 · 11 评论 -
linux设备驱动(二)
文章目录内核模块结构加载函数卸载函数许可证声明模块参数模块导出符号加载函数卸载函数模块参数参数类型权限类型导出符号模块的声明与描述作者描述版本设备表别名内核模块结构加载函数通过insmod或者modprobe加载模块时,加载函数将会自动执行卸载函数通过rmmod卸载模块时,卸载函数将会被自动执行许可证声明描述内核模块的许可权限,如果不声明,加载时将收到内核被污染(Kernel Tai...原创 2020-01-08 18:56:18 · 16389 阅读 · 0 评论 -
linux设备驱动(一)
文章目录基本概念什么是设备驱动无操作系统下的驱动有操作系统下的驱动linux设备分类字符设备块设备网络设备内核的组成源码目录结构内核主要组成部分进程调度SCHED内存管理MM虚拟文件系统VFS网络接口NET进程间通信IPC内核代码命名风格GNU C对ANSI C的拓展变长数组case语句表达式typeof关键字标号元素特殊属性说明内建函数工具链环境搭建基本概念什么是设备驱动计算机的运行,需要...原创 2020-01-08 15:47:24 · 19838 阅读 · 0 评论 -
ubuntu14.04的qemu环境搭建
文章目录前言ubuntu镜像获取官方资料的获取安装步骤安装原生的ubuntu拷贝所需资料内核编译启动qemu挂载qemu的根文件系统到本地不带GUI带GUI前言最近在拜读宋宝华老师的《Linux设备驱动开发详解-基于最新的linux4.0内核》,但是他只提供了windows下的虚拟机,因此mac用户就有点难受了。昨天自己鼓捣了一下,完成了mac上整个环境的搭建,今天在windows上重新搭建一...原创 2020-01-06 11:57:46 · 22365 阅读 · 4 评论 -
02 uboot分析之源码
uboot要做的工作关看门狗初始化时钟初始化SDRAM将程序从nand flash拷贝到SDRAM设置栈第一阶段源码分析第一步,跳转到reset.globl _start_start: b resetreset做了些啥,注释说设置cpu为SVC32模式reset: /* * set the cpu to SVC32 mode */ mrs r0,cpsr bic r0,r0,#0x1f orr r0,r0,#0xd3 msr cpsr,r0这里首原创 2020-05-23 15:37:05 · 9349 阅读 · 0 评论 -
03 uboot命令的实现和内核启动
uboot命令的实现先分一下,uboot如何解析我们输进去的命令,其中argv[x]就是用来保存每一条指令,uboot支持多条命令一起输入,用分号;隔开/* Extract arguments */ if ((argc = parse_line (finaltoken, argv)) == 0) { rc = -1; /* no command at all */ continue; }然后是在表中查找是否有输入的命令,后续还要做一些命令合格性的检查/* Look up com原创 2020-05-23 15:36:14 · 9836 阅读 · 0 评论 -
01 uboot的配置和编译
文章目录uboot编译体验windows与linux的启动过程对比uboot编译uboot烧录uboot菜单希望uboot实现的功能uboot Makefile分析分析配置过程编译过程的分析分析Makefile的收获uboot编译体验windows与linux的启动过程对比windowslinux上电上电BIOSBootLoader引导操作系统启动linux内核识别磁盘挂接根文件系统运行应用程序运行应用程序BootLoader的最终目的:启动原创 2020-05-20 23:17:32 · 9189 阅读 · 0 评论 -
USB协议入门
文章目录USB是什么USB解决什么问题USB-OTGUSB的特点USB的拓扑结构USB的电气特性USB的插入检测机制USB描述符USB设备的枚举过程USB包结构和传输过程包的结构包的分类令牌包数据包握手包特殊包USB的四种传输类型USB事务批量传输中断传输同步传输控制传输端点类型与传输类型的关系USB是什么说法一:you sb,你是沙雕说法二:美国USA的弟弟USB说法三:通用串行总线(universal serial bus)USB解决什么问题简化PC与外围设备的连接,增加易用性因为外围原创 2020-06-15 15:27:46 · 10200 阅读 · 1 评论