Camera|6.v4l2拓扑架构(基于rk3568)

原创 一口Linux 2023-03-13 11:50
点击左上方蓝色“一口Linux”,选择“设为星标


第一时间看干货文章 

【干货】嵌入式驱动工程师学习路线
【干货】一个适合初学者的Linux物联网综合项目
【干货】Linux嵌入式知识点-思维导图-免费获取



 1

瑞芯微 | 摄像头ov13850移植笔记

Camera | 1.Camera基础知识

Camera | 2.MIPI、CSI基础

Camera | 3.瑞芯微平台MIPI摄像头常用调试命令

Camera | 4.瑞芯微平台MIPI摄像头应用程序编写

Camera | 5.Linux v4l2架构(基于rk3568)

一、 设备节点、模块、拓扑结构关系

拓扑结构是我们了解MIPI-CSI内部模块以及与摄像头连接关系的最直观最便捷的方法。

1. 如何表示拓扑结构?

  • file视角

  • v4l2视角

来自: 参考文档《RKISP_Driver_User_Manual_v1.3.pdf》

  • 模块之间相互独立,通过struct media_entity来进行抽象,通常会将struct media_entity嵌入到其他结构中,以支持media framework功能;
  • entity模块包含struct media_pad,pad可以认为是端口,与其他模块进行联系的媒介,针对特定模块来说它是确定的;
  • pad通过struct media_link来建立连接,指定source和sink,即可将通路建立起来;
  • 各个模块之间最终建立一条数据流,便是一条pipeline了,同一条pipeline中的模块,可以根据前一个模块查找到下一个模块,因此也可以很方便进行遍历,并做进一步的设置操作;

2. 设备节点-------少media的

在/sys/class/video4linux/下可以找到v4l2相关的设备节点:

rk3568_r:/ # ls sys/class/video4linux
ls sys/class/video4linux
v4l-subdev0  v4l-subdev2  video1  video3  video5  video7
v4l-subdev1  video0       video2  video4  video6  video8

rk3568_r:
# cat sys/class/video4linux/video0/dev
cat sys/class/video4linux/video0/dev
81:
0
rk3568_r:/ # cat sys/class/video4linux/video0/name
cat sys/class/video4linux/video0/name
rkisp_mainpath

udev文件系统会为我们在dev/目录下创建一个video0节点,即dev/video0

用户可以打开dev/video0节点,通过IOCTL命令和内核空间进行通信。

rk3568_r:/ # ls /dev/video* -l
ls /dev/video* -l
crw-rw---- 1 media camera 81,   0 2022-11-09 17:06 /dev/video0
crw-rw---- 1 media camera 81,   1 2022-11-09 17:06 /dev/video1
crw-rw---- 1 media camera 81,   2 2022-11-09 17:06 /dev/video2
crw-rw---- 1 media camera 81,   3 2022-11-09 17:06 /dev/video3
crw-rw---- 1 media camera 81,   4 2022-11-09 17:06 /dev/video4
crw-rw---- 1 media camera 81,   5 2022-11-09 17:06 /dev/video5
crw-rw---- 1 media camera 81,   6 2022-11-09 17:06 /dev/video6
crw-rw---- 1 media camera 81,   7 2022-11-09 17:06 /dev/video7
crw-rw---- 1 media camera 81,   8 2022-11-09 17:06 /dev/video8

rk3568_r:/ # ls /dev/v4l-sub* -l
ls /dev/v4l-sub* -l
crw-rw-rw- 1 media camera 81,   9 2022-11-09 17:06 /dev/v4l-subdev0
crw-rw-rw- 1 media camera 81,  10 2022-11-09 17:06 /dev/v4l-subdev1
crw-rw-rw- 1 media camera 81,  11 2022-11-09 17:06 /dev/v4l-subdev2

3. 拓扑结构图

命令media-ctl可以查看拓扑结构图

rk3568_r:/ # media-ctl -d /dev/media0 -p                  
media-ctl -d /dev/media0 -p                               
Opening media device /dev/media0                          
Enumerating entities                                      
Found 13 entities                                         
Enumerating pads and links                                
Media controller API version 0.0.255                      
                                                          
Media device information                                  
------------------------                                  
driver          rkisp-vir0                                
model           rkisp0                                    
serial                                                    
bus info                                                  
hw revision     0x0                                       
driver version  0.0.255                                   
                                                          
