深入解析M68360QUADS:90年代嵌入式开发平台的设计哲学与实战

深入解析M68360QUADS:90年代嵌入式开发平台的设计哲学与实战

1. 项目概述与核心价值

如果你在90年代中后期从事过通信设备、工业控制或者高端嵌入式系统的开发,那么对摩托罗拉(后来的飞思卡尔)的MC68360 QUICC这颗芯片一定不会陌生。在那个ARM尚未一统江湖、PowerPC和MIPS群雄逐鹿的年代,QUICC以其高度集成的通信外设和强大的CPU32+内核,成为了路由器、交换机、网关以及复杂工业控制器中的明星方案。而M68360QUADS开发板,就是官方为这颗芯片量身打造的“终极游乐场”。它不是一块简单的评估板,而是一个完整的、面向严肃产品开发的应用开发系统

我手头这份1993年8月发布的硬件手册,总计超过100页,事无巨细地描绘了这块板卡的每一个细节。今天,我不只是带大家回顾这份文档,更想结合我当年在通信设备厂“啃”类似硬件的经验,把它掰开揉碎了讲清楚。为什么这块板子设计得如此复杂?它的每一个跳线、每一个PLD(可编程逻辑器件)背后的考量是什么?在真实的项目开发中,我们是如何利用它来调试底层驱动、验证硬件设计,甚至把它作为核心板集成到产品原型里的?通过这篇详解,我希望不仅能让你看懂这份手册,更能理解那个时代顶尖嵌入式开发平台的设计哲学和实战用法。

2. 开发板整体架构与设计思路拆解

2.1 核心定位:不止于评估,更是开发平台

M68360QUADS的全称是“QUICC应用开发系统”。这个名字就揭示了它的定位:它不是一个让你点个灯、调个串口就完事的入门套件,而是一个用于开发最终产品的硬件平台。它的设计目标很明确:

  1. 提供完整的QUICC运行环境:包含主频25MHz的MC68360、1MB带校验的DRAM、512KB Flash、128KB Boot EPROM、256字节EEPROM,构成了一个最小可运行系统。
  2. 暴露所有处理器信号:通过两个96针的扩展连接器(P1, P2)和六个逻辑分析仪连接器(PD1-PD6),将主QUICC的所有引脚(地址、数据、控制、端口)无缓冲地引出来。这意味着你可以把自己的应用电路板直接插上去,利用QUADS的稳定电源、时钟和调试环境来调试你自己的硬件。
  3. 集成丰富的通信外设:板上通过另一颗QUICC(作为“从设备”,CPU核心被禁用)提供了以太网(AUI和10BASE-T)、RS-232串口、AppleTalk(LocalTalk)接口。这让你能在硬件层面直接开发和测试网络协议栈。
  4. 支持多种开发与调试模式:既可以通过ADI(应用开发接口)并行端口连接主机(Sun工作站或IBM PC)进行交叉开发和控制,也可以通过串口连接VT100终端进行独立操作。同时,板载的BDM(后台调试模式)控制器接口(P9)允许QUADS去调试其他板子上的QUICC芯片。

这种“核心板+底板”的思想非常超前。QUADS本身就是一块高度可靠、经过充分验证的“核心板”,开发者只需专注于自己应用特定的“底板”电路。这极大地降低了复杂系统硬件开发的门槛和风险。

2.2 双QUICC设计:精妙的资源分工

手册中最精妙也最令人困惑的设计,莫过于板上使用了两颗MC68360芯片:一颗作为主QUICC(Master),运行用户程序;另一颗作为从QUICC(Slave),其CPU核心被硬件禁用,仅作为“超级外设控制器”使用。

