• 无人机厂家那么多,为什么大疆能够取得当前成功

    大疆能够在无人机市场取得如今的成功,离不开以下几个关键因素:1. 技术创新大疆始终以技术研发为核心竞争力,不断推出领先的产品和解决方案。例如:三轴云台:大疆是首个将三轴云台技术大规模应用于消费级无人机的厂商,实现了高稳定性的视频拍摄。飞控系统:其飞控系统在稳定性、抗干扰性和用户友好性方面表现卓越。图传技术:大疆的图传技术(如OcuSync)具备更远的传输距离、更低的延迟和更高的画质,领先于行业竞争对手。2. 产品设计与用户体验大疆的产品兼顾高性能和易用性,尤其在消费级无人机领域:即买即飞:产品设计高度集成,减少用户的操作难度。便携性:如Mavic系列,折叠式设计使无人机更便携,满足消费者出行需求。软件生态:配套的APP(如DJI Fly、DJI GO)提供了良好的用户体验,整合了飞行控制、视频编辑和社交分享功能。3. 品牌影响力大疆通过精准的市场营销和持续的创新,建立了无人机市场的标杆地位:专业领域的强势品牌形象:如“御”、“精灵”和“悟”系列覆盖了从入门用户到专业航拍用户的需求。拓展至行业应用:大疆创新不仅在消费市场表现强劲,还在农业、测绘、安防等行业市场推出了相应的解决方案。品牌公关:曾经我发表一篇文章说大疆创新有抄袭,但后来是原本跟parrot合作的一家台湾的公司背叛Parrot投靠大疆,搞得乌龙。我晚上发了文章,早上9点大疆公关部就联系我让我删帖了。4. 供应链与制造能力高度整合的供应链:大疆将关键技术掌握在自己手中,减少了对外部供应商的依赖。规模化生产:其成熟的生产体系不仅保证了产品的高质量,还降低了生产成本,从而在市场中具有价格竞争力。本身无人机的有些行业天花板就比较低,很多企业很难形成规模。大疆可以形成规模,所以他可以安排一些自动化生产,自动化测试,可靠性验证,大样本测试。但是对于其他企业就比较难做到。这也是我经常说的那句话“有量才有质量”。5. 市场策略全球化布局:大疆不仅占据了国内市场,还在海外市场(特别是北美、欧洲)占有较高的市场份额。快速迭代:通过频繁推出新品保持了市场的热度和竞争优势。行业机,主打价格优势,DJI所到之处,寸草不生。基本上原本其他厂家还有利润的行业,大疆一旦进入,其他无人机厂家因为没有规模优势和技术壁垒就死翘翘了,农业、电力,很多行业机都经历过DJI入局后的洗牌。6. 竞争壁垒专利和技术储备:大疆在全球拥有大量无人机相关专利,使其他厂商难以模仿。很多公司在无人机领域刚有建树,就被大疆法务部告上法庭了。道通(Autel Robotics)与大疆(DJI)的专利诉讼是一场持续多年的法律纠纷,涉及多个市场和专利领域。这场官司的核心在于无人机技术的知识产权争议,对整个行业产生了重要影响。在这次对抗中,大疆并没有形成碾压性优势,也让道通能够有所建树,在国际市场有生存空间形成无人机一股新的势力。美国市场的诉讼:2016年,道通首次向美国ITC提起专利诉讼,试图禁止大疆无人机进入美国市场。2020年,美国ITC裁定部分大疆产品侵犯了道通的专利,但随后的上诉和产品设计修改让禁令没有立即生效。大疆在一些案件中成功证明了道通专利的无效性。中国市场的诉讼:在中国,道通也对大疆提起了专利侵权诉讼,但大疆通过自己的专利组合进行了反击,并在部分案件中胜诉。大疆还主动挑战了道通专利的有效性,在专利复审中取得了一定成果。生态系统:大疆已经建立了涵盖硬件、软件和配件的完整生态系统,新进入者难以在短时间内达到类似规模。无人机飞控,为什么用了很多杜邦线?FPV为什么要选择并不清晰的模拟图传?LVDS是一种电平标准,为什么又是视频接口?老古董视频接口CVBS,为什么焕发第二春?跟俄乌有关参观2024俄罗斯军事展,照片集锦固定翼无人机的机翼和舵面无人机行业美国军用无人机有哪些?无人机技术和商机无人机行业深度研究报告基本原理四旋翼无人机,螺旋桨的旋转方向,你注意了么?加速度传感器和陀螺仪如何让无人机飞得更稳无人机自动悬停的实现方法无人机自动悬停的实现方法(续)飞行控制PID算法——无人机飞控无人机调试中,pitch(俯仰)yaw(偏航) roll(翻滚)是什么你玩的是无人机,还是遥控飞机?多旋翼无人机的传感器技术开发四旋翼无人机,需要哪些知识无人机为什么大多数是偶数螺旋桨飞行原理3D动态图像飞控一样去思考设计与技术无人机接收机的PPM协议无人机RTK定位技术与PTK技术无人机能飞多久?精确评估一下无人机——大把的  开源飞控可靠性影响无人机可靠性的因素和无人机可靠性设计拆机报告经典无人机拆机—— Parrot Bebop 2

    01-03 16浏览
  • 什么是Page Cache?

    在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,感觉是内存不够用了。其实不然,这是Linux内存管理的一个优秀的特征,主要特点是,物理物理内存有多大,Linux都将其充分利用,将一些程序调用过的硬盘数据读入内存(buffer/Cache),利用内存读写的高速特性来提供Linux系统的数据访问性能高。 1. 什么是Page Cache 当程序去读文件,可以通过read也可以通过mmap去读,当你通过任何一种方式从磁盘读取文件时,内核都会给你申请一个Page cache,用来缓存磁盘上的内容。这样读过一次的数据,下次读取的时候就直接从Page cache里去读,提升了系统的整体性能。 对于Linux可以怎么来观察Page Cache呢?其实,在Linux上直接可以通过命令来看,他们的内容是一致的。 首先最简单的是free命令来看一下 首先我们来看看buffers和cached的定义 Buffers 是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大(20MB 左右)。这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,比如可以把多次小的写合并成单次大的写等等。 Cached 是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘 buffer cache和page cache在处理上是保持一致的,但是存在概念上的差别,page cache是针对文件的cache,buffer是针对磁盘块数据的cache,仅此而已。 2. 为什么需要page cache 通过上图,我们可以直观的看到,标准的I/O和内存映射会先将数据写到Page Cache,这样做是通过减小I/O次数来提升读写效率。我们来实际的例子,我们先来生成一个1G的文件,然后通过把Page cache清空,确保文件内容不在内存中,一次来比较第一次和第二次读文件的差异。 # 1. 生成一个1G的文件dd if=/dev/zero of=/home/dd.out bs=4096 count=1048576# 2.第一次读取文件的耗时如下:root@root-PC:~# time cat /home/dd.out &> /dev/nullreal 0m1.109suser 0m0.016ssys 0m1.093s# 23.清空Page Cache,先执行一下sync来将脏页同步到磁盘,在执行drop cachesync && echo 3 > /proc/sys/vm/drop_caches# 4. 第二次读取文件的耗时如下: root@root-PC:~# time cat /home/dd.out &> /dev/nullreal 0m36.018suser 0m0.069ssys 0m4.839s 通过这两次详细的过程,可以看出第一次读取文件的耗时远小于第二次耗时 因为第一次读取的时候,由于文件内容已经在生成文件的时候已经存在,所以直接从内存读取的数据 第二次会将缓存数据清掉,会从磁盘上读取内容,磁盘I/O比较耗时,内存相比磁盘会快很多 所以Page Cache存在的意义,减小I/O,提升应用的I/O速度。对于Page Cache方案,我们采用原则如下 如果不想增加应用的复杂度,我们优先使用内核管理的Page Cache 如果应用程序需要做精确控制,就需要不走Cache,因为Page Cache有它自身的局限性,就是对于应用程序太过于透明了,以至于很难有好的控制方法。 3. Page Cache是如何“诞生的” Page Cache的产生有两种不同的方式 Buffered I/O(标准I/O) Memory-Mapped I/O(储存映射IO) 这两种方式分别都是如何产生Page Cache的呢? 从图中可以看到,二者是都能产生Page Cache,但是二者还是有差异的 标准I/O是写的话用户缓存区(User page对应的内存),然后再将用户缓存区里的数据拷贝到内核缓存区(Pagecahe Page对应的内存);如果是读的话则是内核缓存区拷贝到用户缓存区,再从用户缓存区去读数据,也就是Buffer和文件内容不存在映射关系 储存映射IO,则是直接将Page Cache的Page给映射到用户空间,用户直接读写PageCache Page里的数据 从原理来说储存映射I/O要比标准的I/O效率高一些,少了“用户空间到内核空间互相拷贝”的过程。下图是一张简图描述这个过程: 首先,往用户缓冲区Buffer(用户空间)写入数据,然后,Buffer中的数据拷贝到内核的缓冲区(这个是PageCache Page) 如果内核缓冲区还没有这个page,就会发生Page Fault会去分配一个Page;如果有,就直接用这个PageCache的Page 拷贝结束后,该PageCache的Page是一个Dirty Page脏页,然后该Dirty Page中的内容会同步到磁盘,同步到磁盘后,该PageCache Page变味Clean Page并且继续存在系统中 我们可以通过手段来测试脏页,如下图所示 $ cat /proc/vmstat | egrep "dirty|writeback"nr_dirty 44nr_writeback 0nr_writeback_temp 0nr_dirty_threshold 1538253nr_dirty_background_threshold 768187 nr_dirty:表示系统中积压了多少脏页(单位为Page 4KB) nr_writeback则表示有多少脏页正在回写到磁盘中(单位为Page 4KB) 总结 读过程,当内核发起一个读请求时候 先检查请求的数据是否缓存到page Cache中,如果有则直接从内存中读取,不访问磁盘 如果Cache中没有请求数据,就必须从磁盘中读取数据,然后内核将数据缓存到Cache中 这样后续请求就可以命中cache,page可以只缓存一个文件的部分内容,不需要把整个文件都缓存 写过程,当内核发起一个写请求时候 直接写到Cache中,内核会将被写入的Page标记为dirty,并将其加入到dirty list中 内核会周期性的将dirty list中的page回写到磁盘上,从而使磁盘上的数据和内存中缓存的数据一致 4. page cache是如何“死亡” free命令中的buffer/cache中的是“活着”的Page Cache,那他们是什么时候被回收的呢? 回收的主要方式有两种 直接回收: 后台回收: 观察Page cache直接回收和后台回收最简单方便的方式,借助这个工具,可以明确观察内存回收行为 pgscank/s: kswapd(后台回收线程)每秒扫面的Page个数 pgscand/s: Application在内存申请过程中每秒直接扫描的Page个数 pgsteal/s: 扫面的page中每秒被回收的个数 %vmeff: pgsteal/(pgscank+pgscand),回收效率,越接近100说明系统越安全,越接近0,说明系统内存压力越大 pgpgin/s 表示每秒从磁盘或SWAP置换到内存的字节数(KB) pgpgout/s: 表示每秒从内存置换到磁盘或SWAP的字节数(KB) fault/s: 每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor) majflt/s: 每秒钟产生的主缺页数. pgfree/s: 每秒被放入空闲队列中的页个数 需要C/C++ Linux服务器架构师学习资料加qun579733396获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享 5.Page Cache性能优化 通过前文我们知道了Linux是用Cache/Buffer缓存数据,提高系统的I/O性能,且有一个回刷任务在适当时候把脏数据回刷到储存介质中。那么接下来我们重点学习优化机制。 包括以下内容 什么时候触发回刷? 脏数据达到多少阈值还是定时触发呢? 内核是如何做到回写机制的 (1) 配置概述 Linux内核在/proc/sys/vm中有透出数个配置文件,可以对触发回刷的时机进行调整。内核的回刷进程是怎么运作的呢?这数个配置文件有什么作用呢? root@public-VirtualBox:~# sysctl -a | grep dirtyvm.dirty_background_bytes = 0vm.dirty_background_ratio = 10vm.dirty_bytes = 0vm.dirty_expire_centisecs = 3000vm.dirty_ratio = 20vm.dirty_writeback_centisecs = 500vm.dirtytime_expire_seconds = 43200 在/proc/sys/vm中有以下文件与回刷脏数据密切相关: vm.dirty_background_ratio: 内存可以填充脏数据的百分比,这些脏数据稍后会写入磁盘。pdflush/flush/kdmflush这些后台进程会稍后清理脏数据。比如,我有32G内存,那么有3.2G(10%的比例)的脏数据可以待着内存里,超过3.2G的话就会有后台进程来清理。 vm.dirty_ratio 可以用脏数据填充的绝对最大系统内存量,当系统到达此点时,必须将所有脏数据提交到磁盘,同时所有新的I/O块都会被阻塞,直到脏数据被写入磁盘。这通常是长I/O卡顿的原因,但这也是保证内存中不会存在过量脏数据的保护机制。 vm.dirty_background_bytes 和 vm.dirty_bytes 另一种指定这些参数的方法。如果设置 xxx_bytes版本,则 xxx_ratio版本将变为0,反之亦然。 vm.dirty_expire_centisecs 指定脏数据能存活的时间。在这里它的值是30秒。当 pdflush/flush/kdmflush 在运行的时候,他们会检查是否有数据超过这个时限,如果有则会把它异步地写到磁盘中。毕竟数据在内存里待太久也会有丢失风险。 vm.dirty_writeback_centisecs 指定多长时间 pdflush/flush/kdmflush 这些进程会唤醒一次,然后检查是否有缓存需要清理。 实际上dirty_ratio的数字大于dirty_background_ratio,是不是就不会达到dirty_ratio呢? 首先达到dirty_background_ratio的条件后触发flush进程进行异步的回写操作,但是这一过程中应用进程仍然可以进行写操作,如果多个应用写入的量大于flush进程刷出的量,那自然就会达到vm.dirty_ratio这个参数所设定的阙值,此时操作系统会转入同步地进行脏页的过程,阻塞应用进程。 (2)配置实例 单纯的配置说明毕竟太抽象。结合网上的分享,我们看看在不同场景下,该如何配置? 场景1:尽可能不丢数据 有些产品形态的数据非常重要,例如行车记录仪。在满足性能要求的情况下,要做到尽可能不丢失数据。 /* 此配置不一定适合您的产品,请根据您的实际情况配置 */dirty_background_ratio = 5dirty_ratio = 10dirty_writeback_centisecs = 50dirty_expire_centisecs = 100 这样的配置有以下特点: 当脏数据达到可用内存的5%时唤醒回刷进程 脏数据达到可用内存的10%时,应用每一笔数据都必须同步等待 每隔500ms唤醒一次回刷进程 当脏数据达到可用内存的5%时唤醒回刷进程 由于发生交通事故时,行车记录仪随时可能断电,事故前1~2s的数据尤为关键。因此在保证性能满足不丢帧的情况下,尽可能回刷数据。 此配置通过减少Cache,更加频繁唤醒回刷进程的方式,尽可能让数据回刷。 此时的性能理论上会比每笔数据都O_SYNC略高,比默认配置性能低,相当于用性能换数据安全。 场景2:追求更高性能 有些产品形态不太可能会掉电,例如服务器。此时不需要考虑数据安全问题,要做到尽可能高的IO性能。 /* 此配置不一定适合您的产品,请根据您的实际情况配置 */dirty_background_ratio = 50dirty_ratio = 80dirty_writeback_centisecs = 2000dirty_expire_centisecs = 12000 这样的配置有以下特点: 当脏数据达到可用内存的50%时唤醒回刷进程 当脏数据达到可用内存的80%时,应用每一笔数据都必须同步等待 每隔20s唤醒一次回刷进程 内存中脏数据存在时间超过120s则在下一次唤醒时回刷 与场景1相比,场景2的配置通过 增大Cache,延迟回刷唤醒时间来尽可能缓存更多数据,进而实现提高性能 场景3:突然的IO峰值拖慢整体性能 什么是IO峰值?突然间大量的数据写入,导致瞬间IO压力飙升,导致瞬间IO性能狂跌,对行车记录仪而言,有可能触发视频丢帧。 /* 此配置不一定适合您的产品,请根据您的实际情况配置 */dirty_background_ratio = 5dirty_ratio = 80dirty_writeback_centisecs = 500dirty_expire_centisecs = 3000 这样的配置有以下特点: 当脏数据达到可用内存的5%时唤醒回刷进程 当脏数据达到可用内存的80%时,应用每一笔数据都必须同步等待 每隔5s唤醒一次回刷进程 内存中脏数据存在时间超过30s则在下一次唤醒时回刷 这样的配置,通过增大Cache总容量,更加频繁唤醒回刷的方式,解决IO峰值的问题,此时能保证脏数据比例保持在一个比较低的水平,当突然出现峰值,也有足够的Cache来缓存数据。 (3)内核演变 对于回写方式在之前的2.4内核中,使用 bdflush的线程专门负责writeback的操作,因为磁盘I/O操作很慢,而现代操作系统通常具有多个块设备,如果bdflush在其中一个块设备上等待I/O操作的完成,可能需要很长的时间,此时其他块设备还处于空闲状态,这时候,单线程模式的bdflush就称为了影响性能的瓶颈。而此时bdflush是没有周期扫描功能,因此需要配合kupdate线程一起使用。 bdflush 存在的问题: 整个系统仅仅只有一个 bdflush 线程,当系统回写任务较重时,bdflush 线程可能会阻塞在某个磁盘的I/O上, 导致其他磁盘的I/O回写操作不能及时执行 于是在2.6内核中,bdflush机制就被pdflush取代,pdflush是一组线程,根据块设备I/O负载情况,数量从最少的2个到最多的8个不等,如果1S内都没有空闲的pdflush线程可用,内核将创建一个新的pdflush线程,反之某个pdflush线程空闲超过1S,则该线程将会被销毁。pdflush 线程数目是动态的,取决于系统的I/O负载。它是面向系统中所有磁盘的全局任务的。 pdflush 存在的问题: pdflush的数目是动态的,一定程度上缓解了 bdflush 的问题。但是由于 pdflush 是面向所有磁盘的,所以有可能出现多个 pdflush 线程全部阻塞在某个拥塞的磁盘上,同样导致其他磁盘的I/O回写不能及时执行。 于是在内最新的内核中,直接将一个块设备对应一个thread,这种内核线程被称为flusher threads,线程名为“Writeback",执行体为"wb_workfn",通过workqueue机制实现调度。 (4)内核实现 由于内核page cache的作用,写操作实际被延迟写入。当page cache里的数据被用户写入但是没有刷新到磁盘时,则该page为脏页(块设备page cache机制因为以前机械磁盘以扇区为单位读写,引入了buffer_head,每个4K的page进一步划分成8个buffer,通过buffer_head管理,因此可能只设置了部分buffer head为脏)。 脏页在以下情况下将被回写(write back)到磁盘上: 脏页在内存里的时间超过了阈值。 系统的内存紧张,低于某个阈值时,必须将所有脏页回写。 用户强制要求刷盘,如调用sync()、fsync()、close()等系统调用。 以前的Linux通过pbflush机制管理脏页的回写,但因为其管理了所有的磁盘的page/buffer_head,存在严重的性能瓶颈,因此从Linux 2.6.32开始,脏页回写的工作由bdi_writeback机制负责。bdi_writeback机制为每个磁盘都创建一个线程,专门负责这个磁盘的page cache或者buffer cache的数据刷新工作,以提高I/O性能。 在 kernel/sysctl.c中列出了所有的配置文件的信息 static struct ctl_table vm_table[] = { ... { .procname = "dirty_background_ratio", .data = &dirty_background_ratio, .maxlen = sizeof(dirty_background_ratio), .mode = 0644, .proc_handler = dirty_background_ratio_handler, .extra1 = &zero, .extra2 = &one_hundred, }, { .procname = "dirty_ratio", .data = &vm_dirty_ratio, .maxlen = sizeof(vm_dirty_ratio), .mode = 0644, .proc_handler = dirty_ratio_handler, .extra1 = &zero, .extra2 = &one_hundred, }, { .procname = "dirty_writeback_centisecs", .data = &dirty_writeback_interval, .maxlen = sizeof(dirty_writeback_interval), .mode = 0644, .proc_handler = dirty_writeback_centisecs_handler, }, ...} 这些值在mm/page-writeback.c中有全局变量定义 int dirty_background_ratio = 10;int vm_dirty_ratio = 20;unsigned int dirty_writeback_interval = 5 * 100; /* centiseconds */ 通过ps -aux,我们可以看到writeback的内核进程 这实际上是一个工作队列对应的进程,在default_bdi_init()中创建(mm/backing-dev.c) static int __init default_bdi_init(void){ int err; bdi_wq = alloc_workqueue("writeback", WQ_MEM_RECLAIM | WQ_FREEZABLE | WQ_UNBOUND | WQ_SYSFS, 0); if (!bdi_wq) return -ENOMEM; err = bdi_init(&noop_backing_dev_info); return err;} 回刷进程的核心是函数wb_workfn(),通过函数wb_init()绑定。 static int wb_init(struct bdi_writeback *wb, struct backing_dev_info *bdi int blkcg_id, gfp_t gfp){ ... INIT_DELAYED_WORK(&wb->dwork, wb_workfn); ...} 唤醒回刷进程的操作是这样的 static void wb_wakeup(struct bdi_writeback *wb){ spin_lock_bh(&wb->work_lock); if (test_bit(WB_registered, &wb->state)) mod_delayed_work(bdi_wq, &wb->dwork, 0); spin_unlock_bh(&wb->work_lock);} 表示唤醒的回刷任务在工作队列writeback中执行,这样,就把工作队列和回刷工作绑定了,重点看看这个接口做了些什么工作 void wb_workfn(struct work_struct *work){ struct bdi_writeback *wb = container_of(to_delayed_work(work), struct bdi_writeback, dwork); long pages_written; set_worker_desc("flush-%s", dev_name(wb->bdi->dev)); current->flags |= PF_SWAPWRITE; //如果当前不是一个救援工作队列,或者当前bdi设备已注册,这是一般路径 if (likely(!current_is_workqueue_rescuer() || !test_bit(WB_registered, &wb->state))) { ------------------------(1) /* * The normal path. Keep writing back @wb until its * work_list is empty. Note that this path is also taken * if @wb is shutting down even when we're running off the * rescuer as work_list needs to be drained. */ do {从bdi的work_list取出队列里的任务,执行脏页回写 pages_written = wb_do_writeback(wb); trace_writeback_pages_written(pages_written); } while (!list_empty(&wb->work_list)); } else { -----------------------(2) /* * bdi_wq can't get enough workers and we're running off * the emergency worker. Don't hog it. Hopefully, 1024 is * enough for efficient IO. */ pages_written = writeback_inodes_wb(wb, 1024,//只提交一个work并限制写入1024个pages WB_REASON_FORKER_THREAD); trace_writeback_pages_written(pages_written); } //如果上面处理完到现在这段间隔又有了work,再次立马启动回写进程 if (!list_empty(&wb->work_list)) -----------------------(3) mod_delayed_work(bdi_wq, &wb->dwork, 0); else if (wb_has_dirty_io(wb) && dirty_writeback_interval) wb_wakeup_delayed(wb);//如果所有bdi设备上挂的dirty inode回写完,那么就重置定制器, //再过dirty_writeback_interval,即5s后再唤醒回写进程 current->flags &= ~PF_SWAPWRITE;} 正常路径,rescue workerrescue内核线程,内存紧张时创建新的工作线程可能会失败,如果内核中有会需要回收的内存,就调用wb_do_writeback进行回收 如果当前workqueue不能获得足够的worker进行处理,只提交一个work并限制写入1024个pages 这也过程代码较多,暂不去深入分析,重点关注相关的配置是如何起作用的。 (5) 触发回写方式 触发writeback的地方主要有以下几处: 5.1 主动发起 手动执行sysn命令 sync-> SYSCALL_DEFINE0(sync)-> sync_inodes_one_sb-> sync_inodes_sb-> bdi_queue_work syncfs系统调用 SYSCALL_DEFINE1(syncfs, int, fd)-> sync_filesystem-> __sync_filesystem-> sync_inodes_sb-> bdi_queue_work 直接内存回收,内存不足时调用 free_more_memory-> wakeup_flusher_threads-> __bdi_start_writeback-> bdi_queue_work 分配内存空间不足,触发回写脏页腾出内存空间 __alloc_pages_nodemask-> __alloc_pages_slowpath-> __alloc_pages_direct_reclaim-> __perform_reclaim-> try_to_free_pages-> do_try_to_free_pages-> wakeup_flusher_threads-> __bdi_start_writeback-> bdi_queue_work remount/umount操作,需要先将脏页写回 5.2 空间层面 当系统的“dirty”的内存大于某个阈值,该阈值是在总共的“可用内存”(包括free pages 和reclaimable pages)中的占比。 参数“dirty_background_ratio”(默认值10%),或者是绝对字节数“dirty_background_bytes”(默认值为0,表示生效)。两个参数只要谁先达到即可执行,此时就会交给专门负责writeback的background线程去处理。 参数“dirty_ratio”(默认值30%)和“dirty_bates”(默认值为0,表示生效),当“dirty”的内存达到这个比例或数量,进程则会停下write操作(被阻塞),先把“dirty”进行writeback。 5.3 时间层面 周期性的扫描,扫描间隔用参数:dirty_writeback_interval表示,以毫秒为单位。发现存在最近一次更新时间超过某个阈值(参数:dirty_expire_interval,单位毫秒)的pages。如果每个page都维护最近更新时间,开销会很大且扫描会很耗时,因此具体实现不会以page为粒度,而是按inode中记录的dirtying-time来计算。 (6)总结 文件缓存是一项重要的性能改进,在大多数情况下,读缓存在绝大多数情况下是有益无害的(程序可以直接从RAM中读取数据)。写缓存比较复杂,Linux内核将磁盘写入缓存,过段时间再异步将它们刷新到磁盘。这对加速磁盘I/O有很好的效果,但是当数据未写入磁盘时,丢失数据的可能性会增加。

    2024-12-20 197浏览
  • 认识动力蓄电池管理系统

    一、认识动力蓄电池管理系统 动力蓄电池的能量储存与输出都需要模块来进行管理,即动力蓄电池能量管理模块,也称为动力蓄电池管理系统,或动力蓄电池能量管理系统,简称BMS。 1.动力蓄电池管理系统的基本构架组成 BMS按性质可分为硬件和软件,按功能可分为数据采集单元和控制单元。BMS的硬件有主控盒、从控盒、高压控制盒、高压绝缘盒,还包括采集电压、电流、温度等数据的电子传感器,软件包括底层软件和应用层软件,用来监测电池的电压、电流、SOC值、绝缘电阻值、温度值,通过与整车控制器、充电机的通信,控制动力蓄电池系统的充放电。 2.动力蓄电池管理系统的基本功能 BMS通过电压、电流及温度检测等实现对动力蓄电池系统的过电压、欠电压、过电流、过高温和过低温保护,继电器控制,SOC估算,充放电管理,加热或保温,均衡控制,故障报警及处理,与其他控制器通信等功能,此外电池管理系统还具有高压回路绝缘检测功能,以及为动力蓄电池系统加热功能。 动力蓄电池组内的BMS实时采集各单体的电压值、各温度传感器的温度值、电池系统的总电压值和总电流值、电池系统的绝缘电阻值等数据,并根据BMS中设定的阈值判定电池系统工作是否正常,并对故障实时监控。动力蓄电池系统通过BMS使用CAN与整车控制器或允电机之间进行通信,对动力蓄电池系统进行充放电等综合管理。 从整车角度,电池管理系统(BMS)作用或任务可以详述为如下几点: (1)保护单体和动力蓄电池组不受到损害。 (2)使电池工作在合适的电压和温度范围内。 (3)在保持电池在合适的条件运行后,满足整车的需求。 (4)电池参数检测:包括总电压、总电流、单体电压检测、温度检测、绝缘检测、碰撞检测、阻抗检测、烟雾检测等。 (5)电池状态建立:包括荷电量(SOC)、电池功率(SOP)、电池健康状态(SOH)。 (6)在线诊断:故障包括传感器故障、网络故障、电池故障、电池过充、过放、过电流、绝缘故障等。 (7)电池安全保护和告警:包括温控系统控制和高压控制,当诊断出故障,BMS上报故障给整车控制器和充电机,同时切断高压以保护电池不受到损害,包括漏电保护等。 (8)充电控制:BMS慢充和快充控制。 (9)电池一致性控制:BMS采集单体电压信息,采用均衡方式使电池达到一致性,电池的均衡性方式有耗散式和非耗散式。 (10)热管理功能:动力蓄电池组各点的温度采集,在充电和放电过程中,BMS决定是否开启加热和冷却。 (11)网络功能:包括在西安标定和健康、在线程序下载。通常采用CAN网络。 (12)信息存储:BMS需要存储关进数据如SOC、SOH、充放电安时数、故障码。 二、动力蓄电池管理系统的工作原理 BMS的工作原理可简单归纳为:数据采集电路采集动力蓄电池状态信息数据后,由电子控制单元进行数据处理和分析,然后根据分析结果对系统内的相关功能模块发出控制指令,向外传递信息。 1.充电原理 (1)预充电 车载充电机接收到充电枪插入信号后唤醒整车控制器及BMS,BMS进行初检和初始化,完成后上报给整车控制器。整车控制器控制主负继电器闭合,BMS控制主负继电器闭合,对各单体蓄电池进行预充电,确定单体蓄电池无短路后,预充电完成。充电初期预充电流程如下图所示。 (2)充电 预充电完成后,BMS闭合主正继电器,随后断开预充继电器,主电路接通,动力蓄电池开始充电,充电流程如下图所示。 2.放电原理 (1)放电初期 打开点火开关至ON挡,整车控制器唤醒BMS,BMS进行自检和初始化,完成后上报给整车控制器。整车控制器发出高压供电指令,BMS开始按顺序控制继电器的闭合和断开。 因电路中电机控制器和空调压缩机控制器等含有电容,在放电初期,BMS控制预充继电器闭合,给各控制器电容采用低压、小电流进行放电,当电容两端电压接近动力蓄电池总电压时,断开预充继电器。放电初期预充流程如下图所示。 (2)放电 BMS闭合主正继电器,断开预充继电器,主电路接通,动力蓄电池开始放电。放电流程如下图所示。 3.充电加热原理 当动力蓄电池在冬季低温环境下工作时,充放电容量会降低。汽车充电容量会随温度的降低而下降,因而设置了动力蓄电池加热系统,当车辆充电时,如果电芯温度低于设定值,BMS会控制加热继电器闭合,利用力电池内部的加热元件给电芯加热。充电加热流程图如下图所示。 三、动力蓄电池及电池管理系统认知 在纯电动汽车中,动力蓄电池作为汽车唯一的动力来源,动力蓄电池电能的高低决定了电动汽车的行驶里程。其组成一般包括动力电池模组、结构系统、电气系统热管理系统、BMS等,如下图所示为吉利EV450动力蓄电池总成结构示意图。 1.电池模组 吉利帝豪EV450动力蓄电池有17个模组,总电压346V,每个模组由6个单体电池串联而成。模组线路板如下图所示。 2.BMS及控制线束 通过检测电池组中各单体蓄电池的状态来确定整个电池系统的状态,并根据单体蓄电池的状态对动力蓄电池系统进行对应的控制调整和策略实施,实现对动力蓄电池系统及各单体的充放电管理以保证动力蓄电池系统安全稳定地运行,进而达到增加行驶里程,延长使用寿命,降低运行成本的目的。帝豪EV450动力蓄电池BMS系统如下图所示。 3.附件 主要包括模组连接线、冷却水管、保险丝等。 4.高压组件系统 主要包括继电器总成、快充插件、高压插件等,如下图所示。

    2024-12-18 77浏览
  • 串行接口为什么比并行接口要好?

    虽然并行接口在许多领域曾经广泛使用,但随着信号完整性要求的提高和传输速率的提升,许多并行接口逐步被高速串行接口(如 PCIe、SATA、以太网等)取代。然而,并行接口仍在一些嵌入式系统和专用场景中保留了优势,如 DDR 内存,仍然不可或缺。 一、并行接口的没落 在计算机和电子设备的发展历史中,并行接口曾一度占据主导地位。并行接口通过多条数据线同时传输多个比特位的数据,具备较高的带宽性能。然而,随着技术的发展,并行接口逐渐被串行接口所取代。这一转变的主要原因在于并行接口固有的一些缺陷: 信号干扰:并行接口需要多条信号线,这些线之间的电磁干扰会限制信号完整性,特别是在高频率下。 布线复杂度:并行接口的信号线数量多,PCB布线复杂,容易增加成本和设计难度。 同步难度:在高频情况下,保持所有信号线同步(即数据到达的时间一致)变得极具挑战性。 常见的并行接口 以下是一些经典的并行接口: IDE (Integrated Drive Electronics):用于连接硬盘和主板,后来被串行接口SATA取代。 PCI (Peripheral Component Interconnect):并行的计算机总线标准,逐步被PCI Express(串行接口)替代。 Centronics:用于连接打印机,逐步被USB取代。 并行端口(Parallel Port):主要用于外设连接,例如打印机和扫描仪,也已逐渐淘汰。 串行接口相对并行接口的优势 串行接口通过一条或少量几条数据线传输数据,相较于并行接口,具有以下优势: 减少干扰:减少信号线数量降低了线间干扰,提高了信号完整性。 简化布线:减少引脚和PCB布线复杂性,降低了制造成本。 更高的频率:串行接口的点对点传输设计允许更高的传输速率。 同步简化:在串行接口中,通常只需同步一条数据线和一条时钟线(或者通过嵌入时钟的方法实现同步)。 适应性强:串行接口可以支持更长的传输距离,同时减少衰减。 二、串行接口的关键技术 串行接口的实现在芯片原理上涉及多个核心技术,包括数据的串/并转换、异步和同步通信的处理、时钟管理及恢复等。以下将详细探讨这些关键点: 1. 数据的串/并转换 (1) 并行到串行转换 (Parallel-to-Serial Conversion) 在串行接口中,数据通常由宽并行总线(如8位或16位)转换为单比特流传输。关键步骤: 移位寄存器 (Shift Register): 并行数据写入寄存器,时钟信号控制每次移位一位,将数据按位输出为串行流。 例如:8位数据10110011在 8 个时钟周期内输出每一位。 串行到并行的过程比较好理解,实现方法也比较多,下图只是实例帮助理解,具体一般都是用Verilog或者VHDL语言描述。 (2) 串行到并行转换 (Serial-to-Parallel Conversion) 接收端需将串行数据重组为并行数据: 移位寄存器: 数据通过串行输入端逐位移入寄存器。 当寄存器满后(如8位),输出并行数据给处理单元。 (3) 双缓冲机制: 为提高吞吐量,通常采用双缓冲机制,允许数据转换和传输同时进行。 2. 异步和同步通信 串行接口的关键在于如何保持数据收发双方同步 (1) 异步通信 (Asynchronous Communication) **定义:**数据传输中发送端和接收端的时钟无直接关联。 帧结构: 起始位 (Start Bit):标志传输开始。 数据位 (Data Bits):实际传输的内容,通常为 8 位或其他配置值。 校验位 (Parity Bit):用于简单错误检测。 停止位 (Stop Bit):标志帧结束,提供接收端时间校准。 实现要点: **波特率 (Baud Rate):**发送端和接收端必须配置一致。 **采样定时器:**接收端通过内部采样时钟检测起始位并锁定数据位。 (2) 同步通信 (Synchronous Communication) **定义:**发送端和接收端共享同一个时钟。 时钟传输: **独立时钟线:**如 SPI 协议,通过SCLK提供同步时钟信号。 **嵌入时钟:**如 Manchester 编码,时钟嵌入数据流中,接收端需恢复时钟。 实现要点: 主设备控制时钟,数据按时钟边沿采样。 接收端无需校准波特率,减少时序偏移问题。 3. 时钟处理 (1) 同步时钟的生成与分配 片上时钟生成器 (Clock Generator):通过晶振和锁相环 (PLL) 生成稳定时钟信号。 分频器:根据协议要求,生成合适频率的通信时钟。 (2) 异步时钟的采样与校准 采样率:通常为波特率的 16 倍或更高,确保高精度采样。 起始位检测:利用采样点检测电平变化,以锁定起始位位置。 4. 时钟恢复 在某些协议中,接收端需从数据流中恢复时钟信号。 (1) 从异步数据流恢复时钟 边沿检测:通过检测信号的上升沿或下降沿,重新生成采样时钟。 数字锁相环 (DPLL):用于动态调整时钟频率,以匹配发送端时钟。 (2) 嵌入时钟的提取 编码机制:如 Manchester 编码或 8b/10b 编码,时钟信号与数据流同时传输。 相位对齐:通过解码模块将时钟从数据中提取并对齐。 三、常见的串行接口 串行接口按照速率可分为低速和高速接口: 低速串行接口 UART (Universal Asynchronous Receiver Transmitter): 一种异步接口,常用于短距离通信。 应用:嵌入式设备、传感器通信等。 I²C (Inter-Integrated Circuit): 一种双线的同步串行通信接口,适合主从架构。 应用:芯片间通信(如MCU和EEPROM之间)。 SPI (Serial Peripheral Interface): 高速的全双工同步通信协议,适合主从设备。 应用:外设通信,如显示屏、传感器。 高速串行接口 USB (Universal Serial Bus): 从USB 1.0到USB 4的演变提供了逐步提升的带宽和兼容性。 应用:几乎所有的外设连接。 SATA (Serial ATA): 替代了并行ATA,用于硬盘连接。 特点:点对点连接,传输速率高。 PCIe (Peripheral Component Interconnect Express): 串行接口,用于计算机内部高速设备互连,如显卡和固态硬盘。 特点:支持多通道(x1、x4、x8等)并行。 Thunderbolt: 高速通用接口,支持数据、视频和电源的复用。 应用:高性能设备连接。 MIPI DSI/CSI: 针对移动设备的高速接口,用于显示(DSI)和摄像头(CSI)。 四、串行接口的发展趋势与技术挑战 高速接口的实现(如 PCI、PCIe、SATA、以太网和 SERDES)涉及更复杂的技术,因为数据传输速率更高,通常达到数 Gbps 或更高。以下是这些高速接口的关键原理和实现方法: 1. 串行高速接口的核心特性 高速数据传输:每秒传输数 Gbps 或更高,需要优化物理层和协议层设计。 差分信号:高速接口通常使用差分信号(如 PCIe 的 TX+/TX-),增强抗干扰能力并减少电磁辐射 (EMI)。 嵌入时钟:时钟和数据在同一信号中传输(如 PCIe 和 SATA),减少引脚数量,简化连接。并且有一系列优化SI的手段。 多通道:支持多通道并行传输(如 PCIe 的 x1、x4、x8 通道配置)。 2. 高速接口的关键技术 (1) 串并转换(SerDes) 串行器/解串器 (SerDes): 高速接口中,SerDes 是数据串行化和解串行化的核心模块。 解串器从接收的串行数据流中提取时钟。 根据时钟信号将串行数据重新转换为并行数据。 并行数据经并行总线输入串行器。 使用高速移位寄存器将数据按位输出,同时嵌入时钟信号。 发送端: 接收端: SerDes 的速率匹配:通常采用片上锁相环 (PLL) 精确控制数据传输速率。 (2) 时钟嵌入与恢复 嵌入时钟: 在高速传输中,通过编码技术(如 8b/10b 或 64b/66b 编码)将时钟信号嵌入数据流,简化布线并提高可靠性。 时钟恢复: 接收端通过锁相环 (PLL) 或时钟数据恢复 (CDR) 技术提取嵌入的时钟信号。 相位对齐:利用数据的过零点调整时钟相位,确保数据采样正确。 (3) 差分信号传输 双端传输:高速接口采用差分对(如 PCIe 的 TX+/TX-),两个信号电平相反,增强抗干扰能力。 优点: 抵消电磁干扰 (EMI)。 提高信号完整性,尤其在高频信号中减少串扰。 3. 典型高速接口的实现 (1) PCI 到 PCIe PCI(并行总线): 使用共享时钟信号,所有设备按总线仲裁机制轮流访问总线。 存在时钟偏差和信号完整性问题,限制了传输速率。 PCIe(点对点串行总线): 物理层:SerDes 负责数据串行化和解串行化。 数据链路层:处理数据包分组和错误校验。 事务层:支持高层协议(如内存读写请求)。 点对点链路:每个设备有独立的通信链路,消除总线仲裁延迟。 多通道配置:x1、x4、x8 等通道配置,多个通道可并行传输,提高带宽。 分层架构: (2) SATA(串行ATA) 架构: 由并行 ATA 演变而来,采用全双工串行通信。 使用 8b/10b 编码,嵌入时钟,支持数据速率高达 6 Gbps(SATA 3.0)。 工作原理: 主机通过 SerDes 发送串行数据流,存储设备解码后处理。 双向链路实现读写操作,同时保持高信号完整性。 (3) 以太网(Ethernet) 低速到高速的演变: 从最早的 10 Mbps 发展到 10 Gbps、25 Gbps,甚至 400 Gbps。 关键技术: 物理层:使用差分对传输,支持长距离传输。 编码:如 PAM4 编码,通过每个符号携带更多比特,提高带宽利用率。 时钟恢复:在接收端使用 CDR 技术精确提取时钟。 4. SerDes 在高速接口中的角色 SerDes 是所有高速接口的核心,实现以下功能: 发送端: 将并行数据以高频率转换为串行数据流。 嵌入时钟,减少额外的时钟线。 接收端: 从串行数据中恢复时钟信号。 对串行数据解码并重新组合成并行数据。 时序管理: 使用锁相环 (PLL) 控制高速信号的相位和频率。 减少抖动 (Jitter),确保数据完整性。 5. 信号完整性和高速设计 高速接口面临的主要挑战是信号完整性,设计中需重点考虑: 抖动 (Jitter):时钟或数据信号的随机偏移。需优化 PLL 和 SerDes 的设计以减少抖动。 眼图 (Eye Diagram):用于分析信号质量,良好的眼图表示高信号完整性。 阻抗匹配:差分对的阻抗需匹配 PCB 走线设计,避免信号反射。 去均衡 (De-Emphasis):在发送端对高频成分增加衰减,减少长距离传输中的信号失真。 五、为什么并行接口线多,却速率不如串行总线。 无需独立时钟信号,噪声干扰更少 高速串口通过编码技术(如8b/10b编码)将时钟信息嵌入数据流中,而不需要单独传输时钟信号。数据流本身经过加扰,避免了长串相同的比特(如连续超过5个0或1),确保时钟恢复的稳定性,同时消除了周期性变化,避免频谱集中。这种设计通过数据沿变使用PLL恢复时钟,进而采集数据流。省去独立时钟的传输不仅显著降低了功耗,还减少了由时钟信号引入的噪声干扰。 差分传输增强抗干扰能力 高速串口采用差分信号传输,当外界噪声同时作用于两条差分线时,接收端通过相减可以有效抵消干扰。差分设计对外界噪声有很强的抵抗能力,确保数据传输的稳定性。 无时钟偏移问题 由于高速串口不依赖同步时钟,不存在时钟与数据对齐的问题。只需保证差分信号线的长度匹配即可,这相对容易实现。差分信号的两条线总是保持相反状态且高度相关,即便发生延时变化,也可以通过简单的延时补偿实现对齐。而在并行总线中,由于多根独立信号线的无相关性,不同信号线的跳变时间容易受布线、阻抗和噪声的影响,从而产生时钟偏移问题,导致数据传输错误。 线少、干扰低 并行传输通常需要32或64条信号线,线间的电磁干扰显著,尤其在高频下,可能导致数据篡改或误码。相比之下,串行传输仅需4条线(如Rx和Tx的两对差分线)。差分信号在线路跳变时会产生相反的干扰,从而互相抵消,确保总噪声趋于零,避免内部噪声问题。 六、DDR接口为什么还保留并行,没有演进成串行总线? DDR接口保持并行传输而没有被串行总线替代,主要是因为其特定的应用需求和技术特点,使并行传输在这一场景中更具优势: 1. 延迟要求苛刻,串行传输不具备优势 并行总线延迟更低:DDR存储器的一个核心需求是低延迟。串行总线需要经过数据序列化和解序列化(SerDes)过程,这会引入额外的延迟,而DDR接口直接传输多条并行数据线,延迟更小,更适合需要实时响应的存储访问。 内存带宽与时延的平衡:DDR接口通过宽度(多条数据线并行传输)和频率的结合来提供高带宽,而串行接口在达到相同带宽时会牺牲一些时延。 2. 高带宽需求与物理距离限制 内存与控制器距离较短:DDR接口设计用于处理器和内存之间的短距离高带宽通信。在这种场景下,并行总线可以通过多条线同时传输数据,高效地利用接口带宽,而无需像串行总线那样依赖高频率来提升速率。 更高的带宽扩展性:并行总线通过增加数据位宽(如64位、128位)简单直观地扩展带宽,而串行接口受限于单通道的速率提升,需要更复杂的设计。 3. 成本与功耗的平衡 节约SerDes资源:串行总线需要SerDes模块来实现高速序列化和解序列化,这增加了成本、功耗和设计复杂性。而并行DDR接口无需额外的SerDes硬件,整体系统功耗更低。 控制信号复用困难:DDR接口中控制信号(如行列选通、地址信号等)和数据是分离的,适合并行总线的传输方式。而串行总线需要更复杂的协议和逻辑来处理这些信号,可能带来额外的开销。 4. 设计和兼容性考虑 长期成熟的生态系统:DDR技术经过多年优化,已经形成了高度成熟的标准和广泛的支持生态,包括芯片设计、PCB布线、信号完整性工具等。大规模切换到串行总线需要对整个生态进行重构,成本高昂且技术风险较大。 布线难度可控:尽管并行总线存在时钟偏移问题,但通过技术手段(如飞线对齐、信号校正等)可以有效解决。而串行总线的高速信号布线要求更高,可能反而在PCB设计中增加复杂度。 5. 适用场景的差异 串行总线(如PCIe、SATA)通常用于长距离、高速、点对点通信场景,而DDR接口的核心应用场景是短距离、低延迟的存储访问。这两种场景需求截然不同,导致串行总线的优势在DDR应用中并不显著。 虽然串行总线在许多领域表现优异,但DDR接口之所以继续采用并行架构,是因为它能更好地满足内存访问对低延迟、高带宽和成本控制的需求。同时,DDR技术已经发展得非常成熟,切换到串行总线需要巨大的技术和生态变革,因此并行传输依然是DDR接口的最优解。

    2024-12-13 69浏览
  • 简述汽车四大总线技术

    目前,有四种主流的车用总线:CAN总线、LIN总线、FlexRay总线和MOST总线。

    2024-12-06 159浏览
  • 为什么I2C信号需要上拉电阻?

    I2C信号需要上拉电阻的原因与其工作原理密切相关。

    2024-09-02 271浏览
  • Linux内核IOMMU机制如何理解?

    前言近期所做的项目,与Linux内核的IOMMU机制有关,因此自己尝试去了解IOMMU的相关知识。

    2024-08-09 159浏览
  • Linux内核的IOMMU机制图文详解

    前言近期所做的项目,与Linux内核的IOMMU机制有关,因此自己尝试去了解IOMMU的相关知识。

    2024-08-02 409浏览
  • PCI插槽与PCI Express插槽有何区别?

    扩展槽(Expansion slot)是主板上用于固定扩展卡并将其连接到系统总线上的插槽,也叫扩展插槽、扩充插槽。扩展槽是一种添加或增强电脑特性及功能的方法。例如,不满意主板整合显卡的性能,可以添加独立显卡以增强显示...

    2024-07-18 167浏览
  • 显示屏接口总结:I2C、SPI、UART、RGB、LVDS,MIPI,EDP和DP...

    显示屏接口一般有I2C、SPI、UART、RGB、LVDS、MIPI、EDP和DP等。下面简要总结一下。 01 中小屏接口I2C、SPI、UART 一般3.5寸以下的小尺寸LCD屏,显示数据量比较少,普遍采用低速串口,如I2C、SPI、UART。 I2C: I2C总线是半双工,两线。 I2C总线的工作速度分为3种: S(标准模式):100Kbps,即 100/8 = 12.5KB/s F(快速模式):400Kbps,即400/8 = 50KB/s HS(高速模式):3.4Mbps,即3.4M/8 = 435KB/s 超高速模式:5Mbit/s,即5M/8 = 525KB/s SPI: SPI总线是全双工,三线或四线制。 SPI没有官方化,速率不统一,根据器件不同传输速率不一,有几M,十几M的,也有几十M的,比I2C速度快。 UART: 无限制,速度取决于波特率,常用9600bps(1.2KB/s)和115200bps(14.4KB/s)。 02 大屏接口RGB、LVDS、MIPI、EDP和DP 高分辨率屏,几乎都是高速串口的接口。主要是LVDS、MIPI-DSI、EDP和DP接口。手机上都是MIPI接口的屏,车载和数码产品上有大量的LVDS接口的屏。 2.1、RGB接口 RGB一般是指RGB色彩模型(RGB color model),是工业界的一种颜色标准。通过对三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色。 a. Parallel RGB 分辨率:1920 * 1080 时钟频率:1920*1080*60*1.2 = 149MHz b. Serial RGB 分辨率:800 * 480 时钟频率:800*3*480*60*1.2 = 83MHz 特点: 1、RGB接口占用的资源较多,所以这个接口的LCD刷新率非常快,软件控制也比较简单; 2、RGB接口的显示数据不需要写入内存进行处理,可以直接写入LCD进行显示,所以响应速度和刷新速度都比MCU接口快很多; 3、缺点是控制需要增加电路,软件初始化需要增加程序,占用资源较多; 4、时钟频率要设置合适。太快,LCD反应不过来,显示不了,太慢也不合适,这个范围可以根据你的刷新率需求和lcd 的规格书(一般会有一个最少响应周期)来确定。 2.2、LVDS接口 LVDS(Low Voltage Differential Signal)即低电压差分信号。1994年由美国国家半导体(NS)公司为克服以TTL电平方式传输宽带高码率数据时功耗大、电磁干扰大等缺点而研制的一种数字视频信号传输方式。它是一种电平标准,广泛应用于液晶屏接口。 其中发送端是一个3.5mA的电流源,产生的3.5mA的电流通过差分线中的一路到接收端。由于接收端对于直流表现为高阻,电流通过接收端的100Ω的匹配电阻产生350mV的电压,同时电流经过差分线的另一路流回发送端。当发送端进行状态变化时,通过改变流经100Ω电阻的电流方向产生有效的'0'和'1' 态。 它是电流驱动的,通过在接收端放置一个负载而得到电压,当电流正向流动,接收端输出为1,反之为0。 特点: 1、LVDS是电流驱动模式  电压摆幅350mV,加载在100Ω电阻上; 2、传输速度快,推荐最大速率为655Mbps ,理论极限速率为1.923Gbps; 3、LVDS不太适合较长距离的信号传送; 4、LVDS接口只用于传输视频数据; 5、LVDS接口主要将RGB TTL非平衡传输信号转换成LVDS平衡传输信号进行传输。 6、LVDS不支持热插拔。 2.3、MIPI接口 MIPI (Mobile Industry Processor Interface) 是2003年由ARM, Nokia, ST ,TI等公司成立的一个联盟,目的是把手机内部的接口如摄像头、显示屏接口、射频/基带接口等标准化,从而减少手机设计的复杂程度和增加设计灵活性。 MIPI联盟下面有不同的WorkGroup,分别定义了一系列的手机内部接口标准,比如 摄像头接口CSI(Camera Serial Interface) 显示接口DSI(Display Serial Interface) 射频接口DigRF 麦克风 /喇叭接口SLIMbus 接口示意图 特点: 1、MIPI不仅能够传输视频数据,还能传输控制指令; 2、MIPI DSI接口是按照特定的握手顺序和指令规则传输屏幕控制所需的视频数据和控制数据; 3、MIPI接口的模组,相较于并口具有速度快,传输数据量大,功耗低,抗干扰好。并且专门为移动设备进行的优化,因而更适合手机和智能平板的连接。 2.4、EDP接口 全称为Embedded DisplayPort,用于笔记本、平板电脑的一种数字接口。是视讯电子标准协会(VESA)针对行动装置应用。 特点: 1、eDP协议是针对DP应用在嵌入式方向架构和协议的拓展,所以eDP协议完全兼容DP协议; 2、eDP接口属内部接口,可以用做芯片与芯片之间的传输,也可用显示屏与驱动板之间的传输; 3、由于该类接口能够实现多数据高速同时传输,且电磁干扰小,目前正在逐渐取代传统的低电压差动讯号(LVDS)接口。 2.5、DP接口 DisplayPort(简称DP)是第一个依赖数据包化数据传输技术的显示通信端口。是一个由PC及芯片制造商联盟开发,视频电子标准协会标准化的数字式视频接口标准。主要用于视频源与显示器等设备的连接,它既可以用于内部显示连接,也可以用于外部的显示连接。 速度: DP1.0:2006年5月发布。带宽10.8Gbps。DP1.0的最大传输速度是8.64Gbit/s,长度是2米。已经废弃。 DP1.2:2009年12月22日发布。它最大的改变是传输速度增加两倍到21.6Gbit/s,支持4K(4096X2160)60Hz,因此支持更高的分辨率、帧速率及色深。 DP1.3:2014年9月15日发布。带宽速度最高32.4Gbps(HBR3),编码后有效带宽为25.92Gbps,可支持4K(3840X2160)120hz、5K(5120X2880)60hz、8K(7680X4320)30hz。 DP1.4:2016年2月份最终版的DP1.4通信端口规范,声道也提升到32声道1536KHz采样率,将为笔记本电脑、智能手机及AIO一体机带来8K级别(7680x4320)的60Hz输出,4K的话则可以上到120Hz。 推荐游戏玩家用DP,因为DP传输机制可以只传输画面变化部分,理论DP延时更低,带宽更大。 特点: 1、DP将在传输视频信号的同时加入对高清音频信号传输的支持,同时支持更高的分辨率和刷新率。 2、DP接口属外部接口,只能用显示器与驱动板之间的传输,不可用做芯片与芯片之间的传输。 3、DP接口常见设备:智能电视,笔记本电脑,独立显卡,显示器。 4、AMD多屏拼接技术必须要DisplayPort接口。 5、带宽更高,成本更低。DP接口可以很轻松的支持2560×1600这样的超高分辨率的显示。 文章来源公众号:硬件笔记本

    2024-07-05 407浏览
正在努力加载更多...
EE直播间
更多
广告