| 注册| 产品展厅| 收藏该商铺

行业产品

当前位置:
杭州晨曙机电设备有限公司>>西门子PLC模块>>西门子S7-200smartPLC模块>> CPUCR20s6ES7288-1CR20-0AA1经济型CPU模块

6ES7288-1CR20-0AA1经济型CPU模块

返回列表页
  • 6ES7288-1CR20-0AA1经济型CPU模块
  • 6ES7288-1CR20-0AA1经济型CPU模块
  • 6ES7288-1CR20-0AA1经济型CPU模块
  • 6ES7288-1CR20-0AA1经济型CPU模块
  • 6ES7288-1CR20-0AA1经济型CPU模块
收藏
举报
参考价 86
订货量 1
具体成交价以合同协议为准
  • 型号 CPUCR20s
  • 品牌 Siemens/西门子
  • 厂商性质 经销商
  • 所在地 上海市
在线询价 收藏产品

更新时间:2018-10-17 11:05:58浏览次数:573

联系我们时请说明是化工仪器网上看到的信息,谢谢!

同类优质产品

更多产品

产品简介

西门子6ES7288-1CR20-0AA1经济型CPU模块
SIMATIC S7-200 SMART CPU CR20s, 紧凑型 CPU,AC/DC/继电器, 机载 I/O: 12 个数字输入端 24V DC;8 个数字输出端,继电器 2A; 电源:AC, 47 - 63Hz 时,85 - 264V AC, 程序存储器/数据存储器 20 KB

详细介绍

西门子6ES7288-1CR20-0AA1经济型CPU模块
SIMATIC S7-200 SMART CPU CR20s, 紧凑型 CPU,AC/DC/继电器, 机载 I/O: 12 个数字输入端 24V DC;8 个数字输出端,继电器 2A; 电源:AC, 47 - 63Hz 时,85 - 264V AC, 程序存储器/数据存储器 20 KB

请相信上海励辉自动化科技有限公司是您忠诚的长久的合作伙伴,我们愿与广大客户携手向前,共同进步!
公司所备各类产品齐全,货量充足,能够满足客户对现货的需求,保证工程进度。
关于产品质量:本店产品均为西门子原装正品!如需详细产品资料、参数等信息可随时联系店主.产品质保期一年,
特殊停产备件质保六个月.本店一再强调正品,主要让亲们购买的时候心里更有底,大品牌原装的产品,在使用期限、使用效果、
以及售后服务更有保障。购买西门子原装正品,质保一年,西门子质保,您在使用产品之时没有后顾之忧。
关于快递:默认德邦快递 由于每个地方各快递到达速度不一样,如需快到达请您联系店主备注发货方式,如发顺丰快递加运费或者到付.
关于本店宗旨:诚信经营、客户至上.诚心为每一位用户提供西门子原装品质的产品 为每一用户提供便捷的西门子产品服务
本店承诺:凡在本店购买的西门子产品,若存在产品质量问题或与描述不符,本店支持7天无条件退货服务.产品为西门子*未开封。
本公司销售的产品一律为*正品 ;可以签约正式的销售合同,并可以开具16%的增值税发票、普通发票。如需发票,税点另算。拍前注意 均以报价为准。
产品质保期为一年!产品外包装详见产品图片,白色标签上均有西门子品牌LOGO及产品订货号,各位买家在收到货后,请核对型号无误,再拆包装(包装拆开后将无法二次销售,不支持退换货)
服务理念:
产品规格:原装正品,假一罚十。
产品质量:*,质保一年。
产品价格:薄利多销,量多从优。
产品货期:大量现货,付款发货。

西门子6ES7288-1CR20-0AA1经济型CPU模块
SIMATIC S7-200 SMART CPU CR20s, 紧凑型 CPU,AC/DC/继电器, 机载 I/O: 12 个数字输入端 24V DC;8 个数字输出端,继电器 2A; 电源:AC, 47 - 63Hz 时,85 - 264V AC, 程序存储器/数据存储器 20 KB

上海励辉自动化科技有限公司、是专业从事工业自动化控制系统、机电一体化装备系统集成和硬件维护的综合性企业。
本着“以人为本、科技先导、顾客满意、持续改进”的工作方针,致力于工业自动化控制领域的产品开发、工程配套和系统集成,拥有丰富的自动化产品的应用和实践经验以及雄厚的技术力量,为广大用户提供了SIEMENS的技术及自动控制的解决方案,
上海励辉公司在经营活动中精益求精,具备如下业务优势:
 