为什么这么设计?这背后是QUICC芯片本身架构的一个特点:它的通信控制器(SCC、SMC)、DMA、内存控制器等功能模块,即使在不运行CPU程序的情况下,也可以独立工作并由另一颗处理器通过总线来操控。QUADS的设计者巧妙地利用了这一点:

  • 主QUICC(U8):专注于执行应用程序。它的所有引脚都被引出到扩展口,几乎“净身出户”,方便用户连接自定义外设。
  • 从QUICC(U4):被配置为一个“外设服务芯片”。它负责管理板上所有复杂的外设和接口:
    • DRAM控制器:控制那块1MB(可升级至8MB)的SIMM内存。
    • 片选与DSACK发生器:为Flash、状态寄存器等板上设备产生片选和应答信号。
    • 并行端口(ADI):实现与主机高速通信的并口逻辑。
    • 串口(UART):提供调试终端接口。
    • AppleTalk控制器:连接Macintosh网络。
    • BDM控制器:控制外部QUICC的调试接口。
    • 以太网控制器:通过外接MC68160 EEST芯片提供以太网MAC层功能。
    • SPI EEPROM接口:管理板载配置存储器。
    • 通用I/O:连接各种开关、LED和配置信号。

这种设计带来了几个巨大优势:

  1. 资源最大化:主QUICC的所有片选(CS0~-CS7~)和端口(PA, PB, PC)都可以完全留给用户应用,不会被板载外设占用。
  2. 性能隔离:网络通信、内存刷新等耗时操作由从QUICC的专用DMA处理,不占用主CPU的总线周期和中断资源。
  3. 设计简化:许多复杂的接口逻辑(如ADI握手、中断仲裁)可以通过编程从QUICC的灵活I/O和定时器来实现,减少了外围逻辑芯片的数量。

实操心得:理解“CPU禁用”模式手册中提到了通过一个专用的PAL器件(SP1)来控制从QUICC的CONFIG引脚,使其在硬复位期间先使能CPU(超过32个时钟周期),然后在复位结束前将其配置为“禁用CPU”模式。这个过程对软件是透明的。在编程时,你只需像访问一个多功能外设芯片一样,通过特定的内存地址(MBAR=0x00022001)去配置和使用从QUICC的各项功能。这要求开发者必须仔细阅读并严格遵循第3.5节中对从QUICC各个寄存器的初始化序列,任何步骤错误都可能导致内存无法访问、网络不通或调试功能失效。

2.3 内存映射与地址空间规划

QUADS的内存映射是软件得以运行的基础。手册中的表3-2是核心,但理解其背后的逻辑更重要。

内存布局解析:

  • 0x00000000 - 0x0001FFFF(128KB)Boot EPROM。这是系统启动后第一条指令的所在地。CPU32+内核从0x0地址开始取指。这块EPROM存储了摩托罗拉提供的调试监控程序CPU32Bug以及可能的用户引导程序。它通过主QUICC的CS0~信号选中。
  • 0x00020000 - 0x00021FFFF(8KB)主QUICC内部寄存器区。这是通过设置主QUICC的MBAR(模块基地址寄存器)为0x00020001映射而来的。所有对主QUICC内部串口、定时器、中断控制器的操作都发生在这个区域。
  • 0x00022000 - 0x00023FFFF(8KB)从QUICC内部寄存器区。地址由从QUICC的MBAR(0x00022001)决定。对以太网、串口、ADI端口、DRAM控制器的配置都通过访问这个区域完成。
  • 0x00024000 - 0x00025FFFFQUADS状态寄存器。一个16位只读寄存器,通过从QUICC的CS4~访问。它提供了板卡当前状态的快照,如数据总线宽度(32/16位)、中断使能、DRAM SIMM类型检测码、ADI主机连接状态、串口终端连接状态等。软件通过读取它来适应不同的硬件配置。
  • 0x00026000 - 0x00027FFFF清除NMI状态寄存器。向这个8位地址执行写操作(无论写什么值),可以清除由ABORT开关或主机NMI产生的中断锁存器。
  • 0x00028000 - 0x00029FFFF使能A31-A28地址线寄存器。如果配置开关选择将主QUICC的A31-A28用作地址线(而非写使能),向此地址写入将使能这些地址线的输出驱动器。
  • 0x00080000 - 0x000FFFFF(512KB)Flash存储器。用于存储用户应用程序。通过从QUICC的CS3~选中。
  • 0x00400000 - 0x004FFFFF(1MB)DRAM。系统主内存,地址范围随SIMM容量变化(最大可到0x00BFFFFF, 8MB)。通过从QUICC的RAS1~RAS2~控制。
  • 0xF0000000 - 0xFFFFFFFF从QUICC中断应答空间。当主QUICC响应一个外部中断(如来自从QUICC)并发出中断应答周期时,从QUICC会在这个地址空间内返回一个中断向量号。这是一个关键细节:这意味着用户扩展板上的中断设备不能使用向量中断,而必须使用自动向量(Auto-vector)模式,因为向量中断的应答空间已经被从QUICC占用。

