8M sensor mt9e013 驱动

MTK平台手机摄像头对焦慢?手把手教你点亮PDAF驱动(以MT6763/MT6757为例) 本文深入解析MTK平台手机摄像头PDAF驱动调优全流程,从原理分析到实战配置,帮助开发者解决对焦慢问题。通过详细讲解PDAF核心原理、驱动配置步骤及性能优化技巧,显著提升对焦速度,适用于MT6763/MT6757等平台。 阅读详情
1.  最上层的数据结构 v4l2_i2c_data,V4L2设备mt9e013的i2c数据表示:
   1. static struct v4l2_i2c_driver_data v4l2_i2c_data = {
   2.     .name = MT9E013_NAME,
   3.     .probe = mt9e013_probe,
   4.     .remove = mt9e013_remove,
   5.     .id_table = mt9e013_id,
   6. };
v4l2_i2c_driver_data 原型定义:
   1. struct v4l2_i2c_driver_data {
   2.     const char * const name;
   3.     int (*command)(struct i2c_client *client, unsigned int cmd, void *arg);
   4.     int (*probe)(struct i2c_client *client, const struct i2c_device_id *id);
   5.     int (*remove)(struct i2c_client *client);
   6.     int (*suspend)(struct i2c_client *client, pm_message_t state);
   7.     int (*resume)(struct i2c_client *client);
   8.     const struct i2c_device_id *id_table;
   9. };
2. mt9e013_probe()
   1. static int mt9e013_probe(struct i2c_client *client,
   2.              const struct i2c_device_id *id)
   3. {
   4.     struct mt9e013_device *dev;                 //mt9e013_device 是最上层的模型,里面包含了很多数据结构,后面介绍
   5.     int ret;
   6.     _dev_info(&client->dev, "mt9e013 probe\n");
   7.

   8.     /* allocate sensor device & init sub device */
   9.     dev = kzalloc(sizeof(*dev), GFP_KERNEL);    //分配dev内存,并置0
  10.     if (!dev) {
  11.         v4l2_err(client, "%s: out of memory\n", __func__);
  12.         return -ENOMEM;
  13.     }
  14.

  15.     dev->fmt_idx = 0;
  16.     v4l2_i2c_subdev_init(&(dev->sd), client, &mt9e013_ops);  //i2c v4l2子设备初始化 添加mt9e013_ops。
  17.

  18.     dev->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;    //this subdev needs a device node.
  19.     dev->pad.flags = MEDIA_PAD_FLAG_OUTPUT;
  20.     dev->sd.entity.ops = &mt9e013_entity_ops;       //entity operation
  21.     dev->format.code = V4L2_MBUS_FMT_SGRBG10_1X10;
  22.

  23.     /* REVISIT: Do we need media controller? */
  24.     ret = media_entity_init(&dev->sd.entity, 1, &dev->pad, 0);  //media entity init
  25.     if (ret) {
  26.         mt9e013_remove(client);
  27.         return ret;
  28.     }
  29.

  30.     return 0;
  31. }
3. mt9e013_device 相关数据结构:

a. struct v4l2_subdev

  1. /* Each instance of a subdev driver should create this struct, either
  2.    stand-alone or embedded in a larger struct.
  3.  */
  4. struct v4l2_subdev {
  5. #if defined(CONFIG_MEDIA_CONTROLLER)
  6.     struct media_entity entity;
  7. #endif
  8.     struct list_head list;
  9.     struct module*owner;
  10.     u32 flags;
  11.     struct v4l2_device *v4l2_dev;
  12.     const struct v4l2_subdev_ops*ops;
  13.     /* The control handler of this subdev. May be NULL. */
  14.     struct v4l2_ctrl_handler *ctrl_handler;
  15.     /* name must be unique */
  16.     char name[V4L2_SUBDEV_NAME_SIZE];
  17.     /* can be used to group similar subdevs, value is driver-specific */
  18.     u32 grp_id;
  19.     /* pointer to private data */
  20.     void *dev_priv;
  21.     void *host_priv;
  22.     /* subdev device node */
  23.     struct video_device devnode;
  24.     unsigned int initialized;
  25.     /* number of events to be allocated on open */
  26.     unsigned int nevents;
  27. };
b. struct media_pad

  1. struct media_pad{
  2.     struct media_entity *entity;    /* Entity this pad belongs to */
  3.     u16 index;            /* Pad index in the entity pads array */
  4.     unsigned long flags;        /* Pad flags (MEDIA_PAD_FLAG_*) */
  5. };