SIEMENS 可编程控制器
 
1、 SIMATIC S7 系列PLC、S7200、s71200、S7300、S7400、ET200
2、 逻辑控制模块 LOGO!230RC、230RCO、230RCL、24RC、24RCL等
3、 SITOP 系列直流电源 24V DC 1.3A、2.5A、3A、5A、10A、20A、40A
4、HMI 触摸屏TD200 TD400C TP177,MP277 MP377
SIEMENS 交、直流传动装置,数控伺服

 

S7-200 SMART,超越SMART

S7-200 SMART是西门子针对中国的OEM市场研发的新一代PLC。作为S7-200CN的升级产品,一方面继承了S7-200CN丰富的功能,另一方面融入了新的亮点,将全面覆盖并超越S7-200CN。从产品上市至今,S7-200 SMART在包装、纺织、机床、食品、橡塑等众多行业得到广泛应用,在提升设备性能和降低设备成本上发挥着重要作用。

SIMATIC S7-200 SMART 产品亮点

·        机型丰富,更多选择

提供不同类型、I/O点数丰富的CPU模块,单体I/O点数最高可达60点,可满足大部分小型自动化设备的控制需求。另外,CPU模块配备标准型和经济型供用户选择,对于不同的应用需求,产品配置更加灵活,最大限度的控制成本。

·        选件扩展,精确定制

新颖的信号板设计可扩展通信端口、数字量通道、模拟量通道。在不额外占用电控柜空间的前提下,信号板扩展能更加贴合用户的实际配置,提升产品的利用率,同时降低用户的扩展成本。

·        高速芯片,性能

配备西门子高速处理器芯片,基本指令执行时间可达0.15 μ s,在同级别小型PLC中*。一颗强有力的“芯”,能让您在应对繁琐的程序逻辑,复杂的工艺要求时表现的从容不迫。

·        以太互联,经济便捷

CPU模块本体标配以太网接口,集成了强大的以太网通信功能。一根普通的网线即可将程序下载到PLC中,方便快捷,省去了编辑电缆。通过以太网接口还可与其它CPU模块、触摸屏、计算机进行通信,轻松组网。

·        三轴脉冲,运动自如

CPU模块本体最多集成3路高速脉冲输出,频率高达100kHz,支持PWM/PTO输出方式以及多种运动模式,可自由设置运动包络。配以方便易用的向导设置功能,快速实现设备调整、定位等功能。

·        通用SD卡,快速更新

本机集成Micro SD卡插槽,使用市面上通用的Micro SD卡即可实现程序的更新和PLC固件升级,极大地方便了客户工程师对最终用户的服务支持,也省去了因PLC固件升级返厂服务的不便。

·        软件友好,编程高效

在继承西门子编程软件强大功能的基础上,融入了更多的人性化设计,如新颖的带状式菜单、全移动式界面窗口、方便的程序注释功能、强大的密码保护等。在体验强大功能的同时,大幅提高开发效率,缩短产品上市时间。

·        *整合,无缝集成

SIMATICS7-200 SMART 可编程控制器,SIMATIC SMARTLINE触摸屏,SINAMICS V20变频器和SINAMICSV90伺服驱动系统*整合,为OEM客户带来高性价比的小型自动化解决方案,满足客户对于人机交互、控制、驱动等功能的*需求。

中央处理单元 CPU 订货号

·        CPU SR20 标准型 CPU 模块,继电器输出,220 V AC 供电,12 输入/8 输出6ES7 288-1SR20-0AA0

·        CPU ST20 标准型CPU模块,晶体管输出,24VDC供电,12输入/8输出6ES7 288-1ST20-0AA0

·        CPU SR30 标准型CPU模块,继电器输出,220VAC供电,18输入/12输出6ES7 288-1SR30-0AA0

·        CPU ST30 标准型CPU模块,晶体管输出,24VDC供电,18输入/12输出6ES7 288-1ST30-0AA0

·        CPU SR40 标准型 CPU 模块,继电器输出,220 V AC 供电,24 输入/16 输出6ES7 288-1SR40-0AA0

·        CPU ST40 标准型 CPU 模块,晶体管输出,24 V DC 供电,24 输入/16 输出6ES7 288-1ST40-0AA0

·        CPU SR60 标准型 CPU 模块,继电器输出,220 V AC 供电,36 输入/24 输出6ES7 288-1SR60-0AA0