地址译码逻辑的精髓:板上没有使用专门的CPLD或FPGA进行全局地址译码,而是巧妙地利用了从QUICC可编程的片选发生器。CS0~CS7~这两个片选信号被赋予了特殊的“守卫”职责:

  • CS0~被编程为覆盖Boot EPROM的地址范围。当访问EPROM时,CS0~有效。
  • CS7~被编程为覆盖除EPROM之外的所有板上资源地址范围(0x00020000 - 0x00BFFFFF)。当访问板上资源(如从QUICC寄存器、Flash、状态寄存器)时,CS7~有效。
  • 关键逻辑CS7~/CS7)信号,与高位地址线A28-A31的“或”结果(A28_31信号),共同输入到数据总线控制器(U51, 一个GAL22V10)。如果/CS7为高A28_31为低,则表示当前访问目标是板上资源,数据总线收发器的方向由从QUICC控制;否则,表示访问目标是用户扩展板,数据总线方向由主QUICC或外部总线主设备控制。这套逻辑实现了板上资源和用户外设地址空间的自动、无缝隔离。

3. 核心功能模块详解与实操要点

3.1 电源、时钟与复位子系统

电源设计:

  • +5V @ 5A(最大):这是板卡的主电源。连接器P11有三个端子:两个GND,一个VCC。强烈建议将两个GND端子都连接到电源公共端,以提供低阻抗回流路径,减少噪声。
  • +12V @ 1A(最大):可选电源,通过P12连接。主要用于两个目的:
    1. 为以太网AUI接口(P7)提供“ vampire power ”(如果连接的AUI集线器需要)。
    2. 为Flash存储器(U72-U75)编程提供Vpp高压(+12V)。重要提示:如果你不需要使用AUI接口,也不打算在板擦写Flash,那么可以不接+12V电源,板卡正常工作。
  • 保护措施:+5V和+12V输入回路均串联了快恢复二极管(D1, D2)防止反接,并配有保险丝(F1-F4)。上电前务必检查保险丝是否完好。

时钟系统:

  • 主时钟由50MHz的振荡器(U27)产生,经主QUICC内部PLL倍频后,为CPU核心提供25MHz时钟(CLK1, CLK2)。这个25MHz时钟也作为板上的系统时钟。
  • 通过Dip-Switch U52的第6位(Enable Clock),可以选择时钟源。如果置为OFF,则禁用板载振荡器,用户必须通过扩展连接器P1的CLK1/CLK2引脚从外部提供25MHz时钟。这在多板同步或使用高精度外部时钟源时有用。
  • 实操注意:更换振荡器频率会影响整个系统的时序。如果你需要更换U27,必须同步修改主、从QUICC的PLL配置寄存器(PLLCR),并重新评估DRAM、Flash等存储器的访问时间是否满足新频率下的要求。

复位与调试控制:

  • 硬复位开关(SW1):必须与软复位开关(SW2)同时按下才生效。这是一个防误触设计。硬复位会初始化所有逻辑和QUICC芯片。
  • 软复位开关(SW2):单独按下即可触发。QUICC芯片进入软复位状态,部分寄存器被重置,但内存内容可能得以保留。
  • 中止开关(SW3):产生一个到从QUICC的中断请求,从QUICC再将其转换为对主QUICC的7级中断。CPU32Bug监控程序会捕获此中断,暂停用户程序执行,进入调试状态。这个功能需要在软件中使能(配置从QUICC的相应端口和中断控制器)。
  • 状态LED
    • LD1(HALT, 红):主QUICC的HALT~引脚为低时点亮,表示处理器暂停。
    • LD2(RUN, 绿):连接到AS~(地址选通)信号。闪烁表示总线有活动,程序正在运行。
    • LD3-LD8:以太网状态指示灯(发送、接收、冲突、链路、极性、Jabber),由MC68160 EEST芯片直接驱动,非常直观。

