本帖最后由 丰年好大雪 于 2023-9-15 01:31 编辑
最后一代飞利浦CD-Pro2机芯使用了一种古老的双向串行接口,叫做DSA,这个总线的特点是比较类似今天仍然在使用中的SPI接口,但不一致。今天也没有太多的产品使用这种古老的芯片-芯片接口了,相比SPI接口来说DSA有诸多优点,比如允许仅用3根线就允许双向片选传输(SPI需要4根)、速度20M远超SPI的1.4M(实际使用中我达到过15M)。更何况为了研究CD-Pro2的外部控制必须从DSA入手,那就从这个古怪的接口入手吧。我翻译了飞利浦DSA文档的全部,试着把对于我制作CD机来说可能没什么用的部分省略或者去掉。
要搞懂其中许多概念,您需要有一些基础的单片机通讯知识,以及基本的二进制、十六进制换算的经验。可能随着编写会有需要修改帖子的需要,有错误或者不明请指出。
缩写解释:
TOC ——Table Of Contents目录
第一章 DSA 接口
DSA 接口是用于两个处理器之间通信的接口。 一个称为伺服处理器,另一个称为用户处理器。CD 模块中的伺服处理器控制所有伺服活动,如播放、暂停、跳跃、读取子代码等。用户处理器可以处理其他所有外部工作,比如按键、中断、控制屏幕、控制DAC芯片等等。用户处理器通过 DSA 接口控制伺服处理器。
对于CD模块中的 DSA 接口实现,16bit数据传输比较实用。 16bit数据包含一个8bit命令字节和一个8bit参数字节。在一个完整命令字符串中,首先是命令字节,然后是参数字节先后发送。参数字节的含义由命令字节决定。如果命令不需要参数字节,则将传输虚拟值(比如8个0)。
命令和数据字节发送MSB在前。所有数据字节都将以十六进制发送。比如发送十进制的12(命令字节)+8,您需要换算成14H和8H(程序员写法是0x14和0x08),单片机以00010100,00001000发送,共16bit。
两个处理器都可以向对方发送命令,而无需预先请求。这意味着比如每次CD时间长度改变时,比如跳到下个音轨,CD模块都会将新曲目相关数值自动发送到用户处理器。
第二章 DSA 接口规范 DSA 总线是一种异步、双向内部总线,设计用于两个微处理器之间的通信。 它由三个双向线路组成: · DATA - 用于启动同步和数据传输 · STB - 用于数据选通(STB 为低电平时 DATA 有效) · ACK - 用于启动同步、数据传输确认和通信确认
第三章 通讯说明 每次数据通信由三个阶段组成: · 启动同步 使发送器和接收器同步以进行数据传输 · 数据传输 借助选通信号和确认信号传输所有数据位 · 通信确认 接收器让发送器知道通信是否没有错误。 如果通信出现错误,则有可能重复执行,直到正常。当处理器想要传输数据时,它被称为发送器,它从同步阶段开始,传输数据,并根据请求最终接收通信确认。 启动同步后,另一个处理器会自动成为接收器。
1·开始同步 发送方下拉清零数据线,让对方芯片知道它想要发送一些数据。然后等待,直到接收到 ACK 线上的低电平作为来自识别了该消息的接收器的应答。(这一点略微类似DAC芯片控制广泛使用的IIC接口) 数据传输请求并已准备好。 然后发送器将DATA线设置为高电平并等待ACK线上的高电平。ACK线上的高电平意味着启动同步结束,发送器和接收器都准备好数据传输。 注意,有时两个处理器可能想要同时发送数据。 两者都拉低DATA 线并等待 ACK 线上的确认动作。因此,有必要在同步开始时为发射方设计软件超时逻辑。超时周期 (Tsyn) 过后,伺服处理器将 DATA 线设置为无效(高),并检查用户处理器是否正在生成同步信号(DATA 线保持低电平)。如果是,则首先接收数据。然后伺服处理器可以通过拉低数据线来尝试再次发送。 如果伺服处理器在已经有新数据要发送时无法通过同步阶段,则旧数据将被“覆盖”。
2·数据传输 在这部分通信中,所有数据位都将从发送器传输到接收器。发送器根据要发送的bit置位DATA 线。当 DATA 线电平稳定时,发送器拉低STB 线以告诉接收器 DATA 线上的信息有效。接收器在识别到 STB 线低电平状态后读取 DATA 线。 然后接收方清零ACK 线让发送器知道数据已被读取。发送器拉高STB 线并等待ACK 线高状态。当ACK线变高时,一个数据位被完全传输。一个数据传输阶段内传输的位数为16位。 如果伺服处理器无法在(Ttrf)内传输16个数据位,则将DATA和STB线设置为高并清零ACK线以进入通信阶段。
3·通讯确认(ACK) 总线上的尖峰可能导致发送器和接收器不同步。因此,有必要在每次数据传输后检查同步状态。该过程由发送器启动。 当发送器发送所有位后,发送器清零ACK 线。此时接收方应该已准确接收到指定的位数。如果接收器的bit计数器不等于此指定计数后,接收器下拉DATA 线,否则该线保持高电平。此后,接收器清零STB 线路。这意味着对于发送器来说,比较的结果在数据线上。发送器读取DATA 线,然后将ACK 线设置为高电平。这对于接收器来说意味着发送器读取了数据线。当接收器识别出 ACK 线为高,它将 DATA 和 STB 线设置为高。则现在所有通信均已完成,DSA 总线再次空闲。 如果通信出现错误,则发射机应从同步阶段开始重复(仅一次)最后一次通信(即有一个bit错误,就整个16bit数据重新发射)。 如果接收器在Tcom 内的通信确认阶段没有正确反应,伺服处理器(= 发送器)会将其解释为通信错误并将所有线路设置为高电平。DSA 通信的时序图在下列的图中说明:
同步动作:
数据传输动作:
确认动作:
超时定义:
超时定义时间表:
往往我们这些发烧友在DAC设置、控制LCD屏幕这些动作中,我们写单片机并不太重视超时,或者干脆把超时写一个自动挂起当作断点来使用。但对于CD机芯这种实时系统来说,鉴于1.4M每秒的数据流并不能让你慢悠悠的处理所有问题,因此设置超时动作(比如重写、报错、保护关机)非常重要。
3·DSA命令集 伺服处理器的命令分为三组: · 伺服命令(这些命令使得伺服状态发生变化) · 信息命令 · 模式设置 一条DSA命令由一个或多个DSA命令参数组成。每个DSA命令参数都有一个唯一的操作码,后跟参数。 当DSA命令由多个命令参数组成时,DSA命令将在收到最后一个(= 最高操作码)命令参数后执行。进入的顺序命令参数不固定,除了最后一个命令参数,因为它会触发命令执行。 3.1 供应商独特的DSA命令(没啥用) 供应商独特的命令是: 命令名称 命令操作码 保留 A0h - AFh
3.2 命令规则 规则 1:同组内的命令可以相互推翻(不额外通知命令重复)。这意味着当前的命令将被中止,并且开始执行刚刚接收到的命令。 规则 2:如果在执行伺服命令期间接收到信息或模式命令,则伺服处理器开始处理信息或模式命令并继续执行伺服命令。 规则 3:伺服命令优先于信息和模式命令。所有需要的操作都将后台完成。 规则 4:当两个命令已被接受并正在执行时,例如伺服命令( 第一个)和信息或模式命令(=第二个),第三个是信息或模式命令,则当前信息/模式命令将被终止,如果第三个命令是伺服命令,那么正在执行的两个命令都将被中止。
原则上,没有固定的命令序列来让 CD 模块执行操作。所有需要的操作都将后台完成。例如,在停止状态下播放曲目 10,只需调用 PLAY-TITLE 命令,值为 10 (0Ah)。
3.3 命令恢复 当(有效)命令执行失败时,必须通过重试同一命令至少两次来恢复。
3.4 DSA命令集表格 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 跳转时间/暂停/暂停释放
/起转/A-B点播放
/A-B点播放结束 | | | | | | | | 当前无碟/有碟/仓内碟片8cm /12 cm/CD碟/CD-RW碟/完整碟片/未写完碟片 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|