Device topology                                           
- entity 1: rkisp-isp-subdev (4 pads, 7 links)            
            type V4L2 subdev subtype Unknown              
            device node name /dev/v4l-subdev0             
        pad0: Sink                                        
                [fmt:SBGGR10/4224x3136                    
                 crop.bounds:(0,0)/4096x3072              
                 crop:(0,0)/4096x3072]                    
                <- "rkisp-csi-subdev":1 []                
                <- "rkisp_rawrd0_m":0 []                  
                <- "rkisp_rawrd2_s":0 []                  
        pad1: Sink                                        
                <- "rkisp-input-params":0 []              
        pad2: Source                                      
                [fmt:YUYV2X8/4096x3072                    
                 crop.bounds:(0,0)/4096x3072              
                 crop:(0,0)/4096x3072]                    
                -> "rkisp_mainpath":0 []                  
                -> "rkisp_selfpath":0 []                  
        pad3: Source                                      
                -> "rkisp-statistics":0 []                
                                                          
- entity 6: rkisp-csi-subdev (6 pads, 5 links)            
            type V4L2 subdev subtype Unknown              
            device node name /dev/v4l-subdev1             
        pad0: Sink                                        
                <- "rockchip-csi2-dphy0":1 []             
        pad1: Source                                      
                -> "rkisp-isp-subdev":0 []                
        pad2: Source                                      
                -> "rkisp_rawwr0":0 []                    
        pad3: Source                                      
        pad4: Source                                      
                -> "rkisp_rawwr2":0 []                    
        pad5: Source                                      
                -> "rkisp_rawwr3":0 []                    
                                                          
- entity 13: rkisp_mainpath (1 pad, 1 link)               
             type Node subtype V4L                        
             device node name /dev/video0                 
        pad0: Sink                                        
                <- "rkisp-isp-subdev":2 []                
                                                          
- entity 19: rkisp_selfpath (1 pad, 1 link)               
             type Node subtype V4L                        
             device node name /dev/video1                 
        pad0: Sink                                        
                <- "rkisp-isp-subdev":2 []                
                                                          
- entity 25: rkisp_rawwr0 (1 pad, 1 link)                 
             type Node subtype V4L                        
             device node name /dev/video2                 
        pad0: Sink                                        
                <- "rkisp-csi-subdev":2 []                
                                                          
- entity 31: rkisp_rawwr2 (1 pad, 1 link)                 
             type Node subtype V4L                        
             device node name /dev/video3                 
        pad0: Sink                                        
                <- "rkisp-csi-subdev":4 []                
                                                          
- entity 37: rkisp_rawwr3 (1 pad, 1 link)                 
             type Node subtype V4L                        
             device node name /dev/video4                 
        pad0: Sink                                        
                <- "rkisp-csi-subdev":5 []                
                                                          
- entity 43: rkisp_rawrd0_m (1 pad, 1 link)               
             type Node subtype V4L                        
             device node name /dev/video5                 
        pad0: Source                                      
                -> "rkisp-isp-subdev":0 []                
                                                          
- entity 49: rkisp_rawrd2_s (1 pad, 1 link)               
             type Node subtype V4L                        
             device node name /dev/video6                 
        pad0: Source                                      
                -> "rkisp-isp-subdev":0 []                
                                                          
- entity 55: rkisp-statistics (1 pad, 1 link)             
             type Node subtype V4L                        
             device node name /dev/video7                 
        pad0: Sink                                        
                <- "rkisp-isp-subdev":3 []                
                                                          
- entity 61: rkisp-input-params (1 pad, 1 link)           
             type Node subtype V4L                        
             device node name /dev/video8                 
        pad0: Source                                      
                -> "rkisp-isp-subdev":1 []                
                                                          
- entity 67: rockchip-csi2-dphy0 (2 pads, 2 links)        
             type V4L2 subdev subtype Unknown             
             device node name /dev/v4l-subdev2            
        pad0: Sink                                        
                <- "m00_b_ov13850 4-0010":0 []            
        pad1: Source                                      
                -> "rkisp-csi-subdev":0 []                
                                                          
- entity 70: m00_b_ov13850 4-0010 (1 pad, 1 link)         
             type V4L2 subdev subtype Sensor              
             device node name /dev/v4l-subdev3            
        pad0: Source                                      
                [fmt:SBGGR10/4224x3136]                   
                -> "rockchip-csi2-dphy0":0 []                                                              