3.2 存储子系统:DRAM, Flash与EEPROM

DRAM(动态内存)配置:

  • 板载标准为1MB(256K x 36bit, 带奇偶校验)的SIMM模块(U71)。手册明确指出可以升级到更高容量的模块,如MCM36200(2M x 36bit, 8MB)。
  • 容量与时序识别:SIMM模块上的“存在检测”引脚(SIMM1-SIMM4)被连接到状态寄存器(U61, U39)的比特4-7。CPU32Bug软件或你的启动代码必须在上电后读取这些引脚,以确定安装的SIMM类型和访问时间(70ns, 80ns, 100ns),并据此正确初始化从QUICC的DRAM控制器寄存器(GMR, BR1/OR1, BR2/OR2)。表4-1是关键的对照表。
  • 初始化顺序:在设置了DRAM控制寄存器后,必须对每个RAS行(RAS1~和/或RAS2~)的地址空间执行至少8次访问,以完成DRAM的初始化序列。这是许多DRAM控制器(包括QUICC的)的标准要求,手册3.5.9和3.5.10节特别强调了这一点,忽略它会导致内存访问不稳定。
  • 禁用DRAM:通过U52的第3位(Enable DRAM)可以禁止从QUICC初始化DRAM。这样,0x00400000开始的地址空间就释放给了用户扩展板。但请注意CPU32Bug调试监控程序本身需要约8KB的RAM空间(位于0x00400000)。如果你禁用板载DRAM,必须在扩展板上提供这片RAM,否则调试器无法运行。

Flash存储器编程:

  • 四片28F010(128KB每片)组成32位宽的512KB Flash(U72-U75)。这种芯片是NOR Flash,支持芯片内编程(ICP),无需专用编程器。
  • 编程流程通常如下:
    1. 通过串口或以太网,将新的二进制镜像下载到DRAM中。
    2. 连接+12V电源到P12(提供Vpp编程电压)。
    3. 运行位于Boot EPROM中的Flash擦除/编程例程。该例程会通过从QUICC的CS3~对Flash发送特定的命令序列(如解锁、擦除、编程、校验)。
  • 关键隐患:Flash编程期间必须保证电源绝对稳定,特别是+12V的Vpp。任何波动都可能导致编程失败甚至损坏Flash区块。建议使用线性稳压电源而非开关电源为P12供电。编程软件应有超时和校验重试机制。

串行EEPROM:

  • 使用MCM2814 SPI EEPROM(U33),容量256字节。通过从QUICC的SPI接口(PB0-PB3)访问。
  • 典型用途:存储板卡序列号、MAC地址(用于以太网)、网络配置参数、校准数据等需要在断电后保存,但又不需要频繁修改的小量数据。
  • 硬件写保护:MCM2814本身具有上电/掉电写保护电路,防止意外写入。在软件层面,写操作前需要发送特定的“写使能”指令,之后还有自动的写周期等待时间(典型值5ms),编程时需增加延时或轮询“写完成”状态位。

3.3 通信接口实战解析

1. 以太网接口(MC68160 EEST):这是板卡上最复杂的接口之一。从QUICC的SCC1(串行通信控制器1)被配置为以太网控制器,与摩托罗拉的MC68160 EEST(增强型以太网串行收发器)芯片连接,后者提供物理层(PHY)功能。

  • 双介质接口
    • AUI(P7, 15针D型):用于连接10BASE5(粗缆)或10BASE2(细缆, 需外接MAU)以太网。需要+12V供电(由板卡提供)。
    • 10BASE-T(P8, RJ-45):用于连接双绞线网络。这是90年代后期开始流行的形式。
  • 接口选择:通过配置从QUICC的Port C引脚(TPEN, APORT)来控制EEST芯片的端口选择逻辑。软件可以设置为自动检测(优先TP)或手动强制。
  • LED指示:EEST直接驱动6个状态LED(LD3-LD8),包括TX/RX活动、冲突(CLSN)、链路完整性(TPLIL)、双绞线极性错误(TPPLR)、Jabber错误(TPJABB)。调试网络不通时,首先看LD6(链路灯)是否常亮,如果不亮,检查网线或对端设备。
  • 软件配置要点:除了配置SCC1为以太网模式、设置波特率(10Mbps)外,还必须正确初始化与EEST相连的从QUICC Port A和Port C的引脚功能(参见手册表4-2, 4-4),例如将PC2(EEST_CS2)拉低以使能EEST,将PC3(TPEN)置为高或低来选择端口。