struct media_entity

  1. struct media_entity{
  2.     struct list_head list;
  3.     struct media_device *parent;    /* Media device this entity belongs to*/
  4.     u32 id;                /* Entity ID, unique in the parent media
  5.                      * device context */
  6.     const char*name;        /* Entity name */
  7.     u32 type;            /* Entity type (MEDIA_ENTITY_TYPE_*) */
  8.     u32 revision;            /* Entity revision, driver specific */
  9.     unsigned long flags;        /* Entity flags (MEDIA_ENTITY_FLAG_*) */
  10.     u32 group_id;            /* Entity group ID */

  11.     u16 num_pads;            /* Number of input and output pads */
  12.     u16 num_links;            /* Number of existing links, both
  13.                      * enabled and disabled */
  14.     u16 num_backlinks;        /* Number of backlinks */
  15.     u16 max_links;            /* Maximum number of links */

  16.     struct media_pad *pads;        /* Pads array (num_pads elements) */
  17.     struct media_link *links;    /* Links array (max_links elements)*/

  18.     const struct media_entity_operations *ops;    /* Entity operations */ //这个比较重要

  19.     int stream_count;        /* Stream count for the entity. */
  20.     int use_count;            /* Use count for the entity. */

  21.     struct media_pipeline *pipe;    /* Pipeline this entity belongs to. */

  22.     union {
  23.         /* Node specifications */
  24.         struct {
  25.             u32 major;
  26.             u32 minor;
  27.         } v4l;
  28.         struct {
  29.             u32 major;
  30.             u32 minor;
  31.         } fb;
  32.         struct {
  33.             u32 card;
  34.             u32 device;
  35.             u32 subdevice;
  36.         } alsa;
  37.         int dvb;

  38.         /* Sub-device specifications */
  39.         /* Nothing needed yet */
  40.     };
  41. };
c. struct v4l2_mbus_framfmt

  1. /**
  2.  * struct v4l2_mbus_framefmt - frame format on the media bus
  3.  * @width:    frame width
  4.  * @height:    frame height
  5.  * @code:    data format code (from enum v4l2_mbus_pixelcode)
  6.  * @field:    used interlacing type (from enum v4l2_field)
  7.  * @colorspace:    colorspace of the data (from enum v4l2_colorspace)
  8.  */
  9. struct v4l2_mbus_framefmt {
  10.     __u32            width;
  11.     __u32            height;
  12.     __u32            code;
  13.     __u32            field;
  14.     __u32            colorspace;
  15. };
d. struct camera_sensor_platform_data

  1. struct camera_sensor_platform_data{
  2.     int (*gpio_ctrl)(struct v4l2_subdev*subdev, int flag);
  3.     int (*flisclk_ctrl)(struct v4l2_subdev*subdev, int flag);
  4.     int (*power_ctrl)(struct v4l2_subdev*subdev, int flag);
  5.     int (*csi_cfg)(struct v4l2_subdev*subdev, int flag);
  6. };

4. v4l2_i2c_subdev_init(),这里执行了2个动作,一个是设置V4L2子设备数据,一个是设置I2C client数据

  1. /* I2C Helper functions */


  2. void v4l2_i2c_subdev_init(struct v4l2_subdev*sd, struct i2c_client *client,
  3.         const struct v4l2_subdev_ops *ops)
  4. {
  5.     v4l2_subdev_init(sd, ops);
  6.     sd->flags|= V4L2_SUBDEV_FL_IS_I2C;
  7.     /* the owner is the same as the i2c_client's driver owner */
  8.     sd->owner= client->driver->driver.owner;
  9.     /* i2c_client and v4l2_subdev point to one another */
  10.     v4l2_set_subdevdata(sd, client);     //设置V4L2 子设备数据
  11.     i2c_set_clientdata(client, sd);      //设置I2C client 数据
  12.     /* initialize name */
  13.     snprintf(sd->name,sizeof(sd->name),"%s %d-%04x",
  14.         client->driver->driver.name, i2c_adapter_id(client->adapter),
  15.         client->addr);
  16. }
  17. EXPORT_SYMBOL_GPL(v4l2_i2c_subdev_init);
5. mt9e013_ops

  1. static const struct v4l2_subdev_ops mt9e013_ops= {   //v4l2_subdev operation, 表示vl42 子设备所具有的能力。
  2.     .core =&mt9e013_core_ops,
  3.     .video =&mt9e013_video_ops,
  4.     .pad =&mt9e013_pad_ops,
  5. };