下面是根据显示内容绘制的拓扑图:

拓扑结构

该图中各个entity对应的设备节点名称已经标注。模块的上方的黄色pad默认是source pad,下方的黄色pad是sink pad

字符设备类型主要有两种(只考虑摄像头):

  • /dev/videox  (x取值0~8) (所有设备共用主设备号81,次设备号区分)
  • /dev/v4l-subdevx   (x取值0~3)

video设备主要用于图像操作,必须创建结构体struct video_device变量, v4l-subdev设备主要对应sensor等具体从设备,必须创建struct  v4l2_subdev变量, 内部的isp和csi、csi-dphy也都需要注册为subdev

这些entity由media_entity模块负责维护,将他们连接起来。

4. 模块功能

这些entity瑞芯微已经设定了他们各自的功能:

这些entity我们可以理解为一个个功能模块。

这些功能模块有的用于驱动csi、有的驱动isp、有的用于预览图像、有的用于统计视频信息、有的用于配置参数。

这些功能模块,并不是都一定每个camera控制器都有的,有一些是通用的,比如,mainpath、selfpath,有一些要完全看SoC设计,即使瑞芯微的SoC,不同型号,差别也不小。所以具体问题要具体分析,不可教条。

v4l2只定义了基本架构,定义好了回调函数接口,要实现模块具体功能只需要填充好对应的回调函数即可,应用层通过这些字符设备文件和对应的ioctrl命令,就可以实现相应的功能。

二、 如何描述拓扑?

1. struct rkisp_device

rk3568的camera控制器使用结构体struct rkisp_device管理所有的资源。

/*
 * struct rkisp_device - ISP platform device
 * @base_addr: base register address
 * @active_sensor: sensor in-use, set when streaming on
 * @isp_sdev: ISP sub-device
 * @cap_dev: image capture device
 * @stats_vdev: ISP statistics output device
 * @params_vdev: ISP input parameters device
 * @dmarx_dev: image input device
 * @csi_dev: mipi csi device
 * @br_dev: bridge of isp and ispp device
 */
struct rkisp_device {
    struct list_head list;
    void __iomem *base_addr;
    struct device *dev;
    char name[128];
    void *sw_base_addr;
    struct rkisp_hw_dev *hw_dev;     
    struct v4l2_device v4l2_dev;
    struct v4l2_ctrl_handler ctrl_handler;
    struct media_device media_dev;
    struct v4l2_async_notifier notifier;
    struct v4l2_subdev *subdevs[RKISP_SD_MAX];
    struct rkisp_sensor_info *active_sensor;
    struct rkisp_sensor_info sensors[RKISP_MAX_SENSOR];
    int num_sensors;
    struct rkisp_isp_subdev isp_sdev;
    struct rkisp_capture_device cap_dev;
    struct rkisp_isp_stats_vdev stats_vdev;
    struct rkisp_isp_params_vdev params_vdev;
    struct rkisp_dmarx_device dmarx_dev;
    struct rkisp_csi_device csi_dev;
    struct rkisp_bridge_device br_dev;
    struct rkisp_luma_vdev luma_vdev;
    struct proc_dir_entry *procfs;
    struct rkisp_pipeline pipe;
    enum rkisp_isp_ver isp_ver;
    struct rkisp_emd_data emd_data_fifo[RKISP_EMDDATA_FIFO_MAX];
    unsigned int emd_data_idx;
    unsigned int emd_vc;
    unsigned int emd_dt;
    int vs_irq;
    struct gpio_desc *vs_irq_gpio;
    struct rkisp_hdr hdr;
    unsigned int isp_state;
    unsigned int isp_err_cnt;
    unsigned int isp_isr_cnt;
    unsigned int isp_inp;
    struct mutex apilock; /* mutex to serialize the calls of stream */
    struct mutex iqlock; /* mutex to serialize the calls of iq */
    wait_queue_head_t sync_onoff;
    dma_addr_t resmem_addr;
    phys_addr_t resmem_pa;
    size_t resmem_size;
    int dev_id;
    unsigned int skip_frame;
    unsigned int irq_ends;
    unsigned int irq_ends_mask;
    bool send_fbcgain;
    struct rkisp_ispp_buf *cur_fbcgain;
    struct rkisp_buffer *cur_spbuf;
    bool is_thunderboot;