2. 串行端口(RS-232)与AppleTalk:

  • RS-232(P5):使用从QUICC的SCC3, 经过MC145407电平转换器(U23)。这是一个标准的全调制解调器(Full Modem)接口,包括DTR, DSR, RTS, CTS, CD等信号。注意:手册指出RTS(Pin 7)在板内未连接。在连接终端或主机时,通常只需要连接TX(Pin 2), RX(Pin 3)和GND(Pin 5)即可进行三线制通信。DTR(Pin 4)被软件用于检测是否有终端连接。
  • AppleTalk(P6, Mini-DIN):使用从QUICC的SCC2, 经过MC34050驱动器(U29)。AppleTalk是苹果电脑早期使用的局域网协议。如今这个接口可能已不常用,但其硬件实现(差分收发)是研究串行通信的一个好例子。

3. ADI(应用开发接口)并行端口:这是QUADS与主机(如运行调试软件的PC或Sun工作站)进行高速数据交换和控制的通道。

  • 工作原理:ADI是一个基于8位数据总线(PD0-PD7)和若干握手信号(REQ, ACK, BRK等)的异步并行接口。它支持多板寻址(通过U46设置0-7的地址),一台主机可控制最多8块QUADS板。
  • 信号流解析:手册附录B详细描述了主机写、QUADS写、中断等握手时序。核心在于理解几个关键信号:
    • ADS_SEL0-2:主机发出的板卡选择地址。
    • HOST_REQ/ADS_ACK:主机->QUADS数据传输握手。
    • ADS_REQ/HST_ACK:QUADS->主机数据传输握手。
    • HOST_BRK~/ADS_INT/INT_ACK:QUADS中断主机的握手链。
  • 实战意义:通过ADI端口,主机可以:
    • 将编译好的程序下载到QUADS的DRAM或Flash。
    • 读取/修改QUADS的内存和寄存器。
    • 控制QUADS运行、暂停、设置断点。
    • 接收QUADS发出的调试信息(如printf输出)。 这相当于一个高性能的“JTAG+串口”二合一调试接口。在1990年代,其速度远超串口,极大提升了开发效率。

4. BDM(后台调试模式)接口:

  • 主QUICC BDM(P3):这是一个接口。你可以通过这个8针接口,用外部的BDM调试器(如Motorola的M68ICD32)来调试QUADS上的主QUICC。这对于底层硬件调试、崩溃分析非常有用。
  • 从QUICC BDM控制器(P9):这是一个接口。当QUADS上的软件配置好从QUICC的Port B相应引脚后,可以通过这个接口去调试另一块目标板上的QUICC芯片。这使QUADS本身成为一个强大的在线仿真器(ICE)。你需要制作一根连接线,将P9的BDMCLKBDMFRZBDMRSTBDMDSIBDMDSO信号连接到目标QUICC的对应引脚(BKPT~, FREEZE, RESETH~, IFETCH~, IPIPE0~)。

3.4 扩展连接器与逻辑分析仪接口

这是QUADS设计中最体现其“开发系统”价值的部分。