a. mt9e013_core_ops :V4L2 IOCTL 传下来的具体执行函数

  1. static const struct v4l2_subdev_core_ops mt9e013_core_ops= {
  2.     .g_chip_ident = mt9e013_g_chip_ident,  //获得Id
  3.     .s_config = mt9e013_s_config,          //配置
  4.     .queryctrl = mt9e013_queryctrl,        //query control能力
  5.     .g_ctrl = mt9e013_g_ctrl,             //get control
  6.     .s_ctrl = mt9e013_s_ctrl,             //set control
  7.     .s_power = mt9e013_s_power,           //set power
  8.     .ioctl = mt9e013_ioctl,               //ioctl
  9.     .init = mt9e013_init,
  10. };
b. mt9e013_video_ops : v4l2 接口传下来的视频相关的操作

  1. static const struct v4l2_subdev_video_ops mt9e013_video_ops= {
  2.     .s_stream = mt9e013_s_stream,                      //set stream
  3.     .enum_framesizes = mt9e013_enum_framesizes,         //enum framesizes
  4.     .enum_frameintervals = mt9e013_enum_frameintervals,   
  5.     .enum_mbus_fmt = mt9e013_enum_mbus_fmt,
  6.     .try_mbus_fmt = mt9e013_try_mbus_fmt,        // try format
  7.     .g_mbus_fmt = mt9e013_g_mbus_fmt,            // get format
  8.     .s_mbus_fmt = mt9e013_s_mbus_fmt,            //set format
  9. };
c. mt9e013_pad_ops :  media 帧设置方面的操作

  1. /* REVISIT: Do we need pad operations? */
  2. static conststruct v4l2_subdev_pad_ops mt9e013_pad_ops = {
  3.     .enum_mbus_code = mt9e013_enum_mbus_code,
  4.     .enum_frame_size = mt9e013_enum_frame_size,      // frame size
  5.     .get_fmt = mt9e013_get_pad_format,               // get format
  6.     .set_fmt = mt9e013_set_pad_format,               // set format
  7. };

6. mt9e013_entity_ops

  1. static const struct media_entity_operations mt9e013_entity_ops= {
  2.     .set_power = v4l2_subdev_set_power,   //设置v4l2子设备电源
  3. };
media_entity_operations 原型定义:

  1. struct media_entity_operations{
  2.     int (*link_setup)(struct media_entity*entity,
  3.              const struct media_pad *local,
  4.              const struct media_pad *remote, u32 flags);
  5.     int (*set_power)(struct media_entity*entity, int power);
  6. };
7.  media_entity_init

  1. /**
  2.  * media_entity_init - Initialize a media entity
  3.  *
  4.  * @num_pads: Total number of input and output pads.
  5.  * @extra_links: Initial estimate of the number of extra links.
  6.  * @pads: Array of 'num_pads' pads.
  7.  *
  8.  * The total number of pads is an intrinsic property of entities known by the
  9.  * entity driver, while the total number of links depends on hardware design
  10.  * and is an extrinsic property unknown to the entity driver. However, in most
  11.  * use cases the entity driver can guess the number of links which can safely
  12.  * be assumed to be equal to or larger than the number of pads.
  13.  *
  14.  * For those reasons the links array can be preallocated based on the entity
  15.  * driver guess and will be reallocated later if extra links need to be
  16.  * created.
  17.  *
  18.  * This function allocates a links array with enough space to hold at least
  19.  * 'num_pads' + 'extra_links' elements. The media_entity::max_links field will
  20.  * be set to the number of allocated elements.
  21.  *
  22.  * The pads array is managed by the entity driver and passed to
  23.  * media_entity_init() where its pointer will be stored in the entity structure.
  24.  */
  25. int
  26. media_entity_init(struct media_entity*entity, u16 num_pads,
  27.          struct media_pad *pads, u16 extra_links)
  28. {
  29.     struct media_link *links;
  30.     unsigned int max_links = num_pads + extra_links;
  31.     unsigned int i;

  32.     links = kzalloc(max_links* sizeof(links[0]), GFP_KERNEL);
  33.     if (links== NULL)
  34.         return -ENOMEM;

  35.     entity->group_id= 0;
  36.     entity->max_links= max_links;
  37.     entity->num_links= 0;
  38.     entity->num_backlinks= 0;
  39.     entity->num_pads= num_pads;
  40.     entity->pads= pads;
  41.     entity->links= links;

  42.     for (i= 0; i < num_pads; i++){
  43.         pads[i].entity= entity;
  44.         pads[i].index= i;
  45.     }

  46.     return 0;
  47. }
  48. EXPORT_SYMBOL_GPL(media_entity_init);
