2011年3月5日土曜日

SDメモリカードプレイヤー機能の実装3 SPI Ctrl部の仕様

 SDメモリカードのインタフェース制御を行うSpi_Ctrl部について、もう少し深く検討してみました。

 転送帯域が厳しいaudioデータの再生は、ハードアシストでデータ転送を行い、SDメモリカードの初期化は、遅くても問題ないのでNiosiIIで行うようにする。またAudioデータ転送中の帯域を確保するためFAT予約領域ルート/FAT領域/デレクトリエントリはSDRAM上に転送して、そちらを参照する。
 以上転送帯域確保のための最低限ハード化するとこんな感じで良いかなと考えています。
 SDメモリカードへのライトなどはプレイヤーとしては不要なのでばっさりと機能を落とします。
 以下がSpi_Ctrl部の現時点での仕様です。


概要


SpiCtrlは、SPIマスタとして動作し、SD メモリカードのシングルブロックリードアクセスのみをサポートする。
SDメモリカードの初期化は、制御ルートを切り替えGPIOポートを使用してNiosII処理により行う(予定)。
 
-1536
バイトの受信FIFO
-32
ビット スレーブavalonバスインターフェイス(レジスタアクセス用)
-32ビット マスタavalonバスインターフェイス(リードデータDMA用)
  転送先の指定により2つの転送モード
port to port :設定sampling周波数でESへ転送(audio data転送用)
port to memory :SDRAMミラー領域へ転送FAT予約領域ルート/FAT領域/デレクトリエントリ)
- avalon
バスインターフェイスは50MHz(予定)
-SPIアクセスは20M(予定)


構成



SPI_Ctrl部のブロック構成


アクセス手順

.
SD/メモリカードSingleBlockReadアクセスの手順は次のとおり。

1.        Set the SD block address Reg: SDメモリカードRead Address
2.        Set Trans Type Reg = SPI_RW_READ_SD_BLOCK
3.        Set Trans Ctrl Reg = SPI_TRANS_START
4.        Wait for Trans Status Reg != TRANS_BUSY
5.        Check for Trans Error Reg [3:2] == READ_NO_ERROR
6.        Read 512 bytes from SPI_Rx_FIFO to SDcard_ES (p_to_p)or SDRAM(p_to_m)


レジスタ一覧

 


Register Address
Name
0x0
SPI Master Control Reg
0x4
Trans Type Reg
0x8
Trans Ctrl Reg
0xc
Trans Status Reg
0x10
Trans Error Reg
0x14
Direct_Access Data Reg
0x18
SD Addr Reg
0x1c
Rx_FIFO_data_count




レジスタ詳細

SPI Master Control Reg

Bit Pos
Name
Description
Default
R/W
0
RST
1 = Reset core logic, and registers. Self clearing
0
W


Trans Type Reg

Bit Pos
Name
Description
Default
R/W
[2:0]
TRANS_TYPE
Sets the transaction type, where;
0 = DIRECT_ACCESS (future study)
1 = INIT_SD (future study)
2 = RW_READ_SD_BLOCK
4 = PIO_ACCESS
0
R/W



Trans Ctrl Reg

Bit Pos
Name
Description
Default
R/W
[1:0]
TRANS_START
1 = Start transaction to ES. Self clearing
2 = Start transaction to SDRAM. Self clearing
0
W


Trans Status Reg

Bit Pos
Name
Description
Default
R/W
0
TRANS_BUSY
1 = Transaction busy

R


Trans Error Reg

Bit Pos
Name
Description
Default
R/W
[3:2]
SD_READ_ERROR
0 = READ_NO_ERROR
1 = READ_CMD_ERROR
2 = READ_TOKEN_ERROR

R

[1:0]
SD_INIT_ERROR
(future study)
0 = INIT_NO_ERROR
1 = INIT_CMD0_ERROR
2 = INIT_CMD1_ERROR

R



SD Addr Reg

Bit Pos
Name
Description
Default
R/W
[31:0]
SD_ADDR_31_0
Set the SD memory address before starting a block read.
0x00000000
R/W



Rx_FIFO_data_count

Bit Pos
Name
Description
Default
R/W
[15:0]
FIFO_DATA_COUNT
FIFO_DATA_COUNT Indicates the number of data entries within the fifo.

R





入出力信号一覧

 


Port
Width
Direction
Description
spi_sysclk
1
input
spi logic clock.
rstn
1
input
reset. Asynchronous. Resets all logic.
slave_address
32
input
slave port address input
slave_wr_data
32
input
slave port data input
slave_rd_data 
32
output
sslave port data output
slave_write_enb
1
input
slave port write enable
slave_read_enb
1
input
slave port read enable
slave_ack
1
output
slave port acknowledge output
master_address
32
output
master port address output
master _wr_data
32
output
master port data output
master_write_enb
1
output
master port write enable
master_ack
1
input
master port acknowledge input
spi_clk_out 
1
output
SPI clock. Clock speed configurable
spi_data_in 
1
input
SPI serial data from slave
spi_data_out 
1
input
SPI serial data to slave
spi_cs_n
1
input
SPI device chip select
sample_rate
3
input
sampling_rate



0 件のコメント:

コメントを投稿