    struct kfifo rdbk_kfifo;
    spinlock_t rdbk_lock;
    int rdbk_cnt;
    int rdbk_cnt_x1;
    int rdbk_cnt_x2;
    int rdbk_cnt_x3;
    u32 rd_mode;
    u8 filt_state[RDBK_F_MAX];
};

其中与isp2.1拓扑结构相关的的几个结构体成员以及他们之间的关系:

成员含义拓扑图中的entity设备名
void __iomem *base_addr基地址--
struct rkisp_sensor_info *active_sensor;正在使用的sensor--
struct rkisp_isp_subdev isp_sdev;isp模块rkisp-isp-subdevv4l-subdev0
struct rkisp_capture_device cap_dev;capture模块, 维护struct vb2_v4l2_buffer对应拓扑图中的rkisp_mainpath、rkisp_selfpath、rkisp_rawwr0、rkisp_rawwr2、rkisp_rawwr3video0~video4
struct rkisp_isp_stats_vdev stats_vdev;数据统计模块rkisp-statisticsvideo7
struct rkisp_isp_params_vdev params_vdev;参数配置模块rkisp-input-paramsvideo8
struct rkisp_dmarx_device dmarx_dev;dma数据接收模块rkisp_rawrd0_m、rkisp_rawrd2_svideo5、video6
struct rkisp_csi_device csi_dev;csi的sub device从设备rkisp-csi-subdevv4l-subdev1
struct rkisp_bridge_device br_dev;桥接模块备,isp2.0中有--
enum rkisp_isp_ver isp_ver;isp版本号,rk3568是2.1--

2. 举例1:rkisp-csi-subdev注册到拓扑结构中

要添加到拓扑结构中,表示该模块的结构体中包含成员struct media_pad ,它和struct v4l2_subdev中的 struct media_entity entity;共同生成拓扑结构。

rkisp-csi-subdev设备结构体定义如下:

struct rkisp_csi_device {
 struct rkisp_device *ispdev;
 struct v4l2_subdev sd;
 struct media_pad pads[CSI_PAD_MAX];
 struct sink_info sink[CSI_PAD_MAX - 1];
 int max_pad;
 u32 err_cnt;
 u32 irq_cnt;
 u8 mipi_di[CSI_PAD_MAX - 1];
 u8 tx_first[HDR_DMA_MAX];
};

参考第二节的拓扑图中 entity6 :

由上图可知,该模块有6个pad,pad属性定义如下

#define MEDIA_PAD_FL_SINK   (1 << 0)
#define MEDIA_PAD_FL_SOURCE   (1 << 1)
#define MEDIA_PAD_FL_MUST_CONNECT  (1 << 2)

pad的名称定义如下:

enum rkisp_csi_pad {
 CSI_SINK = 0,
 CSI_SRC_CH0,
 CSI_SRC_CH1,
 CSI_SRC_CH2,
 CSI_SRC_CH3,
 CSI_SRC_CH4,
 CSI_PAD_MAX
};

isp的in pad

//isp的in pad
enum rkisp_isp_inp {
 INP_INVAL = 0,
 INP_RAWRD0 = BIT(0),
 INP_RAWRD1 = BIT(1),
 INP_RAWRD2 = BIT(2),
 INP_CSI = BIT(4),
 INP_DVP = BIT(5),
 INP_DMARX_ISP = BIT(6),
 INP_LVDS = BIT(7),
 INP_CIF = BIT(8),
};

根据该拓扑图,pads[0]sinkpads[1~5] 均为source

以下是驱动中pad初始化代码:


rkisp_register_csi_subdev()
{
 ……
 v4l2_subdev_init(sd, &rkisp_csi_ops);
 sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;  //是否需要子节点
 sd->entity.ops = &rkisp_csi_media_ops;
 sd->entity.function = MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN;
 snprintf(sd->name, sizeof(sd->name), CSI_DEV_NAME);//名字前缀,#define CSI_DEV_NAME DRIVER_NAME "-csi-subdev"

 csi_dev->pads[CSI_SINK].flags =
  MEDIA_PAD_FL_SINK | MEDIA_PAD_FL_MUST_CONNECT; //pad0属性
 csi_dev->pads[CSI_SRC_CH0].flags =
  MEDIA_PAD_FL_SOURCE | MEDIA_PAD_FL_MUST_CONNECT; //pad1属性

 csi_dev->max_pad = CSI_SRC_CH0 + 1;
 if (dev->isp_ver == ISP_V20 || dev->isp_ver == ISP_V21) {
  csi_dev->max_pad = CSI_PAD_MAX;
  csi_dev->pads[CSI_SRC_CH1].flags = MEDIA_PAD_FL_SOURCE;//pad2属性
  csi_dev->pads[CSI_SRC_CH2].flags = MEDIA_PAD_FL_SOURCE;//pad3属性
  csi_dev->pads[CSI_SRC_CH3].flags = MEDIA_PAD_FL_SOURCE;//pad4属性
  csi_dev->pads[CSI_SRC_CH4].flags = MEDIA_PAD_FL_SOURCE;//pad5属性
 }

 ret = media_entity_pads_init(&sd->entity, csi_dev->max_pad,
         csi_dev->pads);
    ……
}