扩展连接器P1和P2:

  • 这两个96针DIN连接器几乎复制了主QUICC的所有信号(除了少数电源和接地)。包括:
    • 32位地址总线(A0-A31)
    • 32位数据总线(D0-D31)
    • 所有控制信号(AS~, R/W~, DS~, FC0-FC3, SIZ0/1, DSACK0/1~, BERR~等)
    • 所有端口信号(PA0-PA15, PB0-PB17, PC0-PC11)
    • 所有片选和总线仲裁信号(CS0~-CS7~, BR~, BG~, BGACK~)
    • BDM和时钟信号
  • 电气特性:这些信号是无缓冲直接引出的。这意味着:
    • 优势:信号干净,延迟极小,便于用户板精确采样。
    • 风险:用户板的负载(电容)会直接加到主QUICC的引脚上。如果用户板布线过长或负载过重,可能导致信号完整性变差。建议:在用户板上靠近接口处为关键信号(如时钟、地址线)添加串联电阻(如22-33欧姆)以阻尼反射。
  • 总线仲裁:QUADS支持外部总线主设备。用户板可以通过P1上的EXTBR~(外部总线请求)和EXTBG~(外部总线授权)信号申请总线控制权。板上的总线仲裁器(U42, PAL16R4)会按照优先级(从QUICC > 外部主设备 > 主QUICC)进行仲裁。这在开发带有DMA或另一处理器的复杂子系统时非常有用。

逻辑分析仪接口PD1-PD6:

  • PD1-PD5是标准的20针双排接口,兼容惠普(HP)逻辑分析仪探头。它们将地址、数据、控制总线信号分组引出,方便连接。
  • PD6是一个96针的DIN接口,提供了主QUICC剩余的所有信号(主要是端口和特殊功能引脚)。
  • 使用技巧:在调试复杂的总线交互、中断冲突或时序问题时,逻辑分析仪是无价之宝。你可以同时捕获地址、数据、控制线和关键端口信号,分析指令流、数据流和硬件事件的精确时序关系。例如,当系统异常挂起时,可以通过分析HALT~BERR~IPIPE等信号,快速定位是总线错误、非法指令还是硬件断点触发。

4. 软件初始化与寄存器配置实战指南

手册第3章是软件工程师的“圣经”。它详细列出了主、从QUICC上电后必须配置的寄存器清单。这里我结合经验,提炼出关键步骤和陷阱。

4.1 主QUICC初始化流程

  1. 设置MBAR(模块基地址寄存器):这是第一步,也是最重要的一步。必须将主QUICC的MBAR(位于CPU空间地址0x0003FF00)设置为0x00020001。这将内部寄存器映射到0x00020000开始的位置。注意:QUICC的MBAR要求地址是512字节对齐的,所以最低位是保留的,写入0x00020001实际上设置了基地址为0x00020000。
  2. 配置系统保护与看门狗(SYPCR):建议初始化为0x37。这将禁用软件看门狗(在调试阶段),但使能总线监视器(Bus Monitor)。总线监视器能在总线访问无响应时产生BERR~信号,防止系统死锁。
  3. 配置端口E引脚分配(PEPAR):这决定了A31-A28是作为地址线还是写使能信号(W0~-W3~)。这需要与U52 Dip-Switch的第5位(A31:28配置)设置一致。如果开关设为ON(地址线模式),则PEPAR相应位应清零;如果设为OFF(写使能模式),则应置位。在配置完成前,这些引脚处于高阻态
  4. 配置自动向量寄存器(AVR):必须设置为0x84。这告诉主QUICC,当发生2级和7级中断时,使用自动向量(从固定向量表获取地址),而不是从外部设备读取向量号。这是因为从QUICC产生的外部中断(如ABORT)和用户扩展板的中断,都无法在中断应答周期提供向量号(向量空间被从QUICC占用)。
  5. 配置片选0(BR0/OR0):用于访问Boot EPROM。BR0=0x00000003, OR0=0x5FFE0004。这定义了128KB的8位异步存储器空间,位于地址0x0, 访问周期为4个时钟(等待状态)。

4.2 从QUICC初始化流程(核心难点)

