武汉万象奥科

  • 2025-01-07
  • 发表了主题帖: Linux文件系统的安全保障---Overlayroot!

    `overlayroot` 是一种使用 OverlayFS 实现的功能,可将根文件系统挂载为只读,并通过一个临时的写层实现对文件系统的修改。这种方法非常适合嵌入式设备或需要保持系统文件完整性和安全性的场景。下文以 RK3568 平台为例,介绍制作 overlayroot 的详细步骤。   ​   1. 制作精简文件系统ramdisk 1.1   环境准备 1. 目标系统:确保系统支持 OverlayFS(内核版本 ≥ 3.18)。 2. 工具和依赖:  一个支持 OverlayFS 的 Linux 内核。 `busybox` 或其他必要的系统工具。 1.2   OverlayFS 的基本原理 OverlayFS 将文件系统分为以下两层: Lowerdir:只读的底层文件系统,通常是现有的根文件系统。 Upperdir:可写的顶层,存储所有的临时更改。 Workdir:OverlayFS 的工作目录,用于支持文件操作。 1.3   制作步骤 1.3.1    创建 OverlayFS 配置结构 首先创建一个工作目录来组织文件系统结构。 mkdir -p /tmp/ramdisk/{bin,sbin,etc,proc,sys,dev,tmp} bin 和 sbin:存放用户工具(例如 busybox)。 etc:存放必要的配置文件。 proc、sys、dev:为内核文件系统挂载预留的挂载点。 tmp:用于临时存储文件。 将 busybox 和相关依赖文件复制到适当的目录 1.3.2   配置挂载脚本 在ramdisk 的脚本中配置相关的挂载和优化 root_rw=/userdata   #读写挂载点 root_ro=/root-ro   #只读文件系统挂载点 ROOTMNT=${rootmnt} # use global name to indicate created outside this OVERLAYROOT_DEBUG=0 #优化userdata分区自动修复 e2fsck -y /dev/disk/by-partlabel/userdata tune2fs -O has_journal /dev/disk/by-partlabel/userdata   2. ramdisk.img 镜像打包和解包制作 2.1 打包脚本 创建脚本 pack_ramdisk.sh,将 RAMDisk 内容打包为 ramdisk.img: #!/bin/bash cd ramdisk_contents find .| cpio -o -H newc >../ramdisk.cpio gzip ../ramdisk.cpio mv ../ramdisk.cpio.gz   ../ramdisk.img   2.2 解包脚本 创建脚本 unpack_ramdisk.sh,将 ramdisk.img 解包到工作目录: #!/bin/bash mkdir ramdisk_contents cd ramdisk_contents gunzip -c ../ramdisk.img > ramdisk.cpio cpio -idv < ramdisk.cpio rm ramdisk.cpio 通过上面打包解包脚本可以直接修改已经制作好的ramdisk.img镜像 3. 打包到boot.img 3.1 配置项目文件 在项目 defconfig 文件中,添加以下内容: RK_USE_FIT_IMG=y RK_BOOT_FIT_ITS="bootramdisk.its" RK_RAMDISK_IMG="ramdisk.img" 在 rk356x_bsp/device/rockchip/common/scripts/mk-kernel.sh 文件中添加打包逻辑:                           if[-n "$RK_BOOT_FIT_ITS"]; then                                    if[-z "$RK_ROOTFS_INITRD"]; then                                             run_command \                                                      "$SCRIPTS_DIR/mk-fitimage.sh" \                                                      "build-$VANXOAK_CUSTOMER_NAME/kernel/$RK_BOOT_IMG" \                                                      "$RK_BOOT_FIT_ITS" \                                                     "build-$VANXOAK_CUSTOMER_NAME/$RK_KERNEL_IMG" \                                                      "build-$VANXOAK_CUSTOMER_NAME/kernel/$RK_RAMDISK_IMG"                                    fi                           fi 4. Kernel 配置与设备树修改 4.1 设备树配置修改 修改设备树文件 chosen 节点,添加 overlayroot 参数:     chosen: chosen {                   //bootargs = "earlycon=uart8250,mmio32,0xfe660000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rw rootwait";                   bootargs ="earlycon=uart8250,mmio32,0xfe660000 console=ttyFIQ0 root=PARTLABEL=rootfs rootfstype=ext4 ro rootwait overlayroot=device:dev=PARTLABEL=userdata,fstype=ext4,mkfs=1 coherent_pool=1m systemd.gpt_auto=0 cgroup_enable=memory swapaccount=1 swiotlb=0x10000 net.ifnames=0";          }; 4.2 修改内核配置 确保内核启用了 OverlayFS: CONFIG_OVERLAY_FS=y 5. 测试效果与优化 将更新后的 boot.img 刷写到开发板,重启后执行: df -h 输出类似以下内容: root@hd-rk3568:~# df -h 文件系统        容量   已用   可用已用% 挂载点 udev            963M   8.0K   963M    1%/dev tmpfs           196M   1.3M   195M    1%/run /dev/mmcblk0p6   3.2G   3.1G     0   100%/root-ro /dev/mmcblk0p8   23G   590M   23G    3%/userdata overlayroot      23G   590M   23G    3%/ 添加完上面内容后,更新boot.img到开发板,执行df -h命令可以看到rootfs分区挂载为/root-ro变为只读分区,userdata分区挂载为overlayroot保存文件系统修改差异部分。若要重置系统状态,只需清空userdata内容即可。   6. 总结 通过以上步骤,您可以成功为 RK3568 平台配置 overlayroot。这种设置使得系统文件更加安全,同时提供灵活的更新和重置能力,非常适合嵌入式场景。

  • 2024-12-11
  • 发表了主题帖: 低成本解决方案,RK3506的应用场景分析!

    RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。 RK3506核心板主要分为三个型号,各型号间的区别如下图: ​   图 1  RK3506核心板处理器型号   场景1:显示HMI RK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开机。支持720P 30FPS视频软解,可进行H.264、MJPEG解码。     图 2  快速启动     图 3 工业HMI场景应用框图 场景2:工业通信 RK3506核心板支持双路百兆网、2路CANFD、6路UART,满足常规工业领域的控制及通信要求。此外,该处理器支持DSMC总线,可方便通过FPGA扩展更多资源。     图 4  丰富的资源接口 场景3:PLC控制应用 RK3506核心板平台支持AMP多核异构多系统,支持Linux、 RTOS、 Bare-metal组合的AMP系统架构,可实现2xCortex-A7 Linux + 1xCortex-A7 RTOS+ Cortex-M0 HAL或3xCortex-A7 RTOS + Cortex-M0 HAL的应用结构。(提供标准RPMsg核间通信方案)   项目 绑定实时核心不参与系统其他调度 关闭一个A7核心,绑定实时核心不参与系统其他调度 CPU 3*Cortex-A7 2*Cortex-A7 CPU频率 1.3GHz 1.3GHz DDR 16bit DDR3 800MHz 16bit DDR3 800MHz L1 Cache 16 KB I/D 16 KB I/D L2 Cache 128 KB 128 KB Preempt-RT(加压延迟) ≈62us ≈62us Xenomai(加压延迟) ≈68us ≈68us 加压:使用stress-ng加负载测试 绑定实时核心:cyclictest运行在隔离核心 支持EtherCATIgH,并做了专项优化,实时性能测试,可做到1ms控制,抖动延时90us。     图 5  RK3506 AMP多系统方案 场景4:工业手持机 在HMI解决方案的基础上,搭配优秀的功耗控制策略,该产品非常适合于小型手持机场景。RK3506核心板满载功耗低,且温升小。     图 6 待机功耗表现 万象奥科推出邮票孔RK3506核心板、RK3568卡片电脑,更多行业场景与您一同探索!  

  • 2024-12-05
  • 发表了主题帖: RK3506各型号间有什么差异?

    RK3506单板机(卡片电脑)是一款高性能三核Cortex-A7处理器,内部集成Cortex-M0核心,RK3506单板机具有接口丰富、实时性高、显示开发简单、低功耗及多系统支持等特点,非常适合于工业控制、工业通信、人机交互等应用场景。  多核异构3xCortex-A7+Cortex-M0  外设接口丰富,板载网络、串口、CAN总线  支持Buildroot、Yocto系统,支持AMP混合部署  支持2D硬件加速,适用于轻量级HMI     目前RK3506主要分为3种型号,RK3506G2、RK3506B、RK3506J。     RK3506单板机主要区别: 1) RK3506G2集成DDR3L 128MB,仅需4层板即可完成整板设计,不仅极大简化了设计,还能节省一定成本。RK3506B、RK3506J支持外部内存,最高到1GB。 2) RK3506J是工业级型号,工作温度为-40~85℃。除了工作温度差别外,其余各项功能及参数,RK3506J与RK3506B完全一致。 3) 除内存、工作温度、封装差异,RK3506G2、RK3506B、RK3506J接口功能一致。   为方便评测,万象奥科推出HD-RK3506G-MINI单板机,仅需99元即可入手。单板机接口包含:以太网、RS232/RS485、CAN总线、液晶屏,支持接口扩展!    

  • 2024-12-03
  • 发表了主题帖: 工控板方案中,哪些功能可以通过USB扩展出来?

    作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了! 没错,USB资源就是你打开新世界得钥匙,它能做哪些扩展呢? 1.1   USB扩网口 通用ARM处理器大多带两路网口,如果项目中有多路网路接口的需求,一般会选择在主板外部加交换机/路由器。当然,出于成本考虑,也可以将Switch芯片集成到ARM核心板或底板上,如KSZ9897、YT9215等。但是,如果你需要扩展的网口完全独立MAC,且成本可控,那通过USB扩展也将是个不错的选择。     图1   多网口板卡 常见的USB扩网口芯片有LAN9730、AX88179、RTL8211等,可根据情况选择USB2.0或USB3.0扩展出百兆、千兆网口。 1.2   USB扩WIFI 这是比较常见的使用方法了。常见的WIFI模块预留的通信接口有USB、SDIO、UART/SPI,对于有些SDIO资源局促的芯片,通过USB扩展WIFIT功能显得顺理成章,且USB能满足更高的通信速率。RTL8821、RTL8188等相关型号。     图 2   常见的WIFI模块 1.3   USB扩SATA 大多数中低端处理器不支持SATA或PCIE总线,如果需要大容量的外部存储,就需要考虑扩展实现。是的,通过外部插入TF卡能满足大部分使用要求,但如果你对通信速率稍有要求、对存储容量有较大要求,请关注下使用USB扩展SATA方案,如SPIF225A、JM20329、PL-2571。需要注意的是,受制于芯片先择和电路设计,该方案的传输速率仍旧有限。       1.4   USB扩串口 这种需求在工业领域也比较常见,像数据采集器、通信管理机等产品上多有10个以上的RS232/RS484的需求。除了常见的SPI扩展UART的思路,通过USB对其扩展也是一个不错的路线。CH9344、CH348、FE1.1S等都比较常用,可根据需求数量合理选择。       1.5   USB扩SPI/IIC 这个扩展方式对于MPU来说可能并不常用,对于大多少场景来说,SPI/IIC的资源数是够用的。如果有此需求,推荐参考CH347,高速USB转接芯片,可实现USB转SPI、USB转I2C、USB转JTAG等功能。 1.6   USB扩USB 显然,USB这么好用,定有数量不足的情形。扩展USB就是常见的USBHUB方案了,如4/6/8口的HUB芯片。此外,HUB芯片也很容易实现级联扩展。使用HUB方案进行多口扩展时,务必留意速率瓶颈。此处可参考USB2514、FE1.1、USB5744等。       像4G模组、USB摄像头、触摸屏信号等也都是通过USB通信实现交互。由此可见,USB接口真是我们工控领域的扩展能手。不过,在成本预算充足的情况下,还是建议您选择外设资源丰富的处理器。毕竟,原生的资源才最能保证稳定和性能。       我们专注于嵌入式ARM软硬件的设计与生产,欢迎广大开发工程师随时沟通交流!  

  • 2024-11-22
  • 发表了主题帖: 什么是UGFC?模块电脑(核心板)规范标准简介四

    1.   概念 UGFC是Unified Gold Finger Core Board的缩写(意指:统一接口定义金手指核心板),为武汉万象奥科电子有限公司基于企业标准定义的一种针对嵌入式、低功耗、通用型的小型计算机模块标准,采用204Pin金手指连接器,基于ARM架构的MPU平台,主要面向泛工业领域的数据采集、边缘数据处理、接口通讯与人机交互等应用场景。     (204Pin金手指) 2.   主要特点和意义 标准化接口与尺寸:UGFC标准定义了一种规范的计算机模块的尺寸、连接器类型、电气特性和功能接口。 提高兼容性和互换性:统一尺寸和接口功能定义,使得不同厂家或同一厂家不同的计算机模块可以在相同的基础板(又称载板或底板)上互换使用。这大大提高了核心板之间的兼容性和互换性。用户可以根据需要选择不同处理器品牌、不同性能的核心板,而无需担心底板或载板兼容性问题。     降低开发成本:对于开发者而言,不同尺寸和接口的核心板意味着需要针对不同的硬件进行适配和开发,这增加了开发成本和时间成本。统一标准后,开发者可以使用统一的封装和定义,降低开发门槛和成本。 降低维护成本:在统一标准下,核心板的维护和升级变得更加简单和方便。用户无需为不同尺寸和接口的核心板准备不同的测试工装和适配物料等,降低了维护成本和时间成本。   3.   模块类型与尺寸 UGFC标准定义了1种模块尺寸67.6mm x 45mm。模块PCB上有204个金手指,可与204引脚0.6mm间距的金手指连接器插座相连接。     4.   技术规格与接口 UGFC系列核心板支持多种显示接口、2路千兆以太网接口、6路用户串口、USB、CAN、SATA、PCIe以及IO等必要辅助接口,在满足更小尺寸的需求下支持可扩展性。 UGFC功能定义 MIPI-DSI 1   GMAC0 1 LVDS0 1 GMAC1 1 LVDS1 1 USB3.0 2 HDMI 1 USB2.0 2 IIS 1 CAN 2 SDIO 1 UART 6 SATA 1 Debug UART 1 PCIE3.0 1 SPI 1 Reset 1 IIC 2 POWER_5V 6 PWM 2 POWER_3V3 2 GPIO 20   5.   兼容平台 UGFC系列核心板已兼容支持瑞芯微RK3562、RK3568、RK3576、RK3588,全志T507、芯驰D9等系列处理器。        兼容设计的功能可以采用同一款评估板进行功能测试与验证。          

  • 2024-11-18
  • 发表了主题帖: 什么是SMARC?模块电脑(核心板)规范标准简介三

    1. 概念 SMARC(Smart Mobility ARChitecture,智能移动架构)是一种通用的小型计算机模块定义,基于ARM和X86技术的模块化计算机低功耗嵌入式架构平台,旨在满足低功耗、低成本和高性能的应用需求。这些模块通常使用与平板电脑和智能手机中相似的ARM SOC,或其他低功耗SOC和CPU。   图片     (314 Pin金手指)   2. 起源 SMARC最初名为ULP-COM,主要发起者为Kontron,后更名为SMARC以彰显在移动计算领域的创新和目标市场。2013年2月,SGeT协会通过了SMARC规范,并将其作为一个开放的、全球性的标准,目前SMARC最新的版本为SMARC 2.1。         3. 主要特点 标准化接口与尺寸:SMARC标准定义了计算机模块的尺寸、连接器类型、电气特性和功能接口,使得不同厂家的计算机模块可以在相同的基础板(又称载板或底板)上互换使用。 低功耗:模块的功率通常低于6W,适用于电池供电的设备。 高性能:采用高性能的处理器,如ARM SOC,满足各种计算需求。 小型化:模块尺寸小巧,便于集成到各种设备中。 扩展性:提供多种接口和扩展选项,支持多种外设和连接方式。       4. 模块类型与尺寸 SMARC标准定义了2种类型的模块(两种模块尺寸)82mm x 50mm和82mm x 80mm。模块PCB上有314个金手指,可与314引脚0.5mm间距的金手指连接器插座相连接。       5. 技术规格与接口 2020年3月,SGET发布了SMARC 2.1规范。新标准与之前的SMARC 2.0规范能完全向下相容,同时新的修订版带来了新的功能,如SerDes支持扩展边缘连接,以及多达4个MIPI-CSI摄像头接口,以满足日益增长的嵌入式计算和嵌入式视觉融合的需求。   ​     6. 厂商 提供SMARC计算机模块的厂家包括控创(Kontron)、康佳特(Congatec)、研华(Advantech)、凌华(Adlink) 等。  

  • 2024-11-07
  • 发表了主题帖: 以RK3568为例,ARM核心板如何实现NTP精准时间同步?

    1.背景 网络时间协议NTP(Network TimeProtocol)是用于互联网中时间同步的标准互联网协议,可以把计算机的时间同步到某些时间标准。NTP对于我们产品来说有什么用呢,简单的讲,当你的设备时间不准确了,你可以接入到互联网,从网上同步一下时间,非常方便。 对于我们嵌入式行业,大批量生产板卡烧写系统时,逐个给产品统一时间无疑是一件很痛苦的事情,所以我们选择一台主机作为NTP服务器,让板卡通过NTP服务去同步该时间,便可高效解决这个问题!   2. 技术实现 接下来为大家演示下使用方法,这里使用RK3568评估板与一台电脑主机做方案验证。   图1   HD-RK3568-CORE核心板   2.1 电脑主机配置 1.Windows 运行打开“regedit”编辑注册表; 2.找到"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters",[Type]设定值修改为“NTP”; EEWORLDIMGTK2   3.找到"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config",[AnnounceFlags]修改设定值为5。AnnounceFlags的值为5时,强制时钟源为本地CMOS时钟。 EEWORLDIMGTK3   4."HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer",[Enabled]数值修改为1。此作用为开启NTP服务器功能(默认是不开启NTP Server服务,除非电脑升级成为域控制站) 5.重起Windows Time服务 a)打开开始菜单输入“CMD”在命令行模式下输入: net stop w32time && net start w32time 重启一下win32time服务,如未启动w32time 只需执行 net start w32time 即可 b) 打开运行框 输入services.msc 打开服务.   将windows time 服务设置为自启 (实测开启自动启动,重启后依然没有启动,需要手动启动)   6.NTP服务为UDP 123端口,注意防火墙放开该端口,windows防火墙放开方法:   netsh advfirewall firewall add rule name="NTP Server" dir=in action=allow protocol=UDP localport=123 7.设置网口ip为192.168.1.10与开发板保持同网段。   2.2     linux端(RK3568) 1.如使用buildroot文件系统,则使用chrony去同步时间: /etc/chrony.conf server 192.168.1.110 iburst maxdistance 16.0 makestep 1.0 3 driftfile /var/lib/chrony/drift rtcsync 重启chrony服务 /etc/init.d/S49chrony restart 2.如使用debian使用ntp systemctlstopntp ntpdata 192.168.1.110 至此我们完成了对NTP功能的演示。   END      

  • 2024-09-30
  • 发表了主题帖: 万象奥科工业平板上线,邀您体验与众不同!

    Vanxoak推出的全新品类——ARM工业平板电脑!该系列工业平板具有防护等级高、接口丰富、易开发等特点,专为工业HMI(人机界面)和工业控制领域设计。整机采用高性能工业级ARM处理器,适配全贴合电容触摸屏,可选配搭载Android、Linux、Debian、Openharmony等多种操作系统。       秉承“化繁为简、一机多用”的设计理念,PD101基于万象奥科统一金手指系列ARM核心板设计,可根据不同的业务场景,选择搭配不同性能、规格的ARM核心板。   PD101具有四大特点:     1、配置丰富,使用灵活 2路千兆网口、4路RS232&2路RS485、支持4G&WIFI 支持Debian、Android、Openharmony多种操作系统       2、工业级安全防护 整机设计可达到静电ESD、浪涌、群脉冲EFT工业三级标准 无风扇设计,满足严苛的工业工作环境 电源及通信接口全隔离防护   3、全贴合多点电容触摸屏 全贴合+框贴合设计,无屏幕进灰之忧 250lm显示亮度,1280*800显示分辨率 ​ 4、精致工业设计 全铝挤压后盖+氧化工艺,杜绝散热死机问题 外嵌式安装,窄边框设计,简洁美观     更多产品信息,请访问万象官网或联系我们获取详细数据手册

  • 2024-08-14
  • 发表了主题帖: 丢掉数据线,你还会调试Android设备吗?

    ADB(Android Debug Bridge)作为Android开发中非常重要的工具,开发者可以使用ADB设备在电脑上对Android设备进行安装调试应用。通常我们使用ADB调试时需要USB数据线进行连接,当Android设备USB接口出现问题或身边没有USB数据线时,使用WiFi调试Android设备便成为了一种实用的替代方案。本文以平板电脑为例,为大家介绍如何使用WiFi无线调试Android设备。         使用电脑无线ADB调试Android设备前需要将Android设备端与电脑都连接至同一WiFi下。 一、Android设备上打开设置→关于平板电脑,找到版本号并连续点击,直到出现“您已处于开发者模式,无需进行次操作”                  二、返回上一级设置→系统,展开高级选项,点击进入开发者选项,打开无线调试。                        三、勾选始终允许通过此网络进行调试,点击允许进入到无线调试页面。           四、电脑端在ADB Download - Get the latest version of ADB and fastboot下载解压ADB工具并使用命令行打开   五、电脑WiFi连接Android设备 根据Android设备显示的IP地址和端口,输入以下命令连接: adb connect 192.168.30.203:45739         此时Android设备上显示已连接到无线调试,如下         六、Android设备再次点击使用配对码配对设备:           七、根据弹窗显示的IP地址和端口,电脑端使用命令配对设备:adb pair 192.168.30.203:39465,随后根据提示再次输入WLAN配对码:           配对成功后Android设备会显示出已配对设备         八、最后电脑端输入adb shell连接,就可以使用WiFi调试Android设备啦   ​  

  • 2024-07-31
  • 发表了主题帖: 全新小体积RK3562核心板,解锁神秘技能!

    RK3562小体积金手指系列核心板基于瑞芯微四核Cortex-A53+Cortex-M0处理器设计,工作主频高达2GHz,最高搭载4GB高速LPDDR4、32GB eMMC。该核心板拥有204 Pin脚,尺寸仅为67.6mm *45mm,支持千兆网、USB3.0、串口、PCIE、HDMI等丰富外设资源,非常适合于高性能、高性价比的工业应用场景。     图1  RK3562核心板 RK3562J/RK3562 是一款专为消费电子及工业设备设计的高性能、低功耗四核应用处理器。以下是它的一些主要特点:  采用22nm工艺,四核 ArmCortex-A53 +Cortex-M0,主频最高可达2.0GHz;  神经网络处理单元具有高达1TOPS 的处理性能,与TensorFlow、PyTorch、Caffe、ONNX、MXNet、Keras、Darknet 等深度学习框架兼容;  集成 Mali G52 GPU,支持OpenGL ES1.1/2.0/3.2、OpenCL2.0 和 Vulkan1.1;  支持 H.264 1080p@60fps解码、H.265 4K@30fps 解码和 H.264 1080p@60fps 编码;     图2  RK3562处理器框图 核心板搭配功能丰富的开发板,主要资源包括网口、串口、USB、4G、WiFi、显示等接口,满足功能开发及性能评测需求。开发板驱动资源包括:   操作系统Linux或Andriod   eMMC驱动   显示驱动   触摸屏驱动   以太网驱动   USB驱动   SPI驱动   IIC驱动   PWM驱动   IO驱动   音频输入、输出驱动   TF/SD卡驱动     图3  RK3562开发板 小体积RK3562核心板是统一金手指家族中的一员,旨在实现一块底板兼容多个处理器系列,目前支持的型号有:RK3576、RK3568、RK3562、芯驰D9、全志T5、NXP i.MX8MP,该系列适用于以下ARM+Linux项目场景: 1.       需要统一硬件,但主控平台要形成高低搭配; 2.       保障产品生命周期,防止未来因主处理器停产导致的改版; 3.       平台选择待定,在开发前进行多品类的性能评估;       图4  统一金手指系列    

  • 2024-07-29
  • 发表了主题帖: 高速电路开发中有哪些挑战?

    1.      引言 随着嵌入式技术飞速发展,高速电路的开发面临器件尺寸缩小、时钟频率提升、布线密度增加等因素,嵌入式产品在信号传输、电源质量等问题上要求日益提高。为确保高速电路在产品整个生命周期内的可靠性,必须采用先进的可靠性技术。 武汉万象奥科学习易瑞来殷老师可靠性相关课程与经验,以更好的应对这些挑战。 2.      高速电路开发的挑战 由于产品和器件的尺寸不断缩小,器件的时钟频率越来越高,信号边缘速率也越来越快,导致高速电路问题日益突出。现在IC的集成规模越来越大,管脚数量越来越多,单板上布线的密度不断加大,IC的电源电压逐渐降低、电流逐渐加大,功耗越来越大。 以上几个方面就是现代高速电路开发的最新挑战,对设计者的可靠性设计水平提出了更高的要求。 高速电路中的器件参数不一致,或发生飘移,使得整个电路的性能逐步降低,直至功能完全丧失。也可能产生过电应力或降额不足,使器件失效。SI问题的隐蔽性较大,往往在出厂前无法测试或通过老化筛选出问题,带来可靠性隐患。 可靠性设计主要就是解决产品在整个生命周期内出现的品质问题,既可以解决产品性能退化的问题,也可以解决器件失效的问题。可靠性技术在高速电路中的应用主要有最坏情况数字电路时序容差分析、串扰分析和电源完整性技术等。 3.      高速电路可靠性问题 高速电路引起的可靠性问题主要有以下5个方面:  信号传输延时逐步加大,造成时序失效。  信号波形失真逐步加大,造成信号读取错误。  信号之间的串扰逐步加大,产生误码或程序运行错误。  电源质量和地弹逐步变坏,影响器件的正常工作。  EMC指标逐渐超过要求。 4.      高速电路设计的可靠性技术 解决上述5个方面的问题,个人认为可以采用以下3种可靠性技术来解决: 1)    运用最坏情况分析(WCCA)方法,进行数字电路时序分析,使传输线延时、波形失真等在整个生命周期内不超过要求,保证高速数字电路的正常逻辑连接。 以前的电路板运行速度较低,因此很少有时序问题,现在的器件速度越来越快,时钟周期为纳秒级,传输走线延时的影响十分突出,已影响到器件能否正常工作,必须分析最坏情况下的时序参数。 数字电路时序容差分析主要是分析数字电路间的时序关系,即分析时序余量是否满足要求。 为了分析该电路的时序容差情况,主要考虑三个方面的因素:器件本身的时序参数容差、PCB布线产生的时序容差、其他干扰产生的时序容差。 器件本身的时序参数容差分析主要是检查输出器件端口的时序参数是否满足输入器件端口的时序参数要求。并且对器件的时序参数按最坏情况考虑,不是按一般的典型值进行分析。 PCB布线产生的时序容差分析主要是分析器件端口模型、传输线拓扑、终端匹配、负载数量等在最坏情况下,采用信号完整性(SI)仿真工具,分析传输信号延时和波形,得出对时序的影响。 其他干扰产生的时序容差分析主要是分析电源输入、电源平面谐振特性、同步开关噪声、串扰等对信号时序的影响。 时序参数中最关键的是建立时间和保持时间两个参数。如下图,是某DDR存储器的地址、控制、命令信号的保持时间要求,对其中的每个参数都要分析得到它们的最坏情况值,然后代入公式中得到容差值,如果大于0,表示容差满足要求,如果小于0,表示容差设计不足,需要重新设计。     2)     运用仿真和实验相结合的方法,准确分析出串扰源和耦合途径。 串扰是PCB设计时必须关注的可靠性问题。由于被干扰信号上产生的脉冲或毛刺等多是半高电平,在CMOS信号的阈值附近,这样造成的串扰问题有很大的随机性,很多不能在出厂前测试出来,在市场上也是时有时无,返修产品有时候很难重复失效现象,分析起来非常困难,这些都是典型的可靠性问题。 串扰分析的方法推荐使用仿真和实验相结合的方法,既减少实验次数,又分析得比较全面。比如在分析一个串扰问题时,有些工程师认为是感性串扰,有些认为是容性串扰,有些认为是地弹噪声。 我们知道,感性串扰和容性串扰的相同点是:串扰在远端为短脉冲,近端为长信号。不同之处是:前向感性串扰和前向容性串扰的极性相反(如下图),感性串扰产生的是噪声电压信号,是串接在被干扰导线上的,而容性串扰产生的是噪声电流信号,是并接在被干扰导线和地之间的,也就是说,感性串扰随负载增大而减小,容性串扰随负载增大而增大。可利用这两点来辨别容性串扰和感性串扰。如果完全用实验的方法,那么要用很多的单板来进行割线、飞线、焊接器件等,做多次实验,但是用仿真的方法就方便经济得多了,而且几乎可以想怎么做就怎么做。      在PCB电路仿真中,把被串扰线负载电阻减小10倍时,串扰马上显著减小。可见降低对地阻抗可减小串扰大小,这是容性串扰的特征。 另外我们去掉在串扰源和被串扰信号线中间的一块灌铜地平面,提取出电路的仿真模型,在HSPICE中再次仿真,发现串扰显著增加。这也是容性串扰的一个证明。注意,这种方法是不能通过实际测试验证的,只能通过仿真来分析。 同时通过实际测试发现,串扰源的正跳变在被干扰信号线上对应为正的串扰信号,负跳变在被干扰信号线上对应为负的串扰信号。 综上所述,根据上述串扰形式判别方法,再通过上面几点的仿真和实测结果,能肯定该串扰为容性串扰占主导。最后针对容性串扰的特点,减小负载电阻,降低了串扰,电路恢复正常。  3)     运用电源完整性(PI)方法,分析电源输出滤波电路和电源平面设计,保证整个生命周期内的电源都符合要求。 随着信号频率的增高和高速系统单板布线越来越密集,无噪声的电源分配成为了PCB设计的一个主要挑战。当高速集成电路I/O端口同时改变状态时,通过电源分配系统(PDS)的纹波噪声随频率的变化而变化,这个噪声既影响高速设备系统中的IC工作,同时干扰周围的环境。 为了确保良好的电源分配,电源分配阻抗必须在一个很宽的频率范围内控制在一个要求的目标阻抗下。这可以通过在目标频率范围内仔细的考虑开关电源,大电容,陶瓷电容以及电源/地平面对等等来实现。陶瓷电容一般作去耦用,在逻辑开关时给需要大电流的驱动器件提供本地补偿。     上图显示了在控制电源分配系统(PDS)目标阻抗时各个频率范围内哪种器件是最有效的。 可以看出电源完整性工作主要有:确定目标阻抗和选择合适的PDS组成部分。 确定目标阻抗主要是根据SSN(SimultaneousSwitching Noise 同步开关噪声)来计算动态电流,然后根据电源变化的要求(一般为 3-5%),计算出目标阻抗。这个时候也必须根据可靠性设计规律,考虑最坏情况下的动态电流,所以我们一般是假定所有I/O口同时切换,而且每个端口的输出电流都取最大值。而电源变化的要求则需要取最小值。 对于PDS的各个部分,特别是电解电容和陶瓷电容,必须考虑器件的容差,因为电容的来料精度一般比较差,20%精度的电容最常使用。同时电容容值受温度、湿度、气压以及寿命的影响也很显著。我们分析过,考虑上述因素后,电容的容值最大可以变化1倍以上。而且电容内部的分布参数(如ESR、ESL)都有很大容差。所以在PI分析中对电容参数也要选择多个参数分别分析,得出最坏情况下的PDS阻抗曲线。如下图所示。   ​   可以看出,用可靠性技术来分析电源完整性,不仅要分析典型值下的PDS系统阻抗特性,同时要根据器件在最坏情况下的参数容差,分析PDS的极限阻抗特性,达到在整个生命周期内,电源对产品都不会引起可靠性问题。  

  • 2024-06-27
  • 发表了主题帖: 开发板无法录音或耳机播放?不可忽视这个细节!

    满怀欣喜的设计一块Linux/安卓开发板,发现无法录音或耳机播放?请注意这个硬件上的使用细节。   麦克风和耳机二合一连接器种类繁多,规格不一,如有PJ-332-6A、PJ-393-8A等类型,实物如下图所示。                                                                                                                                                  图1 PJ-332-6A连接器                                        图2 PJ-393-8A连接器     各种连接器的管脚排列及定义也不尽相同,如下图所示。                                                                                          图3 PJ-332-6A连接器管脚定义                                  图4 PJ-393-8A连接器管脚定义   在进行电路设计时,可以通过以下几个步骤来确定各种连接器的电路信号连接。     1 确定耳机类型     带麦克风的耳机通常为4段耳机,如图4所示。         图4 四段耳机   4段耳机又分为国标和美标两种,而两种标准的定义不一样,如图5所示。         图5 四段耳机不同标准的定义       2 确定连接器的管脚定义   以PJ-393-8A连接器为例,查看其规格书,其管脚定义及物理连接如图6和图7所示。                                                                                               图6 连接器管脚定义                                                            图7 连接器物理连接   从图6和图7可以看出,1-2脚,3-4脚, 5-6脚, 7-8脚分别两两短接。需要注意的是,第7脚和第8脚定义是相反的,这是因为从结构上看,7-8脚对应的这一段金属片和前3段相比,是反着放置的,如下图所示。         另外,图7所示为没有耳机插入时的情况。当有耳机插入时,图中所有带箭头的管脚就会被顶开,此时耳机只与2,4,6,8脚相连接,而不与1,3,5,7脚接触。因此,在电路设计中,L/R/GND/MIC信号只能接在2,4,6,8脚上,1,3,5,7脚可以悬空,也可以和2,4,6,8脚相连接。     3 确定连接器的信号连接   将四段耳机和连接器对接起来,就可以清楚的判断出连接器的每段管脚所对应的信号,如图8所示。       图8 耳机和连接器物理对应位置   则连接器各管脚所对应的信号如下表所示。   表1 连接器各管脚所对应的信号   管脚 信号 1,2 MIC 3,4 GND 5,6 R 7,8 L       4 插入检测功能   通过表1可知,3/4脚接GND,再通过图7可知,4脚一定接GND. 则第3脚就可以作为耳机插入检测信号,第3脚外部接上拉电阻,没有耳机插入时,3脚和4脚物理上短接,为0信号;当耳机插入时,3脚和4脚物理上隔开,此时3脚就为高电平。 通过以上4个步骤,即可绘制出对应的原理图,如下图所示。  

  • 2024-06-06
  • 发表了主题帖: 嵌入式Linux中的录音降噪方案

    降噪不仅只能从硬件入手,本文为您介绍一种嵌入式Linux中的录音降噪方案。该方案完全依靠软件实现,最大程度上降低投入。 1. 工具下载 SoX(Sound eXchange)是一个开源的音频处理工具,它可以用来读取、转换和处理各种音频文件。SoX的源代码主要由C语言编写,它包含了大量的音频处理算法和功能模块,如音频格式解析、音频效果处理、音频格式转换等。 Sox源码:https://sourceforge.net/projects/sox/files/sox/14.4.2/ libgomp.so.1库安装: http://ftp.debian.org/debian/pool/main/g/gcc-10/libgomp1_10.2.1-6_armhf.debdpkg -x libgomp1_10.2.1-6_armhf.deb libgomp">wget http://ftp.debian.org/debian/pool/main/g/gcc-10/libgomp1_10.2.1-6_armhf.deb dpkg -x libgomp1_10.2.1-6_armhf.deb libgomp 2. SOX降噪使用 1.   将libgomp.so.1和libgomp.so.1.0.0拷贝到板卡/usr/lib/目录下。 2.   将sox拷贝到/usr/bin/目录下。 3.   开始录音,执行如下指令。 amixer cset numid=36190 amixer cset numid=140 arecord -f cd -d 10/tmp/t.wav aplay /tmp/t.wav 4.   进入录音文件目录,生成降噪配置文件并对录音文件进行降噪处理。 cd /tmp/ sox t.wav -n noiseprof noise.prof sox t.wav 1.wav noisered noise.prof 0.21 其中t.wav:原录音文件,1.wav为降噪后文件 0.21(更改0.21以调整采样率的灵敏度级别(我发现0.2-0.3通常提供最佳结果))。 通过以上操作,对比播放录音原文件(t.wav)和降噪后的文件(1.wav),发现噪音几乎没有。        

  • 2024-05-17
  • 发表了主题帖: Linux平台移植音频芯片实战记录

    本文详细记录在NXP I.MX6ULL+Linux平台下进行WM8960音频芯片移植的过程,其他平台操作方法类似,希望为大家提供帮助。 1. 环境准备 平台: HD6ULL-IOT开发板 要求: 外接一个WM8960模块。要求能正常播放音频文件。 2. 原理图及相关资料 将模块飞线到底板J17上,接法如下;且模块1脚 接了J17的1脚(3.3V); 然后模块的3脚(GND)接的J17的29脚地。             WM8960资料: https://www.waveshare.net/wiki/WM8960_Audio_Board 3. 内核以及设备树调试 内核需要勾选WM8960相关配置,可以make menuconfig后/搜索8960然后勾上就行。        设备树注意三点: ①. 客户飞线WM8960是挂载到i2c1上的。 sound { compatible = "fsl,imx6ul-evk-wm8960", "fsl,imx-audio-wm8960"; model = "wm8960-audio"; cpu-dai = <&sai2>; audio-codec = <&codec>; asrc-controller = <&asrc>; codec-master; gpr = <&gpr>; /*not support * hp-det = <hp-det-pin hp-det-polarity>; * hp-det-pin: JD1 JD2 or JD3 * hp-det-polarity = 0: hp detect high for headphone * hp-det-polarity = 1: hp detect high for speaker hp-det = <3 0>; hp-det-gpios = <&gpio5 4 0>; mic-det-gpios = <&gpio5 4 0>; */ audio-routing = "Headphone Jack", "HP_L", "Headphone Jack", "HP_R", "Ext Spk", "SPK_LP", "Ext Spk", "SPK_LN", "Ext Spk", "SPK_RP", "Ext Spk", "SPK_RN", "LINPUT2", "Mic Jack", "LINPUT3", "Mic Jack", "RINPUT1", "Main MIC", "RINPUT2", "Main MIC", "Mic Jack", "MICB", "Main MIC", "MICB", "CPU-Playback", "ASRC-Playback", "Playback", "CPU-Playback", "ASRC-Capture", "CPU-Capture", "CPU-Capture", "Capture"; }; }; &sai2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_sai2>; assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>, <&clks IMX6UL_CLK_SAI2>; assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>; assigned-clock-rates = <0>, <12288000>; status = "okay"; }; pinctrl_sai2: sai2grp { fsl,pins = < MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK0x17088 MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC0x17088 MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA0x11088 MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA0x11088 MX6UL_PAD_JTAG_TMS__SAI2_MCLK0x17088 MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO040x17059 >; }; &i2c1 { clock-frequency = <100000>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c1>; status = "okay"; codec: wm8960@1a { compatible = "wlf,wm8960"; reg = <0x1a>; clocks = <&clks IMX6UL_CLK_SAI2>; clock-names = "mclk"; wlf,shared-lrclk; }; }; pinctrl_i2c1: i2c1grp { fsl,pins = < MX6UL_PAD_CSI_PIXCLK__I2C1_SCL 0x4001b8b0 MX6UL_PAD_CSI_MCLK__I2C1_SDA 0x4001b8b0 >; }; ②. 时钟线(SCL)和数据线(SDA)是飞线到J17的3,4脚(UART6_TXD,UART6_RXD),对应的CSI_MCLK与CSI_PIXCLK,我们需要将其复用成I2C1_SCL,I2C1_SDA功能。(需要查询对应的引脚功能列表和datasheet)     pinctrl_i2c1: i2c1grp { fsl,pins = < MX6UL_PAD_CSI_PIXCLK__I2C1_SCL 0x4001b8b0 MX6UL_PAD_CSI_MCLK__I2C1_SDA 0x4001b8b0 >; }; ③. 由于底板上有一个耳机接口是从核心板直接引出的,我们需要禁掉他。 sound-mqs { compatible = "fsl,imx-audio-mqs"; model = "mqs-audio"; cpu-dai = <&sai1>; asrc-controller = <&asrc>; audio-codec = <&mqs>; status = "disabled"; }; &sai1 { assigned-clocks = <&clks IMX6UL_CLK_SAI1_SEL>, <&clks IMX6UL_CLK_SAI1>; assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>; assigned-clock-rates = <0>, <24576000>; status = "disabled"; }; &mqs { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_mqs>; clocks = <&clks IMX6UL_CLK_SAI1>; clock-names = "mclk"; status = "disabled"; }; 重新编译后替换设备树,然后cd /home/audio ./aplay 1.wav。插上耳机或者扬声器即有声音。 在调试过程中,可通过i2cdetect -y -a 0 (此处wm8960挂载在i2c1)检查音频设备是否挂载到i2c1上,或者dmesg | grep wm8960 检查驱动是否加载成功。 4. 录音测试 首先需要有arecord这个工具; 源码下载网址:https://www.alsa-project.org/wiki/Download#alsa-lib 编译参考网址: https://blog.csdn.net/gjy938815/article/details/11809269 编译好后:alsa-utils-1.2.9\aplay 这个目录下会生成aplay(145M),然后改名为arecord即可。 录音播放测试: 将arecord拷贝到U盘内,依次执行以下指令: cp /mnt/sda1/arecord /home/demo/ chmod a+x /home/demo/arecord cd /home/audio/ ./amixer cset numid=1 60 录音功能需设置录音控件的参数 ./amixer cset numid=36 240 录音功能需设置录音控件的参数 ./amixer cset numid=41 1 将麦克风输出信号同时记录在左右声道 cd /home/demo 执行下面这个指令时需要对着WM8960说话,会录音到/tmp/t.wav文件中。 录音时间为10s ./arecord -f cd -d 10 /tmp/t.wav 播放录音文件 (最好用耳机听声音) cd /home/audio/ ./aplay /tmp/t.wav   5. 音量调节   至此,我们完成移植、测试的全部工作。如您在开发过程中遇到问题,欢迎技术交流。 ​ 控制耳机音量大小: numid=11,iface=MIXER,name='Headphone Playback Volume' ./amixer cset numid=11 80 (范围0~127, 80合适) 控制喇叭音量大小: numid=13,iface=MIXER,name='Speaker Playback Volume' 这个配置 ./amixer cset numid=13 100 (范围0~127,但一般100声音就合适了) 录音时配置: numid=36,iface=MIXER,name='ADC PCM Capture Volume' ./amixer cset numid=36 190 (录音范围0~255,一般190左右合适,值过大杂声会有点大) numid=1,iface=MIXER,name='Capture Volume' (设置捕获的音量) ./amixer cset numid=1 30 (范围0~63 ,可以选择30)      

  • 2024-05-08
  • 发表了主题帖: 技术分享 | i.MX8M Mini适配MIPI转eDP芯片

      方案概述 此方案使用HD-8MMN-CORE的核心板搭配TI公司的芯片SN65DSI86转换芯片实现。 SN65DSI86作为一款MIPI DSI转eDP的芯片,支持双通道DSI输入,最大四通道显示输出,最大支持4K@60fps输出,WUXGA 1080P。本方案中将采用单通道DSI输入,双通道DP输出到1080p的屏幕。 HD8MMN-CORE系列工业级核心板基于NXP(Freescale) i.MX8MM系列Cortex-A53高性能处理器设计,支持硬件加密,支持摄像头接口、USB3.0接口、HDMI/MIPI、PCIe、千兆以太网接口、多路串口等,适用于快速开发一系列最具创新性的应用,如多媒体应用、人机界面、工业4.0、车载终端以及边缘计算设备等。   2.硬件原理图   注:硬件修改REFCLK上需要贴上27M的晶振,TEST2引脚需要通过4.7K电阻上拉到1.8V. 3.软件实现 3.1软件介绍 内核版本:Linux5.10; SN65DSI86驱动:drivers/gpu/drm/bridge/ti-sn65dsi86.c Panel驱动:drivers/gpu/drm/panel/panel-simple.c   3.2驱动移植 内核配置,需要打开如下两项 CONFIG_DRM_TI_SN65DSI86=y CONFIG_DRM_PANEL_SIMPLE=y 设备树配置 / {         osc_27m: clock-osc-27m {                 compatible = "fixed-clock";                 #clock-cells = <0>;                 clock-frequency = <27000000>;                 clock-output-names = "osc_27m";         };         lcd_backlight: lcd_backlight {                 compatible = "pwm-backlight";                 pwms = <&pwm1 0 100000>;                 status = "okay";                 brightness-levels = < 0  1  2  3  4  5  6  7  8  9                                      10 11 12 13 14 15 16 17 18 19                                      20 21 22 23 24 25 26 27 28 29                                      30 31 32 33 34 35 36 37 38 39                                      40 41 42 43 44 45 46 47 48 49                                      50 51 52 53 54 55 56 57 58 59                                      60 61 62 63 64 65 66 67 68 69                                      70 71 72 73 74 75 76 77 78 79                                      80 81 82 83 84 85 86 87 88 89                                      90 91 92 93 94 95 96 97 98 99                                     100>;                 enable-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;                 default-brightness-level = <80>;         };         panel {                 compatible = "test,test-edp-1080p";        //设置自己的屏幕匹配参数组                 backlight = <&lcd_backlight>;                 no-hpd;                 port {                         panel1_in: endpoint {                                 remote-endpoint = <&sn65_out>;                         };                 };         }; }; &pwm1 {         pinctrl-names = "default";         pinctrl-0 = <&pinctrl_pwm1>;         status = "okay"; }; &i2c4 {         clock-frequency = <400000>;         pinctrl-names = "default";         pinctrl-0 = <&pinctrl_i2c4>;         status = "okay";         sn65dsi86@2d {                …….                 clock-names = "refclk";          //默认名字                               //SN65DSI86仅支持12 MHz, 19.2 MHz, 26 MHz, 27 MHz or 38.4 MHz.                 clocks = <&osc_27m>;                ……                         port[url=home.php?mod=space&uid=490]@1[/url] {                                 reg = <1>;                                 sn65_out: endpoint {                                         //data-lanes = <0 1 2 3>;                                                                         //根据eDP屏的通道数设置,这里为2通道                                         data-lanes = <0 1>;  ……   驱动修改 添加显示屏的显示参数到驱动中,修改drivers/gpu/drm/panel/panel-simple.c: tatic const struct display_timing test_edp_1080p_timing = {         .pixelclock = { 153000000, 153000000, 153000000 },         .hactive = { 1920, 1920, 1920 },         .hfront_porch = { 100, 100, 100 },         …..         .bus_format = MEDIA_BUS_FMT_RGB666_1X18,         .connector_type = DRM_MODE_CONNECTOR_eDP, }; static const struct of_device_id platform_of_match[] = {         {                 .compatible = "test,test-edp-1080p",                 .data = &test_edp_1080p,         },   修改sn65dsi86驱动以适应我们的板卡,修改drivers/gpu/drm/bridge/ti-sn65dsi86.c,修改DSI正确的模式,防止找不到注册的panel出现报错“could not find any panel node”,开机过程中打印1次是正常的,SN65DSI86的驱动找不到Panel会被多次调用,直到找到panel为止。 static int ti_sn_bridge_attach(struct drm_bridge *bridge,                                enum drm_bridge_attach_flags flags) { ...         //dsi->mode_flags = MIPI_DSI_MODE_VIDEO;         dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |                           MIPI_DSI_MODE_EOT_PACKET | MIPI_DSI_MODE_VIDEO_HSE;   调试报错 在调试过程中碰到“Link training failed, link is off”的报错,是因为SN65DSI86默认只支持ASSR模式的eDP屏幕,对于不支持ASSR模式的eDP屏,硬件上则需要将TEST2引脚拉高到1.8V,且修改相关寄存器将芯片从ASSR模式变为支持标准的DP模式,修改如下: #define SN_ENH_FRAME_REG                        0x5A #define  ASSR_CONTROL                           BIT(0) ... static int ti_sn_link_training(struct ti_sn_bridge *pdata, int dp_rate_idx,                                const char **last_err_str) {         unsigned int val;         int ret;         int i;         /* set dp clk frequency value */         regmap_update_bits(pdata->regmap, SN_DATARATE_CONFIG_REG,                            DP_DATARATE_MASK, DP_DATARATE(dp_rate_idx));         regmap_write(pdata->regmap, 0xff, 0x07);         regmap_write(pdata->regmap, 0x16, 0x01);         regmap_write(pdata->regmap, 0xff, 0x00);        /* For DisplayPort, use the standard DP scrambler seed. */         regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG,ASSR_CONTROL, 0);         /* enable DP PLL */         regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 1); ... 如果未接eDP屏幕会出现如下报错: [ 2.299284] ti_sn65dsi86 3-002d: [drm:ti_sn_bridge_enable] ERROR Can't read lane count (-6); assuming 4  [ 2.765851] ti_sn65dsi86 3-002d: [drm:ti_sn_bridge_enable] ERROR Can't read eDP rev (-6), assuming 1.1  

  • 2024-04-19
  • 发表了主题帖: 万象奥科邀您参加RK3568+AMP混合部署线下实操活动-北京站

    4月25日,万象奥科将携手RT-Thread在北京举办线下workshop,带您体验RK3568+OpenAMP实现RT-Thread与Linux同时运行的开发方式,实现在电力、机器人、工业控制、工业互联网、新能源等领域的高效应用。   Workshop内容: 混合部署方式大公开:揭秘混合部署的原理与显著优势,助力系统运行更稳健,提升系统实时性,业务适应性更强。 动手实操与实时演示:不仅告诉你“是什么”,还让你亲自实践“怎么做”。现场将提供硬件进行操作,让理论与实践完美结合。 深度拓展别开生面:拓展知识视野,了解RT-Thread与不同系统,不同应用领域的混合部署方案及精彩案例。 RT-Thread专业版及瑞芯微RK3568平台介绍:深入了解RT-Thread专业版的综合优势,功能亮点,适用范围。 专属Q&A环节:针对您的任何疑问,我们都将一一解答。此外,我们还将提供试用评估的方式,让您充分体验所学知识的应用成效。 本次workshop会用到的开发板:RK3568J(现场会提供)                                                实操环节一览:workshop的实操会包含下面这些部分: Linux/QT + RT-Thread 实时控制 使用Linux更新RT-Thread运行固件 Linux与RT-Thread传递数据 Linux + RT-Thread矩阵运算 RT-Thread SMP独立运行   别犹豫了!马上报名,4月25日在北京与我们一起探索嵌入式世界的无限可能!由于场地限制,现场名额有限,先到先得哦! 时间:2024年4月25号 13:30-17:30 地址:北京市东城区桃园东里20号华亿天诚大厦三楼大会议室(出电梯右转第一个门) ​

  • 2024-04-17
  • 发表了主题帖: 支持标准OPS接口,通用型RK3568工控板上新!

    HD-RK3568-OPS主板基于HD-RK3568-CORE 工业级核心板设计,搭载1.8GHz主频的高性能ARM处理器,适用于工业现场应用需求。主板支持标准OPS接口、支持前后HDMI双路输出,具有即插即用、操作简单的特点,亦适用于数字标牌、自助终端、教育一体机等应用场景。   ​   主要功能包括:  OPS标准接口  支持单独1路HDMI接口   集成2路100M/1000M自适应以太网接口   集成Wi-Fi   集成2路USB Host   支持1路TF卡接口   支持音频(耳机、MiC)   支持2路RS485和1路RS232接口   支持4G/5G Mini-PCIE接口   支持红外功能   支持实时时钟与后备电池   支持蜂鸣器与板载LED   1路TTL调试串口   直流+12V电源供电 Open Pluggable Specification(OPS)是一种计算模块插件格式,该格式于2010年由NEC,英特尔和微软首次公布,主要用于为计算机增加计算能力。OPS格式的计算模块可在基于Intel和ARM的CPU上运行,运行的操作系统包括Windows、Android及Linux系统中。 主板中J21为标准OPS接口,其管脚定义如下: 引脚 名称 说明   引脚 名称 说明        1              DDP_3N eDP数据信号   41 +12V~+19V Power        2              DDP_3P eDP数据信号 42 +12V~+19V Power        3              GND Ground 43 +12V~+19V Power        4              DDP_2N eDP数据信号 44 +12V~+19V Power        5              DDP_2P eDP数据信号 45 RSVD RSVD        6              GND Ground 46 RSVD RSVD        7              DDP_1N eDP数据信号 47 GND Ground        8              DDP_1P eDP数据信号 48 GND Ground        9              GND Ground 49 DEVICE RST 扩展设备复位信号       10             DDP_0N eDP数据信号 50 SYS_FAN 风扇控制       11             DDP_0P eDP数据信号 51 UART_RXD 串口接收       12             GND Ground 52 UART_TXD 串口发送       13             DDP_AUXN eDP辅助信号 53 GND Ground       14             DDP_AUXP eDP辅助信号 54 StdA_SSRX- USB3.0接收-       15             DDP_HPD eDP热插拔 55 StdA_SSRX+ USB3.0接收+       16             GND Ground 56 GND Ground       17             TMDS_CLK- HDMI时钟信号 57 StdA_SSTX- USB3.0发送-       18             TMDS_CLK+ HDMI时钟信号 58 StdA_SSTX+ USB3.0发送+       19             GND Ground 59 GND Ground       20             TMDS0- HDMI数据信号 60 USB_PN2 USB2.0       21             TMDS0+ HDMI数据信号 61 USB_PP2 USB2.0       22             GND Ground 62 GND Ground       23             TMDS1- HDMI数据信号 63 USB_PN1 USB2.0       24             TMDS1+ HDMI数据信号 64 USB_PP1 USB2.0       25             GND Ground 65 GND Ground       26             TMDS2- HDMI数据信号 66 USB_PN0 USB2.0       27             TMDS2+ HDMI数据信号 67 USB_PP0 USB2.0       28             GND Ground 68 GND Ground       29             DVI_DDC_DATA DDC数据信号 69 LINEOUT_L 音频左声道       30             DVI_DDC_CLK DDC时钟信号 70 LINEOUT_R 音频右声道       31             DVI_HPD HDMI热插拔 71 CEC CEC       32             GND Ground 72 PB_DET 可插拔检测       33             +12V~+19V Power 73 PS_ON# 可插拔信号开启       34             +12V~+19V Power 74 PWR_STATUS PowerGood       35             +12V~+19V Power 75 GND Ground       36             +12V~+19V Power 76 GND Ground       37             +12V~+19V Power 77 GND Ground       38             +12V~+19V Power 78 GND Ground       39             +12V~+19V Power 79 GND Ground       40             +12V~+19V Power 80 GND Ground

最近访客

< 1/1 >

统计信息

已有7人来访过

  • 芯积分:211
  • 好友:--
  • 主题:124
  • 回复:0

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言