一些关键的宏汇总:

//各个模块对应的名字
【kernel\drivers\media\platform\rockchip\isp\dev.h】
#define DRIVER_NAME "rkisp"
#define ISP_VDEV_NAME DRIVER_NAME  "_ispdev"
#define SP_VDEV_NAME DRIVER_NAME   "_selfpath"
#define MP_VDEV_NAME DRIVER_NAME   "_mainpath"
#define DMA_VDEV_NAME DRIVER_NAME  "_dmapath"
#define RAW_VDEV_NAME DRIVER_NAME  "_rawpath"
#define DMATX0_VDEV_NAME DRIVER_NAME "_rawwr0"
#define DMATX1_VDEV_NAME DRIVER_NAME "_rawwr1"
#define DMATX2_VDEV_NAME DRIVER_NAME "_rawwr2"
#define DMATX3_VDEV_NAME DRIVER_NAME "_rawwr3"
#define DMARX0_VDEV_NAME DRIVER_NAME "_rawrd0_m"
#define DMARX1_VDEV_NAME DRIVER_NAME "_rawrd1_l"
#define DMARX2_VDEV_NAME DRIVER_NAME "_rawrd2_s"

#define GRP_ID_SENSOR   BIT(0)
#define GRP_ID_MIPIPHY   BIT(1)
#define GRP_ID_ISP    BIT(2)
#define GRP_ID_ISP_MP   BIT(3)
#define GRP_ID_ISP_SP   BIT(4)
#define GRP_ID_ISP_DMARX  BIT(5)
#define GRP_ID_ISP_BRIDGE  BIT(6)
#define GRP_ID_CSI    BIT(7)



//pad的属性
[kernel\include\uapi\linux\media.h]
#define MEDIA_PAD_FL_SINK    (1 << 0)
#define MEDIA_PAD_FL_SOURCE    (1 << 1)
#define MEDIA_PAD_FL_MUST_CONNECT  (1 << 2)

由代码可得,拓扑关系由csi_dev->pads描述。

最终调用函数media_entity_pads_init()注册。

rkisp_register_platform_subdevs()
 isp_subdev_notifier()
  v4l2_async_notifier_parse_fwnode_endpoints()
   __v4l2_async_notifier_parse_fwnode_endpoints()
   {
    for ( fwnode = fwnode_graph_get_next_endpoint())
    {
     dev_fwnode = fwnode_graph_get_port_parent(fwnode);
     is_available = fwnode_device_is_available(dev_fwnode);
     fwnode_handle_put(dev_fwnode);
      fwnode_graph_parse_endpoint(fwnode, &ep);
    }
    for ( fwnode = fwnode_graph_get_next_endpoint())
    {
     dev_fwnode = fwnode_graph_get_port_parent(fwnode);
     is_available = fwnode_device_is_available(dev_fwnode);
     fwnode_handle_put(dev_fwnode);
      fwnode_graph_parse_endpoint(fwnode, &ep);
     v4l2_async_notifier_fwnode_parse_endpoint();
    } 
    fwnode_handle_put(fwnode);   
   }

大家也可以试着去分析其他的模块。

三、设备树如何描述摄像头拓扑结构?

1. 设备树说明文档

瑞芯微MIPI-CSI设备树节点属性说明参考内核说明文档:

[kernel\Documentation\devicetree\bindings\media\]
video-interfaces.txt             关于sensor节点属性的说明,接口类型,
rockchip-isp1.txt                isp模块属性说明
rockchip-mipi-dphy.txt           dphy模块的说明
kernel\Documentation\devicetree\bindings\media\i2c\ovxxxxxx.txt  ov系列的摄像设备树说明

