精华内容
下载资源
问答
  • 写这篇博客的主要原因是因为公司的产品涉及到电池充放电管理,而且充电电压和电池电压可能会有多种组合,针对这种设计需求,发现目前流行的PD快充协议正好是多级电压,所以在TI支持PD快充的芯片选择支持多节电池...

    序言:

        写这篇博客的主要原因是因为公司的产品涉及到电池充放电管理,而且充电电压和电池电压可能会有多种组合,针对这种设计需求,发现目前流行的PD快充协议正好是多级电压,所以在TI支持PD快充的芯片中选择支持多节电池充放电管理的芯片。基于上述原因,选择了国内比较容易买到,价格也适中的bq25703。

        从了解芯片到Demo板调试基本完成,林林总总共历时大约1个月,整理成博客也是为了日后有个参考。

        好了,不多说,踩坑的日志开始~

    涉及到的链接:

     

    介绍bq25703:

    官方的介绍大家可以参考芯片的DataSheet,我就不复制粘贴了,重点功能如下:

    1. 支持1~4节锂电池充电,或者其他自定义充电电压(1.024V~19.2V),自定义充电电流(0.064A~8.128A);
    2. 支持3.5V~24V宽电压输入
    3. 无论是否充电状态,都可以向系统提供自定义电压(这里有坑,后面会说);
    4. 可以反过来向输入接口输出自定义电压(OTG功能),所以常被用来做快充充电宝电源管理芯片(这里有坑,后面会说)
    5. 充放电等详细设置均通过内部寄存器的配置完成,使用I2C与控制芯片通讯

    知道基本功能,下面介绍如何实现这些功能,附上Demo板的原理图截图,后面的设计都会根据这个图来介绍:

     

    这个图和DataSheet中的推荐应用图完全一样(事实上也没有自由发挥的空间 (0.0))

    简单介绍一下核心芯片bq25703外围电路的主要功能:

    • P1为电源输入口,支持3.5V~24V宽电压输入,一般接在TYPE-C的接口上,负责充电时的输入和OTG时的输出
    • R14是自己放置的采样电阻,后面加上运放后,目的是为了用单片机ADC功能呢获取到充/放电的电流大小和方向
    • ACP与ACN中间的采样电阻是BQ25703要求的,也是为了采集充放电电流,但实际似乎没有输出(后面详解)
    • Q1,Q2,Q3,Q4和L3共同组成BUCK-BOOST升降压电路,也是整个电路的核心,所以电感的电流尽可能选择的大一点,当然尺寸也要考虑在内,做Demo板当然无所谓尺寸,但是日后设计成形产品时,为了能够整体散热,能够让导热硅胶尽可能贴合MOS、芯片、电感,最终电感的选型肯定是尽可能的薄
    • SYS这个地方就是为整个系统提供自定义电压的地方,如果是在笔记本或者平板当中使用,就是为整个主板供电的地方
    • BAT+就是接电池正极的地方,可以是1~4节锂电池,也可以是特殊电压
    • R20采样电阻就是BQ25703检测电池充放电电流的地方
    • R23+R24就是负责在电路中设置为几节锂电池充电,具体的设置方法后面会说,图上的配置是为两节电池(8.4V)充电

     

    电池保护部分:

    因为Demo板的设计采用了18650电池,而且是无保护板的18650,所以需要DW01KA+两个SC8205S的NMOS作为保护。

    实际上,这样的保护板常常出现在锂聚合物电池上,那个跟买来的电池总是包在一起的小小的条状保护板,基本都是类似的设计,这样的设计可以实现:

    • 防止过充,电池电压上升超过4.3V就会断开电流流入电池的通路以阻止继续充电,但是放电依然畅通
    • 防止过放,电池电压低于3.5V就会断开电流流出的通路,但是充电通路畅通
    • 防止过流,在电流超过2A就会断开电流流出通路,然后很快恢复,继续检测是否过流,反复如此

    各部分电压电流检测,由单片机内部ADC采样完成,又快又准:

    从上到下依次是:

    • 外部接入的电流大小及方向检测
    • 外部接入电压检测
    • 电池电压检测
    • 电池充放电电流大小及方向检测

    Q:电流检测在第二级运放的同相输入端为什么要接偏置电阻?

    A:因为单片机的ADC只能检测0-5V,如果没有偏置电阻,那么至少有一个方向的电流是检测不到大小的,除非增加一路采样和运放,成本增加不说,还要多一路AD采样,编程和处理都会复杂;而且电流检测不需要太高精度,偏置后,两个方向都可以检测到电流大小,编程也方便

    Q:为什么电压采样还要用运放,而且是直接电压跟随,并没有放大?

    A:这里的运放主要起到保护作用,单片机ADC引脚最高输入不能超过5V,否则有击穿风险,所以用运放隔离了采样电压,保护芯片

    上位机通讯部分:

    采用CH340C作为与上位机通讯的串口,是因为外部电路太简单(只有一个电容),没有晶振,没有容易摔坏的风险

    主控芯片:

    主控芯片用的是新唐的NUC029单片机,采用ARM-M0构架,50MHz主频,64K编程空间,支持串口升级,内部EEPROM

    软件部分:

        bq25703这款芯片大部分功能都要通过I2C通讯,修改内部寄存器才能实现,所以务必需要至少一颗逻辑控制芯片负责通讯。

    如果没有主控芯片,就连最基本的充电功能都无法实现(充电电流为0)

    I2C的通信形式是标准,在网上有资料,大部分单片机也自带I2C接口,直接配置单片机寄存器就可以完成通讯

    这里简单介绍一下通过I2C是如何控制bq25703

    指令有两类:按地址写入数据,按地址读取数据

    按地址写入数据:  开始→写地址+0→从机应答→写寄存器地址→从机应答→写寄存器数据→从机应答→结束

    按地址读取数据: 开始→写地址+0→从机应答→写寄存器地址→从机应答→ 再次开始→写地址+1→从机应答→读取寄存器数据                                 →结束

    读取数据都是一次一个地址读取的,写入数据大部分都是直接一次一个地址写入,但是如下4个寄存器,需要一次写入两个地址,而且必须遵循先写小端,再写大端的形式,且必须在一次I2C通讯中完成,通讯顺序如下:

    开始→写地址+0→从机应答→写寄存器基址(偶数地址)→从机应答→ 写低位寄存器数据→从机应答→写高位寄存器数据→从机应  答→结束

    需要这样操作的特殊寄存器如下:

    • ChargeCurrent(0x02,0x03)充电电流
    • MaxChargeVoltage(0x04,0x05)充满电压
    • OTGVoltage(0x06,0x07)反向供电电压
    • InputVoltage(0x0a,0x0b)最小输入电压
       

    详细的寄存器表在DataSheet里有详细说明

    上位机软件配合调试:

    因为为大量的寄存器需要配置,那么如果每次试验数据都是使用串口调试,不够直观,也不够方便。

    在TI官网上发现一个这个软件,是IT官方制作的,支持全系列芯片的寄存器管理软件,为什么我不用这个软件而是自己写呢?因为这个软件需要配套一个调试工具,类似烧录器,已经做好的调试板在官网也有,但是价格实在比较感人,最终决定自己写上位机软件,配合单片机,自己定的协议进行调试,所以这个工具用上,但是可以用来参考

     

    自己做的开发板使用CH340C串口转USB设备,通过USB线与电脑相连,在系统中识别为CH340设备

    通过串口调试工具,测试进行测试,确定所有寄存器都可以写入并且读取到对应的值,那么就开始上位机的编写

    其实编写图形化软件,作为一个软件小白,似乎VB,MFC,QT等才是最优先的选择,但是,既然都是从头开始,为什么不选一个更加大胆的选择呢?

    最终决定使用 Electron 开发上位机软件,效果如下

    左侧可以看到所有的寄存器都被显示在表格里,而且通过颜色区别出当前的状态,点击可以改变寄存器的数值,实测下来方便了很多

    实际调试:

    那么硬件软件都准备好了,就开始激动人心的测试吧~

    我这边的硬件测试环境除了Demo板以外,还有一个DC-DC的升降压可调模块作为输入,用来模拟DP快充的多级电压

    插上电池 插上供电 调整输入为12V 插入上位机USB线 看到调试工具红红绿绿的小方块一个一个出现时,成就感还是很高的

    紧接着发现充电电流是0A,VSYS为7.6V(与电池电压相同),电池也没有输入和输出电流

    拔掉电池后,VSYS输出为6.14V

     

     

    展开全文
  • 接口芯片

    千次阅读 2017-05-23 16:03:52
    微机接口芯片 8253(8254) 1.8253作为定时器和计数器时( C )。  (A)使用的计数方式相同 (B)工作方式不同  (C)实质相同 (D)输出定时信号不同 2. 8253的计数器的最大计数初值是( A )。 (A)65536 ...

    微机接口芯片

    8253(8254)

    1.8253作为定时器和计数器时( C    )。

       (A)使用的计数方式相同       (B)工作方式不同 

    (C)实质相同                 (D)输出定时信号不同

    2. 8253的计数器的最大计数初值是(   A    )。

    (A)65536    (B)FFFFH    ()FFF0H    (D) 0000H

    3PC机执行输出指令OUT时,向相应的I/O接口芯片产生的有效控制信号是( B    )。

    (A) AEN(-------)       (B) IOR(-------)     (C) IOW(-------)       (D) ALE

    4.要求从8253A定时器0的输出端OUT0得到200MHz的方波信号,应将8253A的通道0的工作方式设置为(   D  )。

       A)方式0     B)方式1     C)方式2    D)方式3

    5.下列几种芯片中能完成定时/计数任务的是(   D )

    (A) 8255A    (B) 8237    (C) 8251    (D) 8254

    6. 定时器/计数器8254内部有3( C    )位的计数器。

    (A) 4    (B) 8    (C) 16     (D) 32

    7.要使8254通道2工作于方式3输出非对称的周期性方波,必须有( A   )。

    AGATE为高电平,计数初值为奇数  

    B)计数初值为偶数,GATE为高电平

    CGATE为低电平,计数初值为奇数  

    D)计数初值为偶数,GATE为低电平

    8. 某系统中欲采用8254的计数器0作频率信号发生器,引入计数器0的时钟频率为1.275MHz若要求它输出一个频率为5000Hz的信号,则在初始化时,送到计数器0的计数初值为(   D )。

    (A) 0FFFH    (B) 02FFH    (C) 01FFH    (D) 00FFH

    9. 8253可编程定时/计数器工作在方式0时,控制信号GATE变为低电平后,对计数器的影响是(   B   )。

    (A)结束本次计数循环,等待下一次计数开始

    (B)暂时停止现行计数工作

    (C)不影响本次计数,即计数器的计数不受该信号的影响

    (D)终止本次计数过程,立即开始新的计数循环

    10.某一测控系统要使用一脉冲信号产生单稳信号,如果使用8253可编程定时/计数器来实现此功能,则8253应工作在(   B  )。

    (A)方式0        (B)方式1          (C)方式2       (D)方式3

    (E)方式4        (F)方式5

    11.某一测控系统要使用连续的方波信号,如果使用8253可编程定时/计数器来实现此功能,则8253应工作在(  D   )

    (A)方式0        (B)方式1          (C)方式2       (D)方式3

    (E)方式4        (F)方式5

    12.8253可编程定时/计数器处于计数过程中,当CPU对它装入新的计数值时,其结果将是(  D   )

    (A)8253可编程定时/计数器禁止编程

    (B)8253可编程定时/计数器允许编程,并改变当前的计数过程

    (C)8253可编程定时/计数器允许编程,但不改变当前的计数过程

    (D)8253可编程定时/计数器允许编程,是否影响当前计数过程随工作方式而变

    13.8253可编程定时/计数器工作在方式0,在初始化编程时,一旦写入控制字后(  B  )

    (A)输出信号端OUT变为高电平           (B)输出信号端OUT变为低电平

    (C)输出端保持原来的电位值             (D)立即开始计数

    14.INTEL8253通道工作于方式3,接入6MHZ的时钟,如要求产生2400HZ的方波,则计数器的初值应为(    B  )

      (A)2000        (B)2500         (C)3000          (D)4000      

    15.可编程定时器/计数器8253的控制字为(   A  )个字节。

    (A)1         (B)2           (C)3           (D)4

    16.起动8253的计数器开始计数的方式有(   C    )。

    (A)软件方式       (B)硬件方式         (C)软件和硬件方式       (D)门控信号

    17.8253写入的计数初值写到了(   A   )中。

    (A)初值寄存器      (B)计数器0        (C)减计数单元       (D)控制字寄存器

    18.在对8253进行任何操作前,都必须先向8253写入一个(   A     ),以确定8253的工作方式。

    (A)控制字      (B)计数初值        (C)状态字          (D)指令

    19.计数初值送到8253的(     B    )寄存器中。

    (A)控制寄存器              (B)计数初值寄存器

    (C)减计数单元              (D)输出锁存寄存器

    20.可以从8253的(    D    )寄存器中读出减计数器的值。

    (A)控制寄存器                   (B)计数初值寄存器

    (C)减计数单元                   (D)输出锁存寄存器


    1.8253的计数器用于对外部事件记数,计满100后输出一跳变信号,若按BCD方式计数,则写入计数初值的指令为MOV AX,(  100H   )和OUT PORTAL

    38253A芯片有(  3  )个计数通道,每个通道可有(     6 种工作方式。

    4.当需要利用8254产生对称性方波时,应选的工作方式为 (   3  ),把它作为一个可编 程的单稳态电路使用时,应工作在(   1  )下。

    58254在进行计数时,实际上是对(  CLK  )信号线上的信号进行计数 。

    6.要使8253定时/计数器的OUT输出100HZ的方波,计数频率为100KHZ,则计数的初值应为(  1000     )

    7. 8253中的每个计数器可作为二进制和(  BCD     )进制计数器用。


    8255

    1.8255A既可作数据输入、出端口,又可提供控制信息、状态信息的端口是( D )

    (A)B口    (B)A口  (C)ABC三端口均可以    (D)C

    2.8255A的方式选择控制字为80H,其含义是( D    )

    (A)ABC口全为输入      (B)A口为输出,其他为输入

    (C)AB为方式0           (D)ABC口均为方式0,输出

    3.8255A引脚信号WR(-----)=0,CS(-----)=0,A1=1,A0=1时,表示( B     )。 

    (A)CPU向数据口写数据    (B)CPU向控制口送控制字   

    (C)CPU8255A控制口    (D)无效操作

    4.一微机化仪器采用8255A芯片作数据传送接口,并规定使用接口地址的最低两位作芯片内部寻址,已知芯片的A口地址为0F4H,则当CPU执行输出指令访问0F7H端口时,其操作为( C   )。

    (A) 数据从端口C送数据总线   (B) 数据从数据总线送端口C

    (C) 控制字送控制字寄存器     (D) 数据从数据总线送端口B

    5.当8255A的端口A、端口B均工作在方式0的输入方式时,端口C可以作为( A )用。

    (A)两个4I/O端口或18I/O端口      (B) 状态端口

    (C)部分引脚作端口A、端口B的联络信号       (D)全部作联络信号

    6.当并行接口芯片8255A被设定为方式2时,其工作的I/O口(  A    )。

      (A)既能作输入口、也能作输出口使用         (B) 仅能作输入口使用

    (C)仅能作不带控制信号的输入口或输出口使用 (D) 仅能作输出口使用

    7intel公司生产的用于数据并行传送的可编程接口芯片是( D   )。

    (A)8218           (B)8251           (C)8253           (D)8255

    8.一片1ntel8255A需占用(   B  )个端口地址。

        A2        B4        C6        D8

    98255A口中断输出时,应将A口工作方式初始化为(  D   )才能满足。

    A)方式0     B)方式1     C)方式2    D)方式1、方式2

    108255A接口芯片的端口A(    B    )种工作方式。  

    (A) 5   (B) 3    (C) 4     (D) 2

    118255的读写信号WR=0A0=1A1=1,完成的工作是(  B   )。  

    (A) 数据写入C端口    (B) 数据写入控制字寄存器   

    (C) 数据写入A端口    (D)数据写入B端口

    128255A能实现双向传送功能的工作方式为(   C  )。  

    (A) 方式0    (B) 方式1   (C) 方式2    (D) 方式3

    138255A使用了(  D  )个端口地址。  

    (A) 1    (B) 2    (C) 3    (D) 4

    14.某系统采用8255A作并行I/O接口,初始化时CPU所访问的端口地址为0CBH,并设定为方式1输出,则A口的口地址应为(  A )。

    (A) 0C8H    (B) 0CAH    (C) 0CH    (D) 0EH

    15.在8255的初始化程序中,使INTEA=1的目的是使(  A  )。

    AA口在中断方式下完成输入/输出操作

    BB口在中断方式下完成输入/输出操作

    CA口在查询方式下完成输入/输出操作

    DB口在查询方式下完成输入/输出操作

    168255工作在(  C  )下,不需联络信号线。

    A)方式1   B)方式2   C)方式0   D)所有方式

    17.在8255A中可以进行按位置位/复位的端口是( C )。

    (A) 端口A    (B) 端口B    (C) 端口C    (D) 所有端口

    188255A工作在方式2时, ACKA有效表示(  B   )。

    A)数据已存入端口A     B)数据已被外设取走

    C)将数据存入端口A     D)通知外设将端口A数据取走

    19.在Intel8255A中只能工作在方式0下的端口是(  C   )。

    A)端口A B)端口B  C)端口C D)控制寄存器端口


    18255AA端口有( 3)种工作方式,它们分别是(方式0,方式1,方式2 )。

    28255ACPU连接时,地址线一般与CPU的地址总线的(A0A1)连接。

    38255A中包括两组控制电路,其中A组控制(A口和C口高4),B组控制(B口和C口低4)。

    48255A内部具有(  3   )个输入/输出端口。


    展开全文
  • SSD1306 OLED驱动芯片 详细介绍

    万次阅读 多人点赞 2020-03-23 11:30:35
    概述   SSD1306是一款泛用的OLED驱动芯片 简介    GDDRAM内部结构    三种内存地址模式   
    SSD1306是一款OLED驱动芯片,拥有最大128*64像素支持,广泛应用在小尺寸OLED显示屏的驱动中。

    简介

      SSD1306是一款带控制器的用于OLED点阵图形显示系统的单片CMOS OLED/PLED驱动器。它由128个SEG(列输出)和64个COM(行输出)组成。该芯片专为共阴极OLED面板设计。
      SSD1306内置对比度控制器、显示RAM(GDDRAM)和振荡器,以此减少了外部元件的数量和功耗。该芯片有256级亮度控制。数据或命令由通用微控制器通过硬件选择的6800/8000系通用并行接口、I2C接口或串行外围接口发送。该芯片适用于许多小型便携式应用,如手机副显示屏、MP3播放器和计算器等。

     器件特性

    • 分辨率:128 x 64 点阵
    • 电源:对于集成逻辑电路,VDD=1.65V3.3V;对于面板驱动,VCC=7V至15V
    • 点阵驱动:OLED驱动输出电压,最大15V;SEG最大源电流:100uA;COM最大汇电流:15mA;256阶对比度亮度电流控制
    • 内置128 x 64位SRAM显示缓冲区
    • 引脚可选择的MCU接口:8位6800/8080串并接口、 3/4线串行外围接口、I2C接口
    • 水平和垂直方向的屏幕保持连续滚动功能
    • RAM写同步信号
    • 可编程帧速率和复用率
    • 行重映射和列重映射
    • 片内内置振荡器
    • COG和COF的芯片封装
    • 工作温度范围广:-40°C至85°C

    SSD1306结构介绍

     内部结构图

    在这里插入图片描述

     引脚分配图

    在这里插入图片描述

     引脚说明

    其他引脚:
    • IREF:段输出电流参考脚,VSS间应连接一个电阻,以将IREF电流保持在12.5uA
    • CL:外部时钟输入引脚。用外部时钟时,此引脚输入外部时钟信号。用内部时钟时应连接到VSS
    • CLS:内部时钟启用引脚。拉高时内部时钟启用,拉低时内部时钟禁用,
    • FR:用于输出RAM写同步信号,不使用应当NC pin处理
    • TR0~TR6:测试保留引脚,当做NC pin处理
    • NC:空引脚,不要短接
    电源引脚:
    • VDD:芯片逻辑器件供电引脚
    • VCC:显示面板驱动电源引脚
    • VSS:接地引脚
    • VLSS:模拟接地引脚,在外部连接到VSS
    • VCOMH:用于COM的高电平电压输出的引脚,与VSS之间应该连接一个电容
    驱动器输出引脚:
    • SEG0~SEG127:列输出脚,OLED关闭时,处于VSS状态
    • COM0~COM63:行输出脚,OLED关闭时,处于高阻抗状态
    MCU接口引脚:
    • B[2:0]:MCU总线接口选择脚。通过配置B0~B2来选择不同的MCU总线接口。
    • D[7:0]:连接到MCU的8位双向数据总线,不同MCU总线接口有不同用法
    • D/C#:数据/命令控制脚,不同MCU总线接口有不同用法
    • R/W#(WR#):与6800/8080通用并行总线接口相关,使用串行接口时作拉高处理
    • E (RD#):与6800/8080通用并行总线接口相关,使用串行接口时作拉高处理
    • RES#:复位信号引脚,低电平有效。
    • CS#:芯片片选引脚,低电平有效

    上电复位

      当RES#输入低电平时,芯片开始如下的初始化进程:

    1. 关闭显示(AEH)
    2. 进入128x64 显示模式
    3. 恢复到默认的SEG和COM映射关系(A0H,D3H-00H)
    4. 清除串行接口中移位寄存器内的数据
    5. GDDRAM显示开始行设为0(40H)
    6. 列地址计数器重置为0
    7. 恢复到默认的COM扫描方向(C0H)
    8. 对比度寄存器初始化为7FH(81H-7FH)
    9. 正常显示模式(A4H)

    MCU总线接口

     MCU总线接口配置

      SSD1306驱动器集成了 6800/8080 系列通用并行接口,串行接口:SPI 接口以及 IIC 接口。通过SSD1306的 BS[2:0]引脚 来选择使用的接口类型,如下图(1为拉高,0为拉低):

    在这里插入图片描述
      MCU不同总线接口的引脚配置如下图所示:

    在这里插入图片描述


     MCU总线接口类型

    (6800/8080系列通用并行接口不多介绍)

    4线SPI
    引脚配置:

      4线SPI接口包括:串行时钟(SCLK)、串行数据(SDIN)、数据/命令控制(D/C#)、片选(CS#)。在4线SPI模式下,D0用作SCLK,D1用作SDIN。对于未使用的数据管脚,D2应保持打开状态。从D3到D7,E和R/W#(WR#)的引脚连接到外部地(拉低)。
    在这里插入图片描述

    写入时序:

      在SCLK每个上升沿,SDIN上的数据按 D7,D6,…,D0 的顺序(高位在前)移位到一个8位移位寄存器中。每八个时钟对D/C#进行一次采样,移位寄存器中的8位数据根据D/C#的采样结果决定写入到图形显示数据RAM(GDDRAM)或命令寄存器。
      4线SPI的写时序如下所示:
    在这里插入图片描述

    3线SPI
    引脚配置:

      3线SPI接口包括:串行时钟(SCLK)、串行数据(SDIN)和片选(CS#)。在3线SPI模式下,D0用作SCLK,D1用作SDIN。对于未使用的数据管脚,D2应保持打开状态。从D3到D7,R/W#(WR#),E,D/C# 的引脚连接到外部地(拉低)。
    在这里插入图片描述

    写入时序:

    在这里插入图片描述
      该操作类似于4线串行接口,但不使用D/C#引脚。
      一共9位数据按 高位在前 的顺序,每9个时钟后全部移位到移位寄存器中:D/C#位(数据首位),D7到D0位。D/C# 位将确定移位寄存器中的8位(D7~D0)数据字节写入GDDRAM(D/C#=1)或命令寄存器(D/C#=0)。串行模式下,只允许写操作


    IIC
    基础配置:

      IIC总线包含从机地址位 SA0,数据信号线 SDA(SDAOUT/D2输出和SDAIN/D1输入)和时钟信号线 SCL组成。SDA和SCL线都必须接上拉电阻,RES#用来初始化芯片。
      IIC设备在数据传输之前都必须识别从机地址。SSD1306的从机地址有 0111100b0111101b 两种,通过将SA0(D/C#)脚上拉到高电平可以设置从机地址第七位为 1,将SA0(D/C#)脚下拉到低电平可以设置从机地址第七位为 0。通过SA0(D/C#)脚的上拉和下拉来设置从机地址,从而令总线上可以存在最多2个SSD1306驱动器。

    在这里插入图片描述
      SDAOUT/D2和SDAIN/D1连接到一起作为SDA。SDAIN引脚必须连接到SDA,SDAOUT引脚可以不连接。当SDAOUT引脚不连接,应答信号将会被12C总线忽略。

    写入时序:

      IIC写入时序如下所示:

    1. 主机先发起开始(START)信号,然后发送1byte首字节,包括从机地址(7位)和读写数据位(1位,最低位,0为写模式),驱动器识别从机地址为本机地址之后,将会发出 应答信号(ACK) 。(首字节组成如下图所示)
    2. 主机收到从机(驱动器)的应答信号之后,随后传输1byte控制字节。一个控制字节主要由
      COD/C# 位后面再加上六个0组成的。(控制字节组成如下图所示)
      如果Co为0,后面传输的信息就只包含数据字节。
      D/C# 位决定了下个数据字节是作为命令还是数据。D/C# 为0时,下一个数据被视为命令;DC# 为1时,下一个数据被视为显示数据,存储到GDDRAM中。
    3. 收到控制字节ACK信号之后,传输要写入的数据字节。
    4. 传输完毕之后主机发出结束(STOP)信号

    在这里插入图片描述

    读写控制

      SSD1306通过 D/C#R/W# 两位来确定:读/写数据,写命令和读状态四种通信行为。具体如下图,不再赘述:
    在这里插入图片描述


    GDDRAM内部结构

      显示RAM:GDDRAM(Graphic Display Data RAM )内部结构如下所示:
      GDDRAM是位映射静态RAM,大小为 128x64 位。GDDRAM分为8页(PAGE0~PAGE7),每页内 1个SEG对应1Byte数据,一页由 128 Byte 组成。一帧显示数据为 1024 Byte(1KB)。
    在这里插入图片描述
      1个数据字节写入GDDRAM时,当前列(SEG)同一页(PAGE)的所有行(COM)图像数据都被填充(即由列地址指针指向的整列(8位)被填充)。数据位D0写入顶行,数据位D7写入底行。(由上到下,由低到高)
    在这里插入图片描述


    三种GDDRAM寻址模式

     页寻址

      页寻址模式是器件默认选择的GDDRAM寻址模式,通过“20H,02H”命令可以设置寻址模式为页寻址。
      页寻址模式下,寻址只在一页(PAGEn)内进行,地址指针不会跳到其他页。每次向GDDRAM写入1byte显示数据后,列指针会自动+1。当128列都寻址完之后,列指针会重新指向SEG0而页指针仍然保持不变。通过页寻址模式我们可以方便地对一个小区域内数据进行修改。
    在这里插入图片描述

     水平寻址

      水平寻址模式可以通过指令“20H,00H”来设置。
      水平寻址模式下,每次向GDDRAM写入1byte数据后,列地址指针自动+1。列指针到达结束列之后会被重置到起始行,而页指针将会+1。页地址指针达到结束页之后,将会自动重置到起始页。水平寻址模式适用于大面积数据写入,例如一帧画面刷新。
      (下图所示起始页为0,结束页为7;起始列为0,结束列为127)
    在这里插入图片描述

     垂直寻址

      垂直寻址模式可以通过指令“20H,01H”来设置。
      垂直寻址模式下,每次向GDDRAM写入1byte数据之后,页地址指针将会自动+1。页指针到达结束页之后会被重置到0,而列指针将会+1。列地址指针达到结束页之后,将会自动重置到起始列。
      (下图所示起始页为0,结束页为7;起始列为0,结束列为127)
    在这里插入图片描述


    指令详解

     基础指令

    自己整理的指令表总括如下:

    在这里插入图片描述
    1.设置对比度 (81H+A[7:0])
      这是一条双字节指令,由第二条指令指定要设置的对比度级数。
      A[7:0]00H~FFH 分别指定对比度为 1~256 级。SEG(段)输出的电流大小随对比度级数的增加而增加。

    2.设置全屏全亮 (A4H / A5H)
      这是一条单字节指令,用于开关屏幕全亮模式。
      A4H 设置显示模式为正常模式,此时屏幕输出GDDRAM中的显示数据。
      A5H 设置显示模式为全亮模式,此时屏幕无视GDDRAM中的数据,并点亮全屏。
      通过A5H设置全屏点亮之后可以通过A4H来回复正常显示。

    3.设置正常/反转显示 (A6H / A7H)
      这是一条单字节指令,用于设置屏幕显示
      A6H 设置显示模式为 1亮0灭,而 A7H 设置显示模式为 0亮1灭

    4.开关显示屏 (AEH / AFH)
      这是一条单字节指令。
      AEH 关闭屏幕,而 AFH 开启屏幕。
      屏幕关闭时,所有SEG和COM的输出被分别置为Vss和高阻态。


     地址指令

    自己整理的指令表总括如下:

    在这里插入图片描述
    1.设置GDDRAM寻址模式 (20H+A[1:0])
      这是一条双字节指令,由 A[1:0] 指定要设置的地址模式。
      A[1:0]=00b时为水平地址模式;A[1:0]=01b时为垂直地址模式;A[1:0]=10b时为页地址模式;A[1:0]=11b时为无效指令;
      由于第二条指令前6位值无规定,所以直接用0替代,得到:00H-水平;01H-垂直;02H页

    2.设置起始/终止列地址 (21H+A[6:0]+B[6:0])
      这是一条三字节指令,由A[6:0]指定起始列地址,B[6:0]指定终止列地址。
      同样,由于前1位值无规定,所以:A[6:0]B[6:0]00H~7FH 的取值指定起始/终止列地址为 0~127
      这条指仅在水平/垂直模式下有效,用来设置水平/垂直模式的初始列和结束列

    3.设置起始/终止页地址 (22H+A[2:0]+B[2:0])
      这是一条三字节指令,由A[2:0]指定起始也地址,B[2:0]指定终止页地址。
      由于前5位值无规定,所以:A[2:0]和B[2:0]从 00H~07H 的取值指定起始/终止页地址为 0~7
      这条指仅在水平/垂直模式下有效,用来设置水平/垂直模式的初始页和结束页

    4.设置起始列地址低位 (00H~0FH)
      这是一条单字节指令。
      高4位恒定为0H,低4位为要设置的起始列地址的低4位。这条指令仅用于页寻址模式。

    5.设置起始列地址高位 (10H~1FH)
      这是一条单字节指令
      高4位恒定为1H,低4位为要设置的起始列地址的高4位。这条指令仅用于页寻址模式。

    6.设置页地址 (B0H~B7H)
      这是一条单字节指令
      高4位恒定为BH,第5位规定为0,低3位用于设置页地址,从 B0H~B7H 分别设置起始页为 0~7。这条指令仅用于页寻址模式。


     硬件指令

    自己整理的指令表总括如下:

    在这里插入图片描述
    1.设置GDDRAM起始行 (40H~7FH)
      这是一条单字节指令。
      高2位规定为01b,由低6位的取值来决定起始行。整体指令从 40H~7FH 分别设置起始行为 0~63

    2.设置SEG映射关系 (A0H / A1H)
      这是一条单字节指令。
      A0H 设置GDDRAM的COL0映射到驱动器输出SEG0。
      A1H 设置COL127映射到SEG0

    3.设置COM扫描方向 (C0H / C8H)
      这是一条单字节指令。
      C0H 设置 从COM0扫描到COM[N-1],N为复用率
      C1H 设置 从COM[N-1]扫描到COM0

    4.设置复用率 (A8H+A[5:0])
      这是一条双字节指令,由A[5:0]指定要设置的复用率
      复用率(MUX ratio)即选通的COM行数,不能低于16,通过A[5:0]来指定。
      A[5:0] 高两位无规定视为0,所以第二条指令从 0FH~3FH 的取值设置复用率为 1~64(即A[5:0]+1)。A[5:0]从0到14的取值都是无效的。

    5.设置垂直显示偏移 (D3H+A[5:0])
      这是一条双字节指令,由A[5:0]指定偏移量。
      垂直显示偏移即整个屏幕向上移动的行数,最顶部的行会移到最底行。
      A[5:0] 高两位无规定视为0,所以第二条指令从0FH~3FH的取值设置垂直偏移0~63

    6.设置COM硬件配置 (DAH+A[5:4])
      这是一条双字节指令,由A[5:4]进行设置。
      A[5] 位设置COM左右反置,A[4] 用来设置序列/备选引脚配置,其他位有规定,规定如下所示。

    在这里插入图片描述
      SSD1306的COMn引脚一共有左边 COM32~COM63 和右边 COM0~COM31 共64个(金手指面朝上方)。通过设置A[5]可以让左右COM引脚的输出互换。A[5]=0时禁止左右反置,A[5]=1时启用左右反置。
      COM引脚的排列有序列和奇偶间隔(备选)两种,通过A[4]进行设置。A[4]=0时使用序列COM引脚配置,A[5]=1时使用奇偶间隔(备选)COM引脚配置。


     时序和指令

    自己整理的指令表总括如下:

    在这里插入图片描述
    1.设置显示时钟分频数和fosc (D5H+A[7:0])
    2.设置预充电周期 (D9H+A[7:0])
    3.设置VCOMH输出的高电平 (DBH+A[6:4])
    4.空操作 (E3H)
      


     滚动指令

    自己整理的指令表总括如下:

    在这里插入图片描述
      指令表如图,关于滚动指令会单独开篇讲,期待我的后续文章。

    自己写的驱动程序(C51)

    /**********************************************************************************
     * 程序名:    SSD1306驱动程序	
     * 作者:      DaveoCKII			
     * 日期:      2020.3.12			
     * 版本:      STC12C5A60S2 		
     **********************************************************************************/
    
    #ifndef _SSD1306_H_
    #define _SSD1306_H_
    
    #include <STC12C5A60S3.H>
    //------------------------------------定义列表------------------------------------//
    sbit SCL = P3^4;	// 时钟线
    sbit SDA = P3^3;	// 数据线
    //------------------------------------函数列表------------------------------------//
    void OLED_Init(void);						// OLED 初始化
    void OLED_Clear(void);						// OLED 清屏
    void OLED_WriteCmd(unsigned char cmd);		// OLED 单次写命令
    void OLED_WriteDat(unsigned char dat);		// OLED 单次写数据
    void OLED_WriteC(unsigned char cmd);		// OLED 连续写命令	在结尾要加上IIC_STOP();
    void OLED_WriteD(unsigned char dat);		// OLED 连续写数据	在结尾要加上IIC_STOP();
    void OLED_Frame(unsigned char P[8][128]);	// OLED 一帧图像写入
    //------------------------------------内部函数------------------------------------//
    static void IIC_START(void);				// IIC_开始信号	(重开始信号用此替代)
    static void IIC_STOP(void); 				// IIC_结束信号
    static unsigned char IIC_WaitACK(void);		// IIC_等待应答		返回值: 0:NACK 1:ACK 
    static void IIC_Write(unsigned char dat);	// IIC_写数据函数	参数:要写入的数据
    static unsigned char IIC_Read(void);		// IIC_读数据函数	返回值:读到的数据
    static void delay1us(void);					// 延时1us    
    //------------------------------------函数内容------------------------------------//
    
    void OLED_WriteD(unsigned char dat)
    {
    	IIC_START();		// 通信开始
    	IIC_Write(0X78);	// 写从机地址'0111 100' 读写符号'0'
    	IIC_WaitACK();
    	IIC_Write(0X40);	// 写数据 Co='0' C/D='100 0000'
    	IIC_WaitACK();
    	IIC_Write(dat);		// 写入数据
    	IIC_WaitACK();
    }
    
    void OLED_WriteC(unsigned char cmd)
    {
    	IIC_START();		// 通信开始
    	IIC_Write(0X78);	// 写从机地址'0111 100' 读写符号'0'
    	IIC_WaitACK();
    	IIC_Write(0X00);	// 写命令 Co='0' C/D='000 0000'
    	IIC_WaitACK();
    	IIC_Write(cmd);		// 写入命令
    	IIC_WaitACK();
    }
    
    void OLED_WriteDat(unsigned char dat)
    {
    	OLED_WriteD(dat);
    	IIC_STOP();			// 通信结束
    }
    
    void OLED_WriteCmd(unsigned char cmd)
    {
    	OLED_WriteC(cmd);
    	IIC_STOP();			// 通信结束
    }
    
    void OLED_Init(void)
    {	
    	OLED_WriteC(0XAE);		// 关OLED显示
    	// 基础设置
    	OLED_WriteC(0XA4);		// 输出GDDRAM内容	
    	OLED_WriteC(0XA6);		// 正常显示(1亮0灭)	
    	OLED_WriteC(0X81);		// 设置对比度		
    	OLED_WriteC(0X7F);		// 第127级对比度	
    	// COM和SEG输出设置
    	OLED_WriteC(0XD3);		// 设置垂直显示偏移(向上)
    	OLED_WriteC(0X00);		// 偏移0行					
    	OLED_WriteC(0X40);		// 设置GDDRAM起始行 0		
    	OLED_WriteC(0XA8);		// 设置MUX数 (显示行数)		
    	OLED_WriteC(0X3F);		//  MUX=63	 (显示63行)			
    	OLED_WriteC(0XA1);		// 左右反置关(段重映射)		
    	OLED_WriteC(0XC8);		// 上下反置关(行重映射)		
    	OLED_WriteC(0XDA);		// 设置COM引脚配置		
    	OLED_WriteC(0X02);		// 序列COM配置,禁用左右反置
    	// 时钟设置
    	OLED_WriteC(0XD5);		// 设置DCLK分频和OSC频率
    	OLED_WriteC(0X80);		// 无分频,第8级OSC频率	
    	// 开OLED
    	OLED_WriteC(0X8D);		// 启用电荷泵
    	OLED_WriteC(0X14);		// 启用电荷泵
    	OLED_WriteC(0XAF);		// 开OLED显示
    	
    	IIC_STOP();
    }
    
    void OLED_Clear(void)
    {
    	unsigned char i,j;
    	
    	OLED_WriteC(0X00);		// 水平寻址模式 
    	OLED_WriteC(0X21);		// 设置列起始和结束地址
    	OLED_WriteC(0X00);		// 列起始地址 0
    	OLED_WriteC(0X7F);		// 列终止地址 127
    	OLED_WriteC(0X22);		// 设置页起始和结束地址
    	OLED_WriteC(0X00);		// 页起始地址 0
    	OLED_WriteC(0X07);		// 页终止地址 7
    	
    	for(i=0; i<8; i++)		// 写入一帧'0'
    		for(j=0; j<128; j++)
    			OLED_WriteD(0X00);
    	
    	IIC_STOP();
    }
    
    void OLED_Frame(unsigned char P[8][128])
    {
    	unsigned char i,j;
    	
    	OLED_WriteC(0X20);	// 设置GDDRAM模式
    	OLED_WriteC(0X00);	// 水平寻址模式 
    	OLED_WriteC(0X21);	// 设置列起始和结束地址
    	OLED_WriteC(0X00);	// 列起始地址 0
    	OLED_WriteC(0X7F);	// 列终止地址 127
    	OLED_WriteC(0X22);	// 设置页起始和结束地址
    	OLED_WriteC(0X00);	// 页起始地址 0
    	OLED_WriteC(0X07);	// 页终止地址 7
    	
    	for(i=0; i<8; i++)		// 写入一帧数据
    		for(j=0; j<128; j++)
    			OLED_WriteDat(P[i][j]);
    	
    	IIC_STOP();
    }
    
    //----------------------------------内部函数内容-----------------------------------//
    
    static void IIC_START(void)
    {
    	SCL = 0;		// SCL拉低 防止可能出现的各种误动作
    	delay1us();
    	SDA = 1;		// SDA拉高 
    	SCL = 1;		// SCL拉高 准备发出起始信号
    	delay1us();		
    	SDA = 0;		// SDA拉低 发出起始信号
    	SCL = 0;		// SCL拉低 开始传输
    }
    
    static void IIC_STOP(void)
    {
    	SCL = 0;		// SCL拉低 防止可能出现的各种误动作
    	SDA = 0;		// SDA拉低
    	SCL = 1;		// SCL拉高 准备发出结束信号
    	delay1us();		
    	SDA = 1;		// SDA拉高 发出结束信号
    }
    
    static unsigned char IIC_WaitACK(void)
    {
    	bit s;
    	SCL = 0;		// 拉低SCL
    	delay1us();
    	SDA = 1;		// 拉高SDA 主机释放总线
    	delay1us();
    	SCL = 1;		// 拉高SCL 
    	delay1us();		
    	s = SDA;		// 采集SDA信号线状态
    	delay1us();		
    	SCL = 0;		// 拉低SCL 结束询问ACK
    	if(s)
    		return 0;	// 无应答(ACK)
    	else
    		return 1;	// 有应答(ACK)	
    }
    
    static void IIC_Write(unsigned char dat)
    {
    	unsigned char i;
    	for(i=0; i<8; i++) 
    	{
    		SCL = 0; 			// 拉低SCL 准备写数据
    		SDA = dat & 0X80;	// 写数据
    		dat <<= 1;			// 数据格式:高位在前
    		SCL = 1;			// 拉高SCL 发送数据
    		delay1us();
    		SCL = 0;			// 拉低SCL 结束发送
    	}
    }
    
    static void delay1us(void)
    {	
    
    }
    
    //---------------------------------------------------------------------------------//
    //------------------------------------定义结束--------------------------------------//
    //---------------------------------------------------------------------------------//
    
    #endif
    


      DaveoCKII
    2020.3.23

    展开全文
  • 几种芯片

    千次阅读 2018-09-12 22:13:38
    1. SRAM 芯片 HM6116 HM6116 是一种 2048 x 8 位的高速静态CMOS随机存取存储器 特征:高速度,低功耗,与TTL兼容,管脚引出与标准2K x 8 的芯片(例如 2716 芯片)兼容,完全静态 2. DRAM 芯片 2164 2164 是 ...

    芯片说明
    SRAM HM6116静态随机存储器
    DRAM 2164动态随机存储器
    EPROM Intel 2732A可擦除可编程 ROM
    74LS138译码器
    74LS373锁存器
    74LS244缓冲器
    74LS245数据收发器
    8259A可编程中断控制器
    8255A可编程并行接口芯片
    8253-5可编程定时/计数器

    1. SRAM 芯片 HM6116

    1. HM6116 是一种 2048 x 8 位的高速静态CMOS随机存取存储器
    2. 特征:高速度,低功耗,与TTL兼容,管脚引出与标准 2K x 8 的芯片(例如 2716 芯片)兼容,完全静态这里写图片描述
      这里写图片描述
      在这里插入图片描述
      在这里插入图片描述
    3. 7 条行地址线: A4 ~ A10
      4 条列地址线: A0 ~ A3
      8 条数据线: I/O1 I/O8
      CE# :片选信号
      WE# :写允许信号
      OE# :输出允许信号

    2. DRAM 芯片 2164

    1. 2164 是 64K x 1 位的芯片
    2. 特征:存取速度为 150ns / 200ns,低功耗,每 2ms 需刷新一遍,每次刷新 512 个存储单元,2ms 内需有 128 个刷新周期
    3. 这里写图片描述
    4. 这里写图片描述
    5. 这里写图片描述

    3. EPROM 芯片 Intel 2732A

    1. 2732A 是一种 4K x 8 位的 EPROM,其存取时间为 250ns 和 200ns ,在同8086 CPU 接口是,无需插入等待周期即可正常工作。
      在这里插入图片描述

    2. (1)12 条地址线:A11 ~ A0
      (2)8 条数据线:O7 ~ O0
      (3)2 条控制线:CE# 为芯片允许线,用来选择芯片。 OE# 为输出允许线,用来把输出数据送上数据线

    3. 2732 有 6 种工作方式,读方式,代用方式,编程方式,编程禁止方式,Intel 标识符方式

    一个 8 位微机系统的存储器子系统

    在这里插入图片描述

    1. 地址线
      EPROM 2732:为 4K x 8 位 芯片,片外地址线为 A19 ~ A12 ,片内地址线为 A11 ~ A0
      SRAM HM6116 :为 2K x 8 位芯片,片外地址线为 A19 A11 ,片内地址线为 A10 ~ A0
    2. 数据线
      2732、6116 都是 8 位数据线
    3. 控制线

    4. 74LS138 译码器

    这里写图片描述
    这里写图片描述
    片选 :74LS138 用来实现存储器芯片的片选
    字选 :字选由存储器芯片内部地址译码器来完成

    5. 输入输出接口芯片

    (1). 锁存器 74LS373

    1. 74LS373 锁存器主要用于锁存地址信息、数据信息以及 DMA 页面地址信息
    2. 74LS373 锁存器由 8 个 D 门组成,有
      (1) 8 个输入端:1D~8D
      (2) 8 个输出端:1Q~8Q
      (3) 2 个控制端:G 有效时将 D 端数据打入锁存器的 D 门。输出允许端 OE# 有效时,将锁存器中锁存的数据送到输出端 Q 。
    3. 74LS373 锁存器主要用于锁存地址信息、数据信息、DMA 页面地址信息。
      常用的锁存器还有:74LA273、573、Intel 8282、8283
      这里写图片描述

    在这里插入图片描述

    (2). 缓冲器 74LS244

    1. 74LS244 缓冲器 主要用于三态输出的存储地址驱动器、时钟驱动器和总线定向接收器和定向发送器
    2. 8 个输入端分为两路:1A1 ~ 1A4,2A1 ~ 2A4
    3. 8 个输出端也分为两路:1Y1 ~ 1Y4,2Y1 ~ 2Y4
    4. 两个控制信号:1G# 和 2G#
    5. 1G# 为低电平时,1Y1 ~ 1Y4 的电平与 1A1 ~ 1A4 的电平相同
    6. 2G# 为低电平时,2Y1 ~ 2Y4 的电平与 2A1 ~ 2A4 的电平相同
    7. 当 1G# 或 2G# 为高电平时,输出为高阻态

    常用的缓冲器还有:74LS240、241

    这里写图片描述
    在这里插入图片描述

    (3). 数据收发器 74LS245

    1. 74LS245 通常用于数据的双向传送、缓冲、驱动 等
    2. 16 个双向传送的数据端:A1 ~ A8,B1~ B8
    3. 两个控制端:使能端 G# ,方向控制端 DIR ,
      这里写图片描述
      在这里插入图片描述

    (4) 芯片应用举例

    1. 74LS373 用作输出接口
      在这里插入图片描述
      CPU 的双重总线 AD0 ~ AD15 已经分离为单一的信号线 ---- A0 ~ A15 (输出)、 D0 ~ D15 (双向),IOW# 由 M/IO# 和 WR# 信号组合而成。当 74LS373 的输出端 Q7 ~ Q0 为 “全高电平” 时,发光二极管不发光;当 Q7 ~ Q0 为 “全低电平” 时,所有发光二极管都发光。而 Q 端信号是由 74LS373 输入端在 G 端加上高电平时送上数据线 D7 ~ D0 ,若要使 L7 ~ L0 都发光,必需向 D7 ~ D0 写入全 “0” 信号,这可由如下指令完成
      MOV AL, 00H
      OUT Y3 # , AL
      OUT 指令产生 IOW# 为低电平,译码器输出 Y3 # 为低电平,或非门输出为正脉冲,373 的输入端 D7 ~ D0 出现 CPU 送出的数据 AL = 00H ,然后在 G 端的正脉冲作用下把 D7 ~ D0 的 00H 锁存输出,使 L7 ~ L0 全部点亮。这是最简单的无条件传送。
    2. 用于一般的总线驱动电路
      在 8086 系统中,由于存储器和 I/O 接口较多,必须在 CPU 总线和系统中心之间加接总线驱动电路,要求在加接驱动电路后 CPU 仍能进行常规的存储器读写、I/O 读写、中断响应、总线请求响应(即 HLDA 有效)以及在 RESET 有效时的相应操作。试设计一个总线驱动电路,要求被驱动的总线信号包括 20 位地址总线、 16 位数据总线以及控制总线中的 RD#、M/IO#、ALE、INTA#、BHE#。
      解题分析:
      (1)按题意,根据 8086 总线信号的特点,CPU 总线中的双重总线信号 A16 /S3 ~ A19 /S6 、AD0 ~ AD15 以及 BHE# /S7 中的地址信息 A19 ~ A0 以及 BHE# 必须要锁存和驱动,可以采用 3 片 74LS373 锁存器来实现上述信号的锁存和驱动,而 AD0 ~ AD15 同时通过数据收发器 74LS245 (2 片),用来驱动双向数据信号;而单向的控制信号 RD#、M/IO#、ALE、INTA# 等只需采用缓冲器 74LS244 即可。
      (2)确定了采用的主要器件后,连接中的关键问题是这三种器件中的控制信号如何连接。
      按题意,CPU

    6. 可编程中断控制器 8259A

    7. 可编程并行接口芯片 8255A

    1. 结构,由 4 部分构成:

    (1)数据总线缓冲器
    (2)3 个 8 位端口 PA、PB 和 PC
    通常 PA 口和 PB 口用作输入输出的数据端口,PC 口用作控制和状态信息端口,分为两个 4 位端口
    (3)A 组和 B 组的控制电路
    (4)读/写控制逻辑 在这里插入图片描述

    2. 8255A 的引脚

    8255A的引脚和功能
    8255A的端口功能选择

    3. 8255A 的工作方式:3种

    (1)方式0:基本输入/输出(A,B,C口均有)
    (2)方式1:选通输入/输出(A,B口具有)
    (3)方式2:双向选通输入/输出(A口具有)
    3 种工作方式可用软件编程对控制口设置来指定。三种基本的工作方式为:

    1. 工作方式 0 (基本输入输出方式)
      方式 0 不使用联络信号,也不使用中断,A 口和 B 口可定义为输入或输出口。
      C 口分成两个部分(高四位和低四位),C 口的两个部分也可分别定义为输入或输出。
      在方式 0,所有口输出均有锁存,输入只有缓冲,无锁存
      C 口还具有按位将其各位清 0 或置 1 的功能。
      常用于与外设无条件的数据传送或接收外设的数据。
    2. 工作方式 1 ( 选通输入输出方式)
      A 口借用 C 口的一些信号线用作控制和状态信号,组成 A 组
      B 口借用 C 口的一些信号线用作控制和状态信号,组成 B 组
      在方式 1 下,C 口的某些位被占用。
      A 组:PA 端口,PC7~PC4
      B 组:PB 端口,PC3~PC0
      方式 1 常用于中断传送和查询传送数据
      方式 1 的输出
      当 A 口工作于方式 1 且用作输出口时,
      C 口的 PC7 线用作输出缓冲器满 OBF 信号,
      PC6 用作外设收到数据后的响应信号 ACK ,
      PC3 用作中断请求输出信号线 INTR。
      当 B 口工作于方式 1 且用作输出口时,
      C 口的 PC1 线用作输出缓冲器满OBF 信号,
      PC2 用作外设收到数据后的响应信号 ACK ,
      PC0 用作中断请求输出信号线 INTR。
    3. 工作方式 2 (双向输入输出方式,A 口独有)
      方式 2 是 A 组独有的工作方式。外设既能在 A 口的 8 条引线上发送数据,又能接收数据。此方式也是借用 C 口的 5 条信号线作控制和状态线, A 口的输入和输出均带有锁存

    4. 8254A 的控制字 (初始化)

    有两种控制字:方式控制字、C 口置位/复位控制字
    用户可以通过程序把两个控制字送到 8255A 的控制寄存器,以设定 8255A 的工作方式和 C 口各位的状态

    1. 方式控制字(用于设定 3 个端口的工作方式,输入或输出)
      在这里插入图片描述
    2. C 口置位复位控制字
      在 8255A 芯片初始化时,C 端口置 1 /置 0 控制字可以单独设置 C 端口的某一位为 0 或某一位为 1。
      控制字的 D7 位为 “ 0 ” 时,是 C 端口置 1 /置 0 控制字中的标识位,这个控制字只对 C 口起作用,任何一位都可以通过按位置位/复位控制字来设置。
      注意:对 C 口的置位/复位控制不是把控制字送到 C 口,而是由控制口决定各位的状态,是把控制字送到控制口
      在这里插入图片描述
    3. C 端口的状态字
      当 8255A 的 A 口和 B 口工作在方式 1 或 A 口工作在方式 2 时,通过读取 C 口的数据,可以检测 A 口和 B 口的状态
      在这里插入图片描述
      读信号:
      IBF:(Input Buffer Full)输入缓冲器满信号,输出到外设。有效时表示,有一个外设来的数据锁存在 8255A 中,尚未被 CPU 取走,暂时不能接再收外设来的数据
      INTR:(Intrrupt Request)中断请求信号,输出到 CPU。向 CPU 发出中断请求
      INTE:A 组合 B 组都有中断允许触发器,用来控制是否允许 8255A 的中断请求信号 INTR 发出
      STB:(Strobe)选通脉冲信号,外设输入。表示外设已经准备好数据。
      写信号:
      OBF:(Output Buffer Full)输出缓冲器满信号,输出。
      ACK#:(Acknowledge)外设响应信号,外设输入。表示输出端口的数据已被取走,8255A 可以传送下一个数据

    8253-5(PIT)

    Programmable Interval Timer

    1. 可编程定时器/计数器

    1. 基本计数器
      在这里插入图片描述
      CR:16 位计数初值寄存器。存放计数初值,可通过程序来设定。
      CE:计数执行单元。16 位减 1 计数器,只对 CLK 脉冲计数,当减为 0 时,通过 OUT 输出指示信号。
      OL:计数输出锁存器。通常跟随 CE 的内容变化而变化,当接收到 CPU 发来的锁存命令时,就锁存当前的计数值而不跟 CE 内容变化。
      GATE:控制输入端。他有多种控制作用,如允许/禁止计数、启动/停止计数
      控制寄存器:控制定时器/计数器的工作方式,就是控制 CLK 脉冲和 GATE 门控信号适当配合来产生 OUT 端的输出信号的形状。

    2. 8253-5 的结构和功能

    8253-5 为具有 3 个独立的 16 位计数器,它可用程序设置成多种工作方式,按十进制计数或二进制计数,最高计数速率可达 2.6 Hz。
    在这里插入图片描述

    1. 引脚
      D7 ~ D0 : 8 条双向数据线
      WR#:写信号(输入)
      RD#:读信号(输入)
      CS#:片选信号(输入)
      A0 、A1 :片内寄存器地址信号(输入)
      CLK:计数输入
      OUT:输出信号
      GATE:门控信号
    2. 每个计数器有中 3 个寄存器
      控制寄存器:初始化时,将控制字寄存器内容写入该寄存器。
      计数初值寄存器:初始化时写入该计数器的初始值。
      减 1 计数寄存器:计数初值由计数初值寄存器送人减 1 计数寄存器,当计数输入端输入一个计数脉冲时,减 1 计数寄存器内容减 1 ,当减到 0 时,输出端输出相应信号表示计数结束。
    3. CPU 的访问和控制字
      在这里插入图片描述
      在这里插入图片描述
    4. 计数器启动方式
      计数启动方式由 GATE 信号的形式决定
      软件启动:GATE 端为高电平
      硬件启动:GATE 端有一个上升沿
    5. 工作方式
      (1)方式0 :计数结束中断
      在这里插入图片描述
      (2)方式 1 :可编程单稳
      OUT 输出的脉冲的宽度为:N x CLK
      在这里插入图片描述
      (3)方式 2 :频率发生器
      在这里插入图片描述
      (4)方式 3 :方波发生器
      在这里插入图片描述
      (5)方式 4 :软件触发选通
      方式 5 :硬件触发选通
      在这里插入图片描述
      (6)工作方式小结
      在这里插入图片描述

    3. 8253-5 计数器的初始化

    1. 写入方式控制字
      使用任一计数器通道,首先要向该通道写入方式控制字,以确定该通道的工作方式。虽然三个通道用的控制字端口地址是相同的,但三个控制字写入后却存入对应通道的控制寄存器中。
      在这里插入图片描述
    展开全文
  • PHY芯片

    千次阅读 2009-12-25 10:15:00
    一般指与外部信号接口的芯片。以太网PHY芯片 网络中最基础的部件是什么?不是交换机也不是路由器,而是小小的不起眼但又无处不在的网卡。如果在5年前,或许网卡与您无关,但在如今这网络的时代,无论是上网冲浪还是...
  • 第三章 1有一个具有20位地址和32位字长的存储器问 1 该存储器能存储多少个字节的信息 2 如果存储器由512K8位SRAM芯片组成需要多少芯片 3 需要多少位地址作芯片选择 解1 220= 1M 该存储器能存储的信息为1M32/8=4MB ...
  • MTK芯片资料分享,2018MTK芯片资料大全 估计想要MTK资料的人不在少数,然而小编却发现了这么一个论坛,叫做:闯客技术论坛。里边的MTK芯片型号资料居然有如此之多,而且还是我不想复制的情况下: MT2503 MT6737 MT...
  • 国外测试芯片安全工具

    千次阅读 2018-04-18 18:47:47
    芯片安全侧信道分析及故障注入系统 集成电路是一种微型电子器件或部件,通过采用一定的工艺,将一个电路中所需的晶体管、二极管、电容、电阻、电感等元件及布线互连在一起,制作在一块半导体基片上,然后封装在一个...
  • PHY芯片及网卡

    千次阅读 2015-11-24 16:58:54
    一般指与外部信号接口的芯片。  以太网PHY芯片   网络中最基础的部件是什么?不是交换机也不是路由器,而是小小的不起眼但又无处不在的网卡。如果在5年前,或许网卡与您无关,但在如今这网络的时代,无论是上网...
  • 合泰触控芯片开发

    千次阅读 2018-03-07 18:41:15
    本次公司项目,需要用到合泰的触控芯片BS82D20A-3,是一款8位,有20个触控引脚的国产芯片芯片提供商给了相关的触控程序软件包。软件包版本V101。开发过程 1.硬件 本身只是一个简单的墙板触控PCB,所以硬件及其...
  • FPGA芯片结构

    千次阅读 2013-11-15 20:37:33
    第2节 FPGA芯片结构 1.2.1 FPGA工作原理与简介 如前所述,FPGA是在PAL、GAL、EPLD、CPLD等可编程器件的基础上进一步发展的产物。它是作为ASIC领域中的一种半定制电路而出现的,即解决了定制电路的不足,又克服...
  • PHY芯片 AR8033 学习笔记

    万次阅读 2016-05-12 22:23:24
    芯片简介】  AR8033是Atheros公司的第4代10/100/1000Mbps速率以太网PHY芯片,可用于家庭网关、企业交换机、移动基站、光模块等设备。该芯片采用RGMII协议或SGMII协议与MAC芯片进行通信,只需要单一3.3V电源供电,...
  • RS485芯片介绍及典型应用电路

    万次阅读 多人点赞 2017-11-26 18:29:19
    一、RS485基本知识 RS-485接口芯片已广泛应用于工业控制、仪器、仪表、多媒体网络、机电一体化产品等诸多领域。...使用者在芯片的选型和电路的设计上应考虑哪些因素,由于某些芯片的固有特性,通信中有些故障甚至还...
  • M1 暴打 Intel?——这次的芯片有何不同

    万次阅读 多人点赞 2020-11-29 16:08:35
    1. 前言之前看到 M1 芯片出来之后,就想说些什么,结果光写 x86 和 ARM 就写了 4000 多字,考虑到文章篇幅,只得分为上下两篇,上一篇文章发出后有很多人表示非常喜欢,让我赶...
  • 3 章习题参考答案 3 章习题参考答案 1设有一个具有 20 位地址和 32 位字长的存储器问 该存储器能存储多少字节的信息 如果存储器由 512K8 位 SRAM 芯片组成需要多少片 需要多少位地址作芯片选择 解 (1) 该存储器能...
  • phy芯片的那些事儿

    万次阅读 多人点赞 2020-02-05 18:22:59
    收到MAC过来的数据(PHY没有帧的概念,都是数据而不管什么地址数据还是CRC),进行处理*,然后把并行数据转化为串行流数据,再按照物理层的编码规则把数据编码,再变为模拟信号把数据送出去。 实现CSMA/CD(多点接...
  • 第 3 章习题参考答案 1设有一个具有 20 位地址和 32 位字长的存储器 问 (1) 该存储器能存储多少字节的信息 (2) 如果存储器由 512K8 位 SRAM 芯片组成需要多少片 (3) 需要多少位地址作芯片选择 解 (1) 该存储器能存储...
  • 第三章作业习题答案

    千次阅读 多人点赞 2020-07-10 10:59:32
    (3) 需要多少位地址作芯片选择? 解:(1)∵ 2^20= 1M ∴ 该存储器能存储的信息为:1M×32/8=4MB  (2)(2^20/2^19)×(32/8)= 8(片) (3) 因扩展后共2组,因此,需要1位地址作为芯片选择。 2. ...
  • 初步认识 51 芯片

    千次阅读 2017-10-11 12:04:42
    初步认识 51 芯片 C 语言只是一种程序语言的统称,针对不同的处理器相关的 C 语言都会有一些细节的改变。编写 PC 机的 C 程序时,如要对硬件编程您就必须对硬件要有一定的认识,51 单片机编程就更是如此,因它的...
  • Marvell 88E1145PHY芯片的初始化配置

    万次阅读 2017-03-04 19:52:24
    PHY芯片的初始化配置有硬件配置和软件配置两种途径,当系统上电之后默认采用硬件配置的模式,如...本文主要说明硬件配置的方法,以Marvell 88E1145PHY芯片为例,除PHY芯片地址之外,其他内容均可以通过软件途径来更改。
  • 第三章习题参考答案

    千次阅读 2020-12-30 22:52:41
    ⑶需要多少位地址作芯片选择? 解:⑴存储容量=2^20×32/8 =4MB ⑵位扩展=32/8=4片,字扩展=2^20/512K=2组,共需8片。 ⑶需要1位地址线1:2译码作芯片选择。 ⒊ 用16K×8位DRAM芯片构成64K×32位存储器...
  • 芯片应用总结

    千次阅读 2016-08-23 11:21:11
    复杂程度多种多样,所以通信也就不一样,像单总线,i2c都有一定时间限制,对于不同的场合,不同的作用,运用不同的方式,操作芯片,无非是写数据,写命令(也即向寄存器中写入相应的数据,先指定寄存器地址,随后...
  • 第3章习题参考答案 PAGE 2 第3章习题参考答案 1设有一个具有20位地址和32位字长的存储器问 (1) 该存储器能存储多少字节的信息 (2) 如果存储器由512K8位SRAM芯片组成需要多少片 (3) 需要多少位地址作芯片选择 解 (1) ...
  • 访存控制信号,R/W读写命令信号(高电平为读,,低电平为写)。 现有下列存储芯片: ROM (2KX8位,4KX4 位,8KX8位),RAM (1KX4位,2KX8位,4KX8位),及74138译码器和其他门电路(门电路自定)。试从上述规格中选用...
  • STM32与DS1302设计时钟芯片,超详细

    万次阅读 多人点赞 2017-12-19 16:08:51
    DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数...
  • 【计算】需要多少片芯片

    千次阅读 2018-11-19 14:45:53
    题目:地址编号从80000H到BFFFFH且按字节编址的内存容量为( )KB,若用16K×4bit的存储器芯片构成该内存共需( )片。若用256K×8bit的存储器芯片,则需( )片芯片。 从80000H到BFFFFH,则其拥有的字节数为:...
  • Broadcom以太网交换芯片培训

    万次阅读 热门讨论 2011-06-15 14:58:00
    Broadcom以太网交换芯片培训---- 目录1、 交换芯片架构 2、 L2转发流程 2.1 L2转发原理 2.2 L2转发相关的表项 2.2.1 port表 2.2.2 egress port表 2.2.3 L2地址表 2.2.3 VLAN表 3、 L3转发流程 4、 L2组播转发流程 5...
  • USB转串行通信芯片FT2232

    千次阅读 2020-03-22 09:59:19
    USB转串行通信芯片FT2232
  • CC2530芯片资料

    千次阅读 2009-06-16 09:55:00
    原文地址:http://www.c51rf.com/download/read.aspx?id=87文件描述: 概述 ZigBee新一代SOC芯片CC2530是真正的片上系统解决方案,支持IEEE 802.15.4标准/ZigBee/ZigBee RF4CE和能源的应用。拥有庞大的快闪记忆体...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,357
精华内容 9,742
关键字:

地址作芯片选择