struct media_link

  1. struct media_link{
  2.     struct media_pad *source;    /* Source pad */
  3.     struct media_pad *sink;        /* Sink pad */
  4.     struct media_link *reverse;    /* Link in the reverse direction */
  5.     unsigned long flags;        /* Link flags (MEDIA_LINK_FLAG_*) */
  6. };
8. mt9e013_remove

  1. static int mt9e013_remove(struct i2c_client*client)
  2. {
  3.     struct v4l2_subdev *sd = i2c_get_clientdata(client);  //先根据i2c client, 来获得v4l2 子设备。
  4.     struct mt9e013_device *dev = to_mt9e013_sensor(sd);   //通过container_of(v4l2_subdev),来获得包含它的 最上层mt9e013设备。

  5.     dev->platform_data->csi_cfg(sd, 0);
  6.     v4l2_device_unregister_subdev(sd); //注销v4l2子设备。
  7.     kfree(dev);

  8.     return 0;
  9. }












struct mt9e013_device

   1. /* mt9e013 device structure */
   2. struct mt9e013_device {
   3.     struct v4l2_subdev sd;         //表示V4L2 子设备属性
   4.     struct media_pad pad;
   5.     struct v4l2_mbus_framefmt format;
   6.

   7.     struct camera_sensor_platform_data *platform_data;
   8.     int fmt_idx;
   9.     int    status;
  10.     u8 res;
  11.     u8 type;
  12.     u16    sensor_id;
  13.     u8    sensor_revision;
  14.

  15.     unsigned int intg_factor;
  16. };


MTK Camera开发实战:从驱动移植到性能调优的避坑指南 在Android系统开发中,Camera硬件抽象层(HAL)是连接底层硬件与上层应用框架的核心组件,其稳定性和性能直接影响成像质量与用户体验。其工作原理在于通过标准化的接口封装图像传感器(Sensor)、图像信号处理器(ISP)等硬件的操作,并管理数据流水线(Pipeline)与缓冲区(Surface)。这一技术的核心价值在于为多样化的摄像头硬件提供统一的软件接口,支撑起拍照、录像、视频通话等广泛的应用场景。在MTK(联发科)平台上进行Camera开发时,开发者常需直面sensor驱动移植、camera p 阅读详情

相关推荐

4. camera调试日志

注: 1. 37m androidM/N/O 驱动及hal代码一样,可以公用 2. 37m 与37t 驱动代码一样,hal层代码格式不一样 3. 37m 与39 驱动代码一样,只有头文件#include "kd_camera_hw.h" --&gt; #include "kd_camera_typedef.h" hal 层代码camera_isp_pca_gc8024mipi_raw....

zhigouliu的博客 9452

MT8766 Android13 Camera GC02M1驱动获取sensor_id流程

mtk平台camera驱动获取sensor_id流程

weixin_68421752的博客 1258

MTK Android PMIC电源配置实战:从设备树到Regulator驱动的完整流程解析

本文深入解析MTK Android平台上PMIC电源配置的完整流程,从设备树编写到Regulator驱动实现。详细介绍了电源管理基础架构、设备树关键属性配置、驱动分层架构及调试技巧,帮助开发者解决摄像头电源时序冲突等实际问题,提升电源管理效率。

weixin_30399821的博客 243

mtk平台sensor分析一:alsps框架下的光距感驱动流程

mtk平台alsps架构下的光距感驱动流程 一、前言 以MT8183平台alsps架构下的光距感ltr559为例进行分析; 涉及文件及目录: 设备树: kernel-4.4/arch/arm64/boot/dts/mediatek/mt6771.dts kernel-4.4/arch/arm64/boot/dts/mediatek/k71v1_64_bsp.dts alsps架构:kernel-4.4/drivers/misc/mediatek/sensors-1.0

weixin_45748615的博客 7757

MT8766的Camera驱动

MT8766的前后Camera驱动

llw21680的专栏 158

深圳市赛尼思智能科技有限公司Android驱动开发工程师