这些文档中有关于port、remote-endpoint等节点的详细说明,如果不是厂家,我们只需要搞懂摄像头拓扑结构即可。

2. ov13850

我们移植的摄像头为ov13850,他的连接关系如下:

  • 数据通道通过mipi接口连接到rk3568的mipi通道0
  • Camera控制器的csi2-dphy0模块负责从mipi通道中接收数据帧

外设摄像头拓扑关系由设备树来描述,内核会自动解析并帮我们自动注册。

千言万语,不如一图:

由上图可得:

  1. 摄像头ov13850设备树只有一个port子节点,所以pad为0,out表示该pad是source pad
  2. remote-endpoint属性表示该pad连接的上游模块的pad名字:mipi_in_ucam0,而模块csi2_dphy0中包含pad:mipi_in_ucam0,所以ov13850连接到该模块
  3. csi2_dphy0 port0节点的mipi_in_ucam0设备,通过remote-endpoint即可知道该pad所连接的是设备ov13850的pad
  4. 综上可得csi2_dphy0的pad0(sink pad)连接的ov13850的pad0(source pad)

文中各种mipi技术文档,后台回复关键字:mipi

后面还会继续更新几篇Camera文章,

建议大家订阅本专题!

也可以后台留言,加一口君好友yikoupeng,

拉你进高质量技术交流群。


end


一口Linux 


关注,回复【1024】海量Linux资料赠送

精彩文章合集


文章推荐

【专辑】ARM
【专辑】粉丝问答
专辑linux入门
专辑计算机网络
专辑Linux驱动
【干货】嵌入式驱动工程师学习路线
【干货】Linux嵌入式所有知识点-思维导图