·        CPU ST60 标准型 CPU 模块,晶体管输出,24 V DC 供电,36 输入/24 输出6ES7 288-1ST60-0AA0

·        CPU CR40 经济型 CPU 模块,继电器输出,220 V AC 供电,24 输入/16 输出6ES7 288-1CR40-0AA0

·        CPU CR60 经济型CPU模块,继电器输出,220VAC供电,36输入/24输出6ES7 288-1CR60-0AA0

·        扩展模块 EM 订货号

·        EM DE08 数字量输入模块,8 x 24 V DC 输入6ES7 288-2DE08-0AA0

·        EM DE16 数字量输入模块, 16×24 V DC 输入6ES7 288-2DE16-0AA0

·        EM DR08 数字量输出模块,8 x 继电器输出6ES7 288-2DR08-0AA0

·        EM DT08 数字量输出模块,8 x 24 V DC 输出6ES7 288-2DT08-0AA0

·        EM QT16 数字量输出模块,16×24 V DC 输出6ES7 288-2QT16-0AA0

·        EM QR16 数字量输出模块, 16×继电器输出6ES7 288-2QR16-0AA0

·        EM DR16 数字量输入/输出模块,8 x 24 V DC 输入/8 x 继电器输出6ES7 288-2DR16-0AA0

·        EM DR32 数字量输入/输出模块,16×24 V DC 输入/16 x 继电器输出6ES7 288-2DR32-0AA0

·        EM DT16 数字量输入/输出模块,8 x 24 V DC 输入/8 x 24 V DC 输出6ES7 288-2DT16-0AA0

·        EM DT32 数字量输入/输出模块,16 x 24 V DC 输入/16 x 24 V DC 输出6ES7 288-2DT32-0AA0

·        EM AE04 模拟量输入模块,输入6ES7 288-3AE04-0AA0

·        EM AE08 模拟量输入模块,8输入6ES7 288-3AE08-0AA0

·        EM AQ02 模拟量输出模块,输出6ES7 288-3AQ02-0AA0

·        EM AQ04 模拟量输出模块,4输出6ES7 288-3AQ04-0AA0

·        EM AM03 模拟量输入/输出模块,2输入/1输出6ES7 288-3AM03-0AA0

·        EM AM06 模拟量输入/输出模块,输入/2 输出6ES7 288-3AM06-0AA0

·        EM AR02 热电阻输入模块,通道6ES7 288-3AR02-0AA0

·        EM AR04 热电阻输入模块,4输入6ES7 288-3AR04-0AA0

·        EM AT04 热电偶输入模块,4通道6ES7 288-3AT04-0AA0

·        EM DP01 PROFIBUS-DP从站模块6ES7 288-7DP01-0AA0

·        信号板 SB 订货号

·        SB CM01 通信信号板,RS485/RS232 6ES7 288-5CM01-0AA0

·        SB DT04 数字量扩展信号板,2 x 24 V DC 输入/2 x 24 V DC 输出 6ES7 288-5DT04-0AA0

·        SB AE01 模拟量扩展信号板,1×12位模拟量输入6ES7 288-5AE01-0AA0

·        SB AQ01 模拟量扩展信号板,1 x 12 位模拟量输出6ES7 288-5AQ01-0AA0

·        SB BA01 电池信号板,支持 CR1025 纽扣电池(电池单独购买) 6ES7 288-5BA01-0AA0

·        附件订货号

·        I/O扩展电缆 S7-200 SMART I/O 扩展电缆,长度16ES7 288-6EC01-0AA0

·        PM207 S7-200 SMART 配套电源,24 V DC/3 A 6ES7 288-0CD10-0AA0

·        PM207 S7-200 SMART 配套电源,24 V DC/5 A 6ES7 288-0ED10-0AA0

·        CSM1277 以太网交换机,端口6GK7 277-1AA00-0AA0

·        SCALANCE XB005 以太网交换机,5端口6GK5 005-0BA00-1AB2

·        SIMATIC HMI 订货数据

·        SMART 700 IE V3 新一代SMART LINE触摸屏,7寸,64K色,集成以太网口,USB2.0 host接口,RTC,归档记录功能6AV6 648-0CC11-3AX0

·        SMART 1000 IE V3 新一代SMART LINE触摸屏,10.2寸,64K色,集成以太网口,USB2.0 host接口,RTC,归档记录功能6AV6 648-0CE11-3AX0

