CXD2678 and CXD2680 - MiniDisc-wiki/md-firmware GitHub Wiki
The CXD2678 and CXD2680 SoCs are the last generations of Non-HiMD NetMD capable SoCs for portable MD recorders. They are the successor to the Type-R CXD2677. The CXD2678 was only used in the MZ-N10 and was replaced by the CXD2680.
The main difference (that we know of) between both SoCs is that the CXD2678 has 8MiB of DRAM and the CXD2680 only 2MiB.
Specs
|
|
CPU core |
ARMv4t, probably ARM7TDMI* based on Sony's SR11 cores |
Flash size |
640KiB |
SRAM size |
36KiB |
DRAM size |
2MiB (CXD2680), 8MiB (CXD2678) |
NetMD |
Yes |
Codec version |
Type-S |
* The CPU does not have the typical co-processor interface for processor identification with MIDR, ruling out other cores
Memory Map
Start |
End |
Description |
0x00000000 |
0x0009FFFF |
Flash |
0x02000000 |
0x02008FFF |
SRAM |
0x03000000 |
0x0300FFFF |
Peripherals A |
0x0301FF00 |
0x0301FFFF |
Peripherals ? |
0x03800000 |
0x0380FFFF |
Peripherals B |
0x03F00000 |
0x04000000 |
Unknown, device freezes on access |
Block Diagram
Based on random resources, educated guesses, and firmware (and probably not fully correct):
https://raw.githubusercontent.com/Sir68k/md-firmware/main/wiki/cxd2680.svg
Peripheral Map
0x03000000 - 0x0300FFFF
Start |
End |
Description |
Notes |
03000000 |
030000FF |
General/interrupts |
|
03000200 |
030002FF |
General/interrupts |
IRQ/FIQ status registers here, containing reason for interrupt |
03001000 |
030013FF |
GPIO |
|
03002000 |
030020FF |
GPIO w A/D converter |
|
|
|
|
|
03003000 |
030030FF |
SPI0 control |
|
03003100 |
030031FF |
SPI0 buffer |
|
03003200 |
030032FF |
SPI1 control |
|
03003300 |
030033FF |
SPI1 buffer |
|
03003400 |
030034FF |
SPI2 control |
|
03003500 |
030035FF |
SPI2 buffer |
SPI2 is used for communication with integrated MD/DSP controller. XLAT (see 0x0300b000), is used for flushing the buffer and executing DSP commands. It seem that the buffer can also be flushed with other signals, maybe for other stuff? For example, during init a lot of data is sent, but it's not flushed with XLAT, but with another signal. |
03003600 |
030036FF |
SPI3 control |
|
03003700 |
030037FF |
SPI3 buffer |
|
03003800 |
030038FF |
SPI control |
Probably used for setting the general SPI config, such as clock |
|
|
|
|
03004000 |
030040FF |
SSB0 |
Link to RF AMP |
03004100 |
030041FF |
SSB1/TSB1 |
REMOTE interface (part A)? |
03004200 |
030042FF |
SSB2/TSB2 |
REMOTE interface (part B, maybe for sync recoding stuff)? |
|
|
|
|
03005000 |
030050FF |
TIMER A |
Used for IRQ? |
03005100 |
030051FF |
TIMER B |
Used for FIQ? |
03005200 |
030052FF |
TIMER C |
Used for processing SPI/REMOTE/..., e.g. regular updates |
03005300 |
030053FF |
TIMER D |
Used for other general system stuff |
03005400 |
030054FF |
TIMER E |
|
03005500 |
030055FF |
TIMER F |
|
03005600 |
030056FF |
TIMER G |
|
03005700 |
030057FF |
TIMER H |
|
03005800 |
030058FF |
TIMER I |
|
|
|
|
|
03007000 |
030074FF |
GPIO PWM control |
Maybe with D/A converter? |
|
|
|
|
03007800 |
030078FF |
? |
Unknown, not used |
03008000 |
030080FF |
? |
Unknown, not used |
03009000 |
030090FF |
? |
Unknown, not used |
|
|
|
|
0300A300 |
0300A3FF |
? |
Unknown, possibly related to ATRAC DSP signalling |
0300B000 |
0300B0FF |
ATRAC DSP irq signalling |
linked to mon/xlat |
0300B100 |
0300B1FF |
DRAM transfer address registers |
possible general registers that can be used for other things as well? |
0300B200 |
0300B3FF |
? |
Unknown, not used |
0x0301FF00 - 0x0301FFFF
Start |
End |
Description |
Notes |
0301FF00 |
0301FFFF |
? |
Unknown, not used |
0x03800000 - 0x0380FFFF
Start |
End |
Description |
Notes |
03801000 |
03801013 |
? |
Unknown, configured only a couple of times, to fixed values |
03802000 |
038020FF |
Patch controller |
Used to apply virtual patches to the flash memory |
03803000 |
038030FF |
DMA controller |
|
03804000 |
038040FF |
? |
Unknown, related to DMA transfer |
|
|
|
|
03805000 |
038050FF |
? |
Unknown, unused |
03806000 |
03806FFF |
? |
Unknown, unused, dump shows that a block of 0x100 bytes is repeated 16 times |
|
|
|
|
03807000 |
038070FF |
FCU |
Flow control unit, controls transfers between buffers and md unit/dram |
03808000 |
03808FFF |
Data transfer buffer A |
Used for putting padding on LP2 data |
03809000 |
03809FFF |
Data transfer buffer B |
Used for putting padding on LP2 data |
0380A000 |
0380A0FF |
FCU / PCM buffer control |
|
0380B000 |
0380B0FF |
PCM buffer input |
|
0380B100 |
0380B1FF |
PCM buffer |
First 32 words is PCM encoding buffer, inputted via 0x0380B000 |
|
|
|
|
0380C000 |
0380C02F |
USB controller |
General + control transfers |
0380C100 |
0380C1FF |
USB Bulk MD -> PC |
Not used (only by homebrew) |
0380C200 |
0380C2FF |
USB Bulk PC -> MD |
|
0380C300 |
0380C3FF |
USB Interrupt transfers? |
Not used |
|
|
|
|
0380D000 |
0380D0FF |
DES encryption |
DMA transfers can use DES unit to immediately encrypt transfers |
|
|
|
|
0380E000 |
0380E0FF |
|
Monitor interrupts? Something with FOK |