一口Linux 写点代码,写点人生!
评论 (0)
  • 后摄像头是长这个样子,如下图。5孔(D-,D+,5V,12V,GND),说的是连接线的个数,如下图。4LED,+12V驱动4颗LED灯珠,给摄像头补光用的,如下图。打开后盖,发现里面有透明白胶(防水)和白色硬胶(固定),用合适的工具,清理其中的胶状物。BOT层,AN3860,Panasonic Semiconductor (松下电器)制造的,Cylinder Motor Driver IC for Video Camera,如下图。TOP层,感光芯片和广角聚焦镜头组合,如下图。感光芯片,看着是玻
    liweicheng 2025-05-07 23:55 675浏览
  •         信创产业含义的“信息技术应用创新”一词,最早公开信息见于2019年3月26日,在江苏南京召开的信息技术应用创新研讨会。本次大会主办单位为江苏省工业和信息化厅和中国电子工业标准化技术协会安全可靠工作委员会。        2019年5月16日,美国将华为列入实体清单,在未获得美国商务部许可的情况下,美国企业将无法向华为供应产品。       2019年6
    天涯书生 2025-05-11 10:41 61浏览
  • 硅二极管温度传感器是一种基于硅半导体材料特性的测温装置,其核心原理是利用硅二极管的电学参数(如正向压降或电阻)随温度变化的特性实现温度检测。以下是其工作原理、技术特点及典型应用:一、工作原理1、‌PN结温度特性‌硅二极管由PN结构成,当温度变化时,其正向电压 VF与温度呈线性负相关关系。例如,温度每升高1℃,VF约下降2 mV。2、‌电压—温度关系‌通过jing确测量正向电压的微小变化,可推算出环境温度值。部分型号(如SI410)在宽温域内(如1.4 K至475 K)仍能保持高线性度。
    锦正茂科技 2025-05-09 13:52 396浏览
  • 文/郭楚妤编辑/cc孙聪颖‍相较于一众措辞谨慎、毫无掌舵者个人风格的上市公司财报,利亚德的财报显得尤为另类。利亚德光电集团成立于1995年,是一家以LED显示、液晶显示产品设计、生产、销售及服务为主业的高新技术企业。自2016年年报起,无论业绩优劣,董事长李军每年都会在财报末尾附上一首七言打油诗,抒发其对公司当年业绩的感悟。从“三年翻番顺大势”“智能显示我第一”“披荆斩棘幸从容”等词句中,不难窥见李军的雄心壮志。2012年,利亚德(300296.SZ)在深交所创业板上市。成立以来,该公司在细分领
    华尔街科技眼 2025-05-07 19:25 557浏览
  • 随着智能驾驶时代到来,汽车正转变为移动计算平台。车载AI技术对存储器提出新挑战:既要高性能,又需低功耗和车规级可靠性。贞光科技代理的紫光国芯车规级LPDDR4存储器,以其卓越性能成为国产芯片产业链中的关键一环,为智能汽车提供坚实的"记忆力"支持。作为官方授权代理商,贞光科技通过专业技术团队和完善供应链,让这款国产存储器更好地服务国内汽车厂商。本文将探讨车载AI算力需求现状及贞光科技如何通过紫光国芯LPDDR4产品满足市场需求。 车载AI算力需求激增的背景与挑战智能驾驶推动算力需求爆发式
    贞光科技 2025-05-07 16:54 254浏览
  • 二位半 5线数码管的驱动方法这个2位半的7段数码管只用5个管脚驱动。如果用常规的7段+共阳/阴则需要用10个管脚。如果把每个段看成独立的灯。5个管脚来点亮,任选其中一个作为COM端时,另外4条线可以单独各控制一个灯。所以实际上最多能驱动5*4 = 20个段。但是这里会有一个小问题。如果想点亮B1,可以让第3条线(P3)置高,P4 置低,其它阳极连P3的灯对应阴极P2 P1都应置高,此时会发现C1也会点亮。实际操作时,可以把COM端线P3设置为PP输出,其它线为OD输出。就可以单独控制了。实际的驱
    southcreek 2025-05-07 15:06 755浏览
  • 温度传感器的工作原理依据其类型可分为以下几种主要形式:一、热电阻温度传感器利用金属或半导体材料的电阻值随温度变化的特性实现测温:l ‌金属热电阻‌(如铂电阻 Pt100、Pt1000):高温下电阻值呈线性增长,稳定性高,适用于工业精密测温。l ‌热敏电阻‌(NTC/PTC):NTC 热敏电阻阻值随温度升高而下降,PTC 则相反;灵敏度高但线性范围较窄,常用于电子设备温控。二、热电偶传感器基于‌塞贝克效应‌(Seebeck effect):两种不同
    锦正茂科技 2025-05-09 13:31 381浏览
  • 在印度与巴基斯坦的军事对峙情境下,歼10C的出色表现如同一颗投入平静湖面的巨石,激起层层涟漪,深刻印证了“质量大于数量”这一铁律。军事领域,技术优势就是决定胜负的关键钥匙。歼10C凭借先进的航电系统、强大的武器挂载能力以及卓越的机动性能,在战场上大放异彩。它能够精准捕捉目标,迅速发动攻击,以一敌多却毫不逊色。与之形成鲜明对比的是,单纯依靠数量堆砌的军事力量,在面对先进技术装备时,往往显得力不从心。这一现象绝非局限于军事范畴,在当今社会的各个领域,“质量大于数量”都已成为不可逆转的趋势。在科技行业
    curton 2025-05-11 19:09 132浏览
  • UNISOC Miracle Gaming奇迹手游引擎亮点:• 高帧稳帧:支持《王者荣耀》等主流手游90帧高画质模式,连续丢帧率最高降低85%;• 丝滑操控:游戏冷启动速度提升50%,《和平精英》开镜开枪操作延迟降低80%;• 极速网络:专属游戏网络引擎,使《王者荣耀》平均延迟降低80%;• 智感语音:与腾讯GVoice联合,弱网环境仍能保持清晰通话;• 超高画质:游戏画质增强、超级HDR画质、游戏超分技术,优化游戏视效。全球手游市场规模日益壮大,游戏玩家对极致体验的追求愈发苛刻。紫光展锐全新U
    紫光展锐 2025-05-07 17:07 443浏览
  • Matter协议是一个由Amazon Alexa、Apple HomeKit、Google Home和Samsung SmartThings等全球科技巨头与CSA联盟共同制定的开放性标准,它就像一份“共生契约”,能让原本相互独立的家居生态在应用层上握手共存,同时它并非另起炉灶,而是以IP(互联网协议)为基础框架,将不同通信协议下的家居设备统一到同一套“语义规则”之下。作为应用层上的互通标准,Matter协议正在重新定义智能家居行业的运行逻辑,它不仅能向下屏蔽家居设备制造商的生态和系统,让设备、平
    华普微HOPERF 2025-05-08 11:40 523浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