·        TD400C 蓝色背光LCD4行文本显示器,可自定义前面板6AV6 640-0AA00-0AX0

一.需要的基础知识:

  1. LINUX 设备驱动的基本结构。

  2. 块设备驱动程序的基本构架(相信研究过 LDD3 当中的 sbull 的人应该都不成问题,如果只是走马观花的话,那可得好好再补补了)

  3. LINUX 设备驱动模型。

  二.驱动程序分析

  首先,来明确一下我们需要分析的文件。下面的文件均来自 linux-2.6.24 源码,我们重点是分析驱动程序的基本构架,所以不同内核版本的差异并不是很大。 MMC/SD 卡驱动程序位于 drivers/mmc 目录下,我们只列出我们分析过程涉及到的几个文件:

  Card/

  block.c

  queue.c/queue.h

  core/

  bus.c/bus.h

  core.c/core.h

  host.c/host.h

  mmc.c

  mmc_ops.c/mmc_ops.h 拿 MMC 卡来分析, SD 卡驱动程序流程类似。

  host/

  s3cmci.c/s3cmci.h 以 S3C24XX 的 MMC/SD 卡控制器为例,其它类型的控制器类似。

  LINUX 当中对目录的划分是很有讲究的,这些文件被分布在 3 个目录下,正好对应 MMC/SD 驱动程序的 3 个层次(关于层的划分这里浏览一下,有个概念即可,当我们分析完了后再回头来看,你会觉得很形象):

  (1) 区块层

  主要是按照 LINUX 块设备驱动程序的框架实现一个卡的块设备驱动,这 block.c 当中我们可以看到写一个块设备驱动程序时需要的 block_device_operations 结构体变量的定义,其中有 open/release/request 函数的实现,而queue.c 则是对内核提供的请求队列的封装,我们暂时不用深入理解它,只需要知道一个块设备需要一个请求队列就可以了。

  (2) 核心层

  核心层封装了 MMC/SD 卡的命令,例如存储卡的识别,设置,读写。例如不管什么卡都应该有一些识别,设置,和读写的命令,这些流程都是必须要有的,只是具体对于不同的卡会有一些各自*的操作。 Core.c 文件是由sd.c 、 mmc.c 两个文件支撑的, core.c 把 MMC 卡、 SD 卡的共性抽象出来,它们的差别由 sd.c 和 sd_ops.c、 mmc.c 和 mmc_ops.c 来完成。

  (3) 主机控制器层

  主机控制器则是依赖于不同的平台的,例如 s3c2410 的卡控制器和 atmel 的卡控制器必定是不一样的,所以要针对不同的控制器来实现。以 s3cmci.c 为例,它首先要进行一些设置,例如中断函数注册,全能控制器等等。然后它会向 core 层注册一个主机( host ),用结构 mmc_host_ops 描述,这样核心层就可以拿着这个 host 来操作s3c24xx 的卡控制器了,而具体是 s3c24xx 的卡控制器还是 atmel 的卡控制器, core 层是不用知道的。

  驱动程序层次图

  好了,对这几个目录有一个大概认识以后,我们来看几个重要的数据结构:

  struct mmc_host 用来描述卡控制器

  struct mmc_card 用来描述卡

  struct mmc_driver 用来描述 mmc 卡驱动

  struct mmc_host_ops 用来描述卡控制器操作集,用于从主机控制器层向 core 层注册操作函数,从而将core 层与具体的主机控制器隔离。也就是说 core 要操作主机控制器,就用这个 ops 当中给的函数指针操作,不能直接调用具体主控制器的函数。

  *阶段:

  从 s3cmci_init 开始往下看

  static int __init s3cmci_init(void)

  {

  platform_driver_register(&s3cmci_driver_2410);

  }

  有 platform_driver_register 函数,根据设备模型的知识,我们知道那一定会有对应的 platform_device_register函数的,可是在哪里呢?没有看到,那是不是这个 s3cmci_driver_2410 当中给的 probe 函数就不执行了???当然不是, mci 接口一般都是硬件做好的(我认为是这样),所以在系统启动时一定会有调用 platform_device?_register 对板上的资源进行注册,如果没有这个硬件资源,那我们这个驱动也就没有用了。好,我们就假定是有mci 接口的,而且也有与 s3cmci_driver_2410 对应的硬件资源注册了,那自己就会去跑 probe 函数。来看一下s3cmci_driver_2410:

  static struct platform_driver s3cmci_driver_2410={

  .driver.name ="s3c2410-sdi",

  .probe =s3cmci_probe_2410,

  .remove =s3cmci_remove,

  .suspend =s3cmci_suspend,

  .resume =s3cmci_resume,

  };

  我们到 s3cmci_probe_2410 函数中看,还是干脆直接看 s3cmci_probe 算了:

  static int s3cmci_probe(struct platform_device *pdev, int is2440) // 来自 /host/s3cmci.c

  {

  struct mmc_host *mmc;

  struct s3cmci_host *host;

  int ret;

  ……

  mmc= mmc_alloc_host (sizeof(struct s3cmci_host), &pdev->dev);

  if (!mmc) {

  ret=-ENOMEM;

  goto probe_out;

  }

  ……

  mmc->ops =&s3cmci_ops;

  ……

  ret= mmc_add_host (mmc);

  if (ret) {

  dev_err(&pdev->dev, "failed to add mmc ");

  goto free_dmabuf;

  }

  ……

  platform_set_drvdata(pdev, mmc);

  return 0;

  ……

  }

  这个函数很长,做的事件也很多,但我们关心的整个驱动的构架 / 流程,所以过滤掉一些细节的东西,只看 2 个最重要的函数: mmc_alloc_host 、 mmc_add_host 。函数命名已经很形象了,前者是申请一个 mmc_host ,而后者是添加一个 mmc_host 。中间还有一个操作,就是给 mmc 的 ops 成员赋上了 s3cmci_ops 这个值。申请mmc_host 当然很简单,就是申请一个结构体(我们暂且这样认为,因为他里面还做的其它事情,后面会看到),而添加又是添加到哪里去呢?看 mmc_add_host 函数:

  int mmc_add_host(struct mmc_host *host) // 来自 core/host.c

  {

  int err;

  ……

  err=device_add(&host->class_dev);

  if (err)

  return err;

  mmc_start_host(host);

  return 0;

  }

  很简单,就是增加了一个 device ,然后就调用 mmc_start_host 了,那就先跳过 device_add 这个动作,来看mmc_start_host:

  void mmc_start_host(struct mmc_host *host) // 来自 /host/core.c

  {

  mmc_power_off(host); // 掉电一下

  mmc_detect_change(host, 0); // ???

  }

  看上去只有两行代码,不过浓缩才是精华, mmc_power_off(host) 光看名子都知道是在干什么,先跳过,来看mmc_detect_change ,那么它到底干了些什么呢?看一下就知道了:

  void mmc_detect_change(struct mmc_host *host, unsigned long delay) // core/core.c

  {

  mmc_schedule_delayed_work(&host->detect, delay);

  }

  static int mmc_schedule_delayed_work(struct delayed_work *work, unsigned long delay)

  {

  return queue_delayed_work(workqueue, work, delay);

  }

  mmc_detect_change 又跳了一下,最后调用了 queue_delayed_work ,不知道这个函数功能的去查一下<>和<<深入理解 LINUX 内核>>,这几个代码告诉我们在 workqueue 这个工作队列当中添加一个延迟的工作任务,而这个工作任务就是由 host->detect 来描述的,在随后的 delay 个 jiffies 后会有一个记录在 host->detect 里面的函数被执行,那么到这里 s3cmci_probe 这个函数算是结束了,但事情还没有完, workqueue 这个工作队列还在忙,不一会儿它就会调用 host->detect 里面那个函数,这个函数到底是哪个函数,到底是用来干什么的呢?好像没有看到, detect 包含在 host 里面,那估计是在刚才那个申请的地方设置的那个函数,回过头来看一下 mmc_alloc_host:

  struct mmc_host *mmc_alloc_host(int extra, struct device *dev) // 来自 core/host.c

  {

  struct mmc_host *host;

  host=kzalloc(sizeof(struct mmc_host) + extra, GFP_KERNEL);

  if (!host)

  return NULL;

  INIT_DELAYED_WORK(&host->detect, mmc_rescan);

  return host;

  }

  如果你看了 queue_delayed_work 这个函数功能介绍,相信对 INIT_DELAYED_WORK 也不会陌生了吧。不废话了,来看 mmc_rescan :

  // 来自 core/host.c

  void mmc_rescan(struct work_struct *work) // // 来自 core/host.c

  {

  struct mmc_host *host= container_of(work, struct mmc_host, detect.work);

  u32 ocr;

  int err;

  ……

  ……

  err=mmc_send_io_op_cond(host, 0, &ocr);

  if (!err) {

  if (mmc_attach_sdio(host, ocr))

  mmc_power_off(host);

  goto out;

  }

  err=mmc_send_app_op_cond(host, 0, &ocr);

  if (!err) {

  if (mmc_attach_sd(host, ocr))

  mmc_power_off(host);

  goto out;

  }

  err=mmc_send_op_cond(host, 0, &ocr);

  if (!err) {

  if (mmc_attach_mmc(host, ocr))

  mmc_power_off(host);

  goto out;

  }

  mmc_release_host(host);

  mmc_power_off(host);

  out:

  if (host->caps & MMC_CAP_NEEDS_POLL)

  mmc_schedule_delayed_work(&host->detect, HZ);

  }

  浏览一个这个函数,看看函数名,再看看注释,知道什么了吗?它是在检测是不是有卡插入了卡控制器,如果有卡挺入就要采取相应的行动了。这里要明白一点,我们平时用的 SD/MMC 卡就是一个卡,如果要操作它得用SD/MMC 卡控制器才行,所以可以看到有 struct mmc_card,struct mmc_host 的区分。

  到这里了,来回忆一下 s3cmci_probe 这个函数做的事情,大概就是准备一个 mmc_host 结构,然后添加一个主控制器设备到内核,最后又调用了一下 mmc_rescan 来检测是不是有卡插入了。

  如果有卡插入了还好,可以去操作卡了,那如果没有卡插入呢? mmc_rescan 不是白调用了一次吗?是啊,的确是白调用了一次。可是卡插入时为什么 PC 还是能检测到呢?看来卡检测的动作不光是在 probe 的最后一步做了一次,其它地方也有做。卡插入一般都是人为地随时去插入的,像这种情况一般都是会用中断机制去提供系统有外来侵入,然后再去采取行动。 SD/MMC 卡也的确是这样做的,找来找去,发现在 s3cmci_probe 里面注册了一个中断函数 s3cmci_irq_cd( 函数名的意思应该是 irq card detect) ,就是这个了,看看这个函数先:

  static irqreturn_t s3cmci_irq_cd(int irq, void *dev_id) // host/s3cmci.c

  {

  struct s3cmci_host *host=(struct s3cmci_host *)dev_id;

  mmc_detect_change(host->mmc, msecs_to_jiffies(500));

  return IRQ_HANDLED;

  }

  看到这个函数想都不用想,直接跳到 mmc_rescan 里面去看就行了。前面已经知道了 mmc_rescan 里面就是在检测卡是不是插入了,既然卡随时插入我们都能检测到了,那就来看卡插入后都做了些什么动作吧。

  第二阶段:

  mmc_rescan 里面既要检测 sd 卡,又要检测 mmc 卡的,我们就照着一个往下走,假定有个人插入了 MMC卡,那就应该走下面这几行:

  err=mmc_send_op_cond(host, 0, &ocr);

  if (!err) {

  if (mmc_attach_mmc(host, ocr))

  mmc_power_off(host);

  goto out;

  }

  mmc_send_op_cond 这个函数据说是读了一下卡的什么值,这个值是什么意义我也不清楚,这就像检测 FLASH时读 FLASH 的 ID 一样,网卡也是这样的,不用管这个值的意义了,只要知道它能标识是一个 MMC 卡插入就行了。如果取这个值没有错误的话就得进 mmc_attach_mmc 了:

  int mmc_attach_mmc(struct mmc_host *host, u32 ocr) // core/mmc.c

  {

  int err;

  ……

  mmc_attach_bus_ops(host); // 这个与总线的电源管理有关,暂时跳过

  ……

  err=mmc_init_card(host, host->ocr, NULL);

  if (err)

  goto err;

  ……

  mmc_release_host(host);

  err=mmc_add_card(host->card);

  if (err)

  goto remove_card;

  return 0;

  remove_card:

  ……

  err:

  ……

  return err;

  }

  还是找几个关键函数来看 mmc_init_card 从函数名来看就是初始化一个 card ,这个 card 就用 struct mmc_card结构来描述,然后又调用 mmc_add_card 将卡设备添加到了内核,先来看 mmc_init_card 都做了些什么事情:

其他推荐产品

更多产品

收藏该商铺

登录 后再收藏

提示

您的留言已提交成功!我们将在第一时间回复您~
二维码 意见反馈
在线留言