从QUICC的初始化更为复杂,因为它的角色是一个多功能外设控制器。

  1. 使能MBAR访问(MBARE):由于从QUICC的MBARE~引脚被连接到了数据线D30, 在访问其MBAR之前,必须先向MBARE寄存器(位于CPU空间0x0003FF08)写入0xBFFFFFFF(32位模式)或0xBFFF(16位模式)。这是一个关键且容易遗漏的步骤。在16位模式下,每次写MBAR前都必须先写MBARE。
  2. 设置从QUICC的MBAR:写入0x00022001, 将其内部寄存器映射到0x00022000。
  3. 配置DRAM控制器(GMR, BR1/OR1, BR2/OR2)
    • 读取状态寄存器:获取SIMM1-SIMM4的状态,确定DRAM类型和速度。
    • 设置GMR:根据DRAM类型和速度,选择正确的刷新周期、周期长度、端口大小(32位)、禁用奇偶校验等。例如,对于80ns的MCM36256, GMR应设为0x17A40380。
    • 设置BR1/OR1(RAS1~):BR1通常为0x00400005。OR1根据DRAM类型和速度设置,例如对于80ns 256Kx36, OR1=0x2FF00009。
    • 设置BR2/OR2(RAS2~):仅当使用双Bank的SIMM(如MCM36512, MCM36200)时才需要配置。
    • 执行8次伪读:对BR1/BR2定义的地址空间进行至少8次读操作,以初始化DRAM。
  4. 配置Flash片选(BR3/OR3):BR3=0x00080009, OR3=0x3FF80000。定义了512KB的32位异步存储器空间,位于0x00080000。
  5. 配置其他片选
    • BR4/OR4(CS4~):状态寄存器。BR4=0x00024003, OR4=0x0FFFE002。
    • BR5/OR5(CS5~):清除Abort/NMI寄存器。BR5=0x00026001, OR5=0x0FFFE004。
    • BR6/OR6(CS6~):使能A31-A28地址线寄存器。仅在A31-A28用作地址线时需要。BR6=0x00028001, OR6=0x0FFFE004。如果用作写使能,建议将BR6设为0x00028000以禁用此片选,避免误访问
    • BR7/OR7(CS7~):“守卫”片选。BR7=0x00000001, OR7=0xF0000006。它覆盖了除板上资源外的所有地址空间,用于控制数据总线方向。
  6. 配置端口功能:这是最繁琐但至关重要的一步。必须严格按照手册3.5.16-3.5.27节的表格,设置Port A, B, C的ODR(开漏), DAT(数据), DIR(方向), PAR(引脚分配), SO(特殊选项)寄存器。一个引脚配置错误就可能导致以太网不工作、串口无输出或ADI通信失败。建议将这部分代码封装成函数,并添加详细的注释

4.3 16位模式与32位模式的区别

通过U52的第8位(Data Bus Configuration)或扩展口信号,可以设置主QUICC工作在16位数据总线模式。

  • 硬件差异:在16位模式下,数据总线控制器(U51)会负责32位/16位数据的交换和字节使能信号的生成。
  • 软件影响
    1. 中断向量:在16位模式下,主QUICC无法读取从QUICC在中断应答周期(IACK)中提供的向量号。因此,必须使用自动向量(AVR)功能来处理所有外部中断(2级和7级)。
    2. MBARE访问:如前所述,每次写从QUICC的MBAR前,都必须先进行一次16位的MBARE写操作。
    3. 性能:显然,32位访问比16位访问效率高一倍。除非你的外设是16位的,否则应优先使用32位模式。

5. 常见问题排查与调试技巧实录

基于这份手册和实际使用经验,以下是一些典型的“坑”和解决方法:

问题1:上电后无任何反应,RUN灯不闪。

  • 检查:+5V电源是否接反?保险丝F1, F2是否熔断?用万用表测量板上关键芯片的VCC对地电压。
  • 检查:复位电路。测量复位开关附近的信号,硬复位后RESETH~应保持低电平足够长时间(手册未给出具体值,但通常>200ms)。
  • 检查:时钟。用示波器测量主QUICC的CLK1/CLK2引脚,应有25MHz方波。如果没有,检查U27振荡器及周围电路。
  • 检查:Boot EPROM。确保U48芯片插紧,型号正确(27C010)。可以用编程器读取其内容,确认前几个字节是有效的68000系列指令(如0x6000 FE00表示BRA $FE00)。

问题2:通过串口连接终端,但无输出或乱码。

  • 检查:线序。确认使用的是直连线还是交叉线。QUADS的P5是DTE(数据终端设备)接口。连接PC(也是DTE)通常需要交叉线(2-3对调)。最简单的办法是用一个万用表测通断。
  • 检查:波特率。CPU32Bug默认的波特率可能是9600, 8N1。确认终端软件设置匹配。
  • 检查:从QUICC的SCC3配置。确认Port A的引脚4, 5被正确配置为SCC3的RXD和TXD(PAPAR寄存器),并且SCC3本身被初始化为UART模式,波特率发生器设置正确。
  • 检查:电平转换芯片U23(MC145407)的供电和信号。