深圳市赛尼思智能科技有限公司招聘Android驱动开发工程师,主要负责Android平台外设驱动开发、系统调试及问题定位。岗位要求3年以上嵌入式开发经验,熟悉C/C++/Java及调试工具,有高通平台或智能设备开发经验者优先。面试涵盖四大方向:1)驱动开发(LCD/TP/SENSOR等外设);2)系统调试与Bringup;3)平台开发经验与工具使用;4)沟通协作与文档能力。典型问题包括LCD驱动移植、多点触控实现、内核内存泄漏调试等,重点考察候选人的实际问题解决能力和团队协作经验。

郑伟强dev的专栏 138

Mtk Camera Sensor Bring Up(笔记)

这里记录添加一个新的sensor需要注意的文件,以mt6779为例。 (1)ProjectConfig.mk文件配置 //device/mediatek/mt6779/ProjectConfig.mk //sensor CUSTOM_HAL_IMGSENSOR = gc8034_mipi_raw hi846_mipi_raw gc5035_mipi_raw sc500cs_mipi_raw CUSTOM_HAL_MAIN_IMGSENSOR =gc8034_mipi_raw hi846_mipi_raw

Flying snow 3992

APM 飞行模式切换--源码详解

APM飞控中有很多种方式可以改变飞行模式。其中最常见的为遥控器切换和地面站切换两种方式。 下面以遥控器切换为例详解飞行模式切换逻辑。 APM遥控器切换飞行模式的源代码在RC_Channel.cpp文件中的RC_Channel_Copter::do_aux_function_change_mode()函数中。 const bool success = copter.set_mode()调用Copter::set_mode()函数,在set_mode()函数中调用mode_fro...

qq_30623591的博客 2440

mt6897 scp a+g sh5201 porting记录