问题3:无法通过ADI端口与主机通信。

  • 检查:地址设置。确认QUADS板上U46 Dip-Switch的1-3位设置与主机软件中设置的从机地址一致。
  • 检查:电缆。确保37针扁平电缆连接牢固,没有针脚弯曲。
  • 检查:主机ADI板卡安装。确认在IBM-PC上I/O地址无冲突(默认0x100-0x102),在Sun工作站上SBus插槽识别正常。
  • 检查:握手信号。用逻辑分析仪抓取HOST_REQADS_ACKADS_REQHST_ACK等信号,对照附录B的时序图,看握手是否完成。
  • 检查:从QUICC的Port B配置。Pins 10-17用于ADI数据总线,必须正确配置为I/O方向(PBDIR寄存器)。

问题4:以太网无法连接,链路灯不亮。

  • 检查:物理连接。对于10BASE-T, 使用直通网线连接交换机或集线器。对于AUI, 确认MAU或收发器已正确连接并供电。
  • 检查:端口选择。确认软件已将EEST配置为正确的端口(TP或AUI),并且相应的LED(LD6 for TP Link)有反应。
  • 检查:从QUICC与EEST的连接。测量P10测试点上的关键信号,如Ethernet_TXEthernet_RXTENARENA等,看是否有活动。
  • 检查:EEST配置。通过从QUICC的Port C配置CS2TPENAPORTTPAPCE等引脚,确保EEST处于正确的工作模式。

问题5:扩展板上的内存或外设无法访问。

  • 检查CS7~A28_31逻辑。这是区分板上/板外访问的关键。用逻辑分析仪观察在访问你的外设地址时,CS7~(应无效,高电平)和A28_31(取决于你的地址)的状态。如果CS7~为低,说明你的地址落入了板上资源的范围,需要调整你的译码逻辑或QUADS的片选设置。
  • 检查:总线仲裁。如果你的外设是总线主设备,确保它正确使用了EXTBR~EXTBG~BGACK~信号,并遵循总线协议。
  • 检查:时序。QUICC的总线周期是异步的,依赖DSACK~信号结束周期。确保你的外设能在合理的时间内产生DSACK0~DSACK1~响应,否则总线监视器会超时并产生BERR~

问题6:程序在Flash中运行不稳定。

  • 检查:Flash访问时序。从QUICC的CS3~对应OR3寄存器。确认OR3中的访问周期数(手册中为0个等待状态,SCY=0)是否满足你的Flash芯片速度(板载28F010-120是120ns)。在25MHz(40ns周期)下,0等待状态意味着40ns访问时间,对于120ns的Flash来说绝对不够!这很可能是一个笔误或需要根据实际芯片调整。我强烈建议增加等待状态,例如设置SCY=4(增加4个周期),使访问时间达到200ns。修改OR3的值,比如从0x3FF80000改为0x3FF8000C(假设SCY在比特19-16)。
  • 检查:编程是否完整。擦除后是否进行了空白检查?编程后是否进行了校验?建议在编程算法中加入多重校验。
  • 检查:代码是否在DRAM中运行正常。先将代码加载到DRAM中运行测试,排除软件本身的问题。

这份M68360QUADS硬件手册不仅仅是一份连接器定义和寄存器列表,它更是一部展现了90年代高性能嵌入式系统设计典范的教科书。从双处理器分工协作的精妙构思,到利用可编程逻辑实现灵活的总线控制,再到为开发者预留的丰富调试接口,无不体现着以“开发效率”和“系统可扩展性”为核心的设计理念。即使在今天,其设计思想——如核心板/底板分离、多功能调试接口、硬件资源虚拟化——依然具有很高的参考价值。对于想要深入理解经典嵌入式系统硬件架构,或者正在维护、升级基于QUICC平台遗产系统的工程师来说,这份手册值得反复研读。