本文摘要介绍了在MTK平台(MT6897芯片)上添加SCP侧传感器的完整流程。主要包括:1)硬件连接确认(供电、I2C/SPI组号、中断GPIO);2)驱动代码添加位置(vendor/mediatek/tinysys/scp/middleware/sensorhub/drivers);3)DTS配置(传感器名称、总线ID、中断号等);4)编译配置修改(project.mk和sensorhub.mk);5)HAL层声明(SensorListV2.cpp中添加传感器参数);6)系统宏开关设置(ProjectCo

aa25012的博客 1383

HFSS螺旋线圈的优化设计与高效仿真实践

本文详细介绍了HFSS螺旋线圈的优化设计与高效仿真实践,涵盖核心参数设置、参数化建模、仿真加速技巧及结果分析。通过HFSS软件实现螺旋线圈的高效仿真,特别适用于无线充电和RFID系统设计,提升设计效率与性能验证准确性。

weixin_30235225的博客 444

【GameFramework框架内置模块】1、全局配置(Config)

这是GameFramework框架内置模块的第一篇,全局配置Config,讲解这些模块的时候会尽量的涉及介绍、为什么使用、如何使用、代码分析这几块,让大家可以知其然,也知其所以然。全局配置表,存储了一些游戏中使用的全局的参数配置,比如玩家的初始速度、游戏初始音量等。全局配置表的结构跟DataTable结构类似,也是列行+键值对,只是没有ID这一列,因为全局配置也不需要用ID去查询, 是直接使用key值进行查询。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 5884

MTK MT6735平台调试Camera驱动记录

Camera驱动相关文件: 1、ProjectConfig.mk   配置相关信息,定义主副摄像头。和其他信息 2、kd_imgsensor.h     定义Sensor_id 的信息文件, kernel和vendor下都需要有一份 3、kd_camera_hw.c  kd_camera_hw.h  控制Camera上下电,宏在kd_camera_hw.h中定义 4、kd_sensor

云斜月的专栏 6313

【深度学习新浪潮】Token经济学深度解析:从AI“新智元”梗到产业核心,研究成果+标杆产品全拆解

在正式深入研究和产品分析前,必须先破除概念误区:行业内常说的Token经济学,并非单一概念,而是分为AI词元Token经济学和Web3通证Token经济学两大核心分支,二者底层逻辑、应用场景天差地别,也是大众最容易混淆的点。Token是AI时代的新大宗商品:黄仁勋将Token类比为工业时代的电力、石油,是AI时代的核心生产资料与基础计价单位,不再是单纯的技术单元,而是具备标准化、可计量、可交易、可分层的数字商品,其价值由算力消耗、推理效率、实际应用价值共同决定,而非虚拟炒作。Token五层定价模型。

专注:太空算力、AI infra、异构调度、大模型成本工程 685

MT6580 Android N camera 框架分析

MT6580 Android N camera 框架分析 整个框架分为三个部分:hal部分逻辑调用,kernel层的通用驱动sensorlist.c 和具体IC的 驱动xxxx_mipi_raw.c 。 kernel起来后不会直接去访问硬件sensor,而是会注册相关的驱动,之后Android系 统起来后会启动相关的服务如: camera_service ,在camera服务中会直接去访问hal,...

weixin_39280491的博客 713

准备生日礼物

摘要: 题目要求统计某月份需要准备的员工生日礼物数量。输入包括目标月份、员工姓名列表和对应的生日列表(格式为Year/Month/Day)。需处理重复员工(以最后一次录入为准),统计该月生日的员工人数。示例1中5月有3名员工生日,输出3;示例2中10月有6名,输出6。解题关键在于使用哈希表去重(以员工姓名为键),拆分生日字符串提取月份进行匹配。代码实现(C++/Java/Python)均遵循以下步骤:读取输入、哈希去重、解析月份并统计目标月份人数。时间复杂度为O(n),空间复杂度O(n)。

面试高手的博客 297

GitHub 国内加速完全指南(最新):镜像、代理与优化技巧

在国内使用 GitHub 时,经常遇到 clone 慢、打开仓库卡、GitHub Actions 不稳定 等问题。下面是整理好的 GitHub 国内镜像和加速方法大全,高效使用 GitHub。

moton2017的博客 1万+

Porting MT6620 driver to EDesk board

NOTE: Build based on Yusurf's release: v1305+patches+MT6620 ******************************************************************************* PART 1. compile original code: /root/EDeskYusurf/      

TechMax的专栏 2206

【测绘程序设计】——潮汐调和分析

最小二乘潮汐调和分析源码、使用示例及数据

C_xxy's blog 2652

[Camera Drv]系统是如何为Sensor匹配Lens Driver

系统中是如何为某一个Sensor匹配Lens Driver的,匹配的规则是怎样的 ProjectConfig.mk 中的lens配置项并不能指定某个sensor使用哪个Lens driver,Lens driver的匹配过程是在打开相机的过程中执行的,通过Sensor ID按一定规则搜索Lens driver 数组lenslist[]来获取Lens driver。   Lens dr

小挺的博客 1493

Qt视频播放器项目(打开文件,视频的播放与停止,进度条与视频进度绑定,调整音量,设置按钮图标,将槽函数与按钮绑定等功能)完整代码地址在末尾

【代码】Qt视频播放器项目。

分享计算机视觉,C++,网络摄像头研发,音视频开发,嵌入式等知识。 755

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MTK Android P Sensor架构(二)

kernel层框架的要点大概就这么多,不同的sensor,基本的驱动流程都类似,读完我这系列文章后应该就能一通百通了。

sdkdlwk的博客 4万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

嵌入式驱动开发之sensor---sensor 图形传感器调试

图像传感器(image sensor)复位顺序1. 硬件复位寄存器;2. 软件复位寄存器;3. 设置时钟寄存器;4. 设置PLL倍频;5. 设置分辨率;6. 设置窗口控制;7. 设置输出顺序;8. 细调颜色,增益,白平衡;小常识:1. 锁相环(Phase Lock Loop)   特点:利用外部输入的参考信号控制环路内部震荡信号的频率和相位。   作用:实现外部输入和内部震荡同步。2. 要避免频闪...

weixin_34203832的博客 214

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

i.MX8M Plus Qseven模组:集成NPU的标准化嵌入式AI方案

在嵌入式产品的开发中,核心板与载板的设计分工直接影响项目周期与成本。Qseven作为一种70mm×70mm的标准化计算机模组规范,以5V单电源供电和完整的引脚定义,将CPU、内存与电源管理高度集成,显著降低了载板设计难度。当这一标准遇上NXP i.MX8M Plus处理器,其内置的2.3 TOPS NPU、双千兆网口和丰富的工业接口便成为了可直接调用的标准化能力。开发者无需从零开始设计DDR与PMIC,只需专注载板外设与系统软件,即可在机器视觉、边缘网关、机器人控制等场景中快速部署AI推理。结合Yocto

weixin_33841503的博客 403
上一篇: 笔记本安装ubuntu10.10_64bit问题--grub rescue>
下一篇: VGA 输出调试
lamdoc
博客等级 码龄18年 155粉丝 655原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值