找回密码
 注册
关于网站域名变更的通知
查看: 963|回复: 1
打印 上一主题 下一主题

FPGA驱动EMMC数据写入读出问题????

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-6-6 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
最近在使用Altera的FPGA驱动镁光的16G内存的EMMC。初始化已经完成,当要进行写数据进去的时候先发命令CMD16设置块大小为512bit,再发送命令CMD24进行单块写。  b6 R' Q+ r2 U9 U6 T5 v
数据写完后,经逻辑分析仪发现,DAT0线上始终保持高电平。正确写入的话DAT0线应发送010的数据到主机,最后会一直拉低。
8 h! W* z/ ?* n我不知道我的数据写入的时序对不对,发现网上很多资料都千篇一律,总是讲不到重点上。有几个问题:5 m/ k+ J; `, j* n
1、8线单块写,那除去开始位、CRC16校验位、结束位,是不是我的数据只能是368bit=512bit-1*8(开始位)-1*16*8(CRC16校验位)-1*8(结束位)。8 Z* Y) V- n' V4 {& k( }$ g* F, u
2、8线单块写,我写的数据可以占的位数不多吗?比如只写16bit的数据。
5 {* Q( x: F5 n( l( j下面是我写部分的verilog程序,希望有做过EMMC的大神指正。
& L9 ?' H5 a9 t! C3 V7 |4 ]

; w% H) k$ T+ C# w' l* a0 {7 U, D) |
module emmc_data(6 v) Z6 w, U; w1 d8 D0 q
                        input    EMMC_CLK,//
) k& M+ O1 s/ B                        input    rst_n,//复位# `4 {6 s! n1 b8 k
                        
; h$ G' ^# w0 F* q' n# x. c0 R                        inout    [7:0] emmc_data,
5 L1 P5 k. k9 m7 J                        input read_write,//读写标志,1为写,0为读
7 e# @* G  I. f5 S" H9 N, {                        input  fx3_flaga,//usb3.0给的标志位,拉高可读
4 J) D: s0 g$ P2 O  w' j6 p                        output reg   write_over//写结束标志
0 q3 t# _& R  r& y* Z6 c' O
9 K5 x9 B: j: G0 `# q/ \/ v5 i);$ `4 j* p" _9 x' q7 S) e
; Z1 z& l, `- X! U0 K$ d! B% G
reg [7:0] EMMC_OUT;: r5 D4 }/ `6 Z* y/ ~
reg [ 9:0] data_count;//数据写入计数
* m9 N  x6 Z# J* o" s1 c0 s' I5 qreg [367:0] data;( w8 |6 c5 x& \3 F% k
assign emmc_data = read_write?EMMC_OUT:1'dz;5 p4 I- N  M! w1 [6 L8 \1 v7 v# V  a
always@(posedge EMMC_CLK)
9 x' _$ k5 s: D& Qbegin8 G7 X, M9 \; J- d8 b: L( H/ i4 O! d
        if(!rst_n); w% n- d4 C" }, z  H$ X
                begin
/ U  U! T/ U8 k* p                        data<=368'h55;
# @4 _: q" ^" s9 F2 s; W/ w# @+ r                        write_over<=0;2 Q% _! q* ~3 x; Q4 p4 g3 ~2 G
                end8 X  T: f3 L+ s# `  K
        else- f3 A3 i/ R0 K, L; N5 p  V2 D9 i7 I
                begin  ?8 o' J* B& O/ d7 |$ R
                        if(read_write)//可写
) w. ]& C3 c; S% d: S" z                                begin( u' F" `  v$ }! s+ d  A
                                if((data_count>0)&&(data_count<2))//发送一次; }0 H8 J6 m& b) ?6 Z
                                        begin
4 B# m1 m8 {* _9 a# h  J' y; K  x                                                EMMC_OUT<=8'b0;//发送起始位
* p+ u& ]% Y- {- I; ?- w+ U                                        end
) E3 ?. r1 R; G* B% {3 {. \                                else if((data_count>=2)&&(data_count<=47))//连续发送46次
% d+ ~5 H+ E+ D  E                                        begin# ]9 `! H! r; Q2 O1 a9 @$ b
                                                EMMC_OUT<=data[7:0];# U5 `/ `% V4 g. C- H: b2 O4 ?
                                                data<=data>>8;
* C( ?2 x- ]. ?5 u# v) m. W                                        end0 r: _, X4 O3 }) @
                                else if((data_count>=48)&&((data_count<=63)))//连续发送16次2 m0 d5 ]3 q1 w% |
                                                begin$ q* e$ k7 C) [1 Z! d
                                                        EMMC_OUT[0]<=crc16_out[0][63-data_count];6 O- @1 C$ ?$ U3 _8 }* K
                                                        EMMC_OUT[1]<=crc16_out[1][63-data_count];3 R! H' }8 G( m3 D1 j) M8 f
                                                        EMMC_OUT[2]<=crc16_out[2][63-data_count];
+ v. T" J. q6 a9 b9 i& w% x6 z- h                                                        EMMC_OUT[3]<=crc16_out[3][63-data_count];' H+ O3 S( |2 w# |9 K' A7 [
                                                        EMMC_OUT[4]<=crc16_out[4][63-data_count];# q$ y* }8 y  B& c3 D
                                                        EMMC_OUT[5]<=crc16_out[5][63-data_count];
9 B+ Q+ m9 K$ D6 h3 G                                                        EMMC_OUT[6]<=crc16_out[6][63-data_count];
- H( L4 q7 T1 e) ^                                                        EMMC_OUT[7]<=crc16_out[7][63-data_count];8 l' O) F+ b" O7 u4 g
                                                end0 j) x  v5 F% R' h
                                        else if(data_count==64)/ ^; S1 P' U+ A. V9 ^; {' b. K
                                                begin
4 O. @2 |7 z: Z4 w0 [                                                EMMC_OUT<=8'hff;
% i, P( I0 b" q5 @9 e( |' H                                                write_over<=1;# o. n5 A8 Z' c7 P8 |
                                                end  A4 L* R, o7 n+ `0 @2 q8 s
                                end% P0 u- m+ j, I
                                else //可读8 n7 |* p' m% X* Z4 N& l
                                        begin
4 h, y3 i  {, Z0 L+ K( {                                                - U& W: m- Y. I( z: Y
                                        end; v7 V/ R$ T9 r: _& {+ {& \: H/ o, `
                end7 @( D6 B- z1 O) W
end0 V: k1 ~5 i& M, ?! q  G8 X

1 W6 \# f% F0 I+ |$ }* ]- Q; |always@(posedge EMMC_CLK)) i7 N1 U+ s1 P  O
begin
: Y5 k; O% |& v    if(!rst_n). |! _9 _# J4 o" f+ w, {8 L6 p# A7 h
        data_count <= 10'd0;
7 \& K4 ^  I) w" Y    else
7 `  J# H# O1 ]( O7 A3 F    if(read_write)% h. |# p4 [( m! K+ R, _: \
        data_count <= data_count + 1'd1;( D" D8 ?' @& w: V# G
    else
! g) D+ O% I6 S) g' {# g: e: P, b        data_count <= 10'd0;
/ w# G2 r; h: C# p2 T/ @) send
$ D2 B6 F! F8 x  G$ q- _( ~3 |% J3 r/ x8 U
wire crc_en;5 m# W- s: M- ?7 }. G& P  t* ]
wire [7:0] crc16_out[15:0];9 w7 e5 A" e6 ~1 `# l, }% U1 [' p
assign crc_en = (data_count>0) && (data_count<=47);$ N9 {  J# ]( H  V# ^! H
genvar i,y;, D* C2 |& x8 e& @
5 k9 J% x( @. R5 J% w! o
generate3 ~  ~: s4 @7 {* y5 d5 Z
for(i=0; i<8; i=i+1) begin:CRC_16_gen
6 c- K8 J( I5 c- h  SD_CRC_16_ori CRC_16_i (EMMC_OUT,crc_en, EMMC_CLK,!read_write, crc16_out);' p0 N7 c5 j/ G& C
end1 j( G0 j7 f4 @- [
endgenerate
' i9 L3 G/ x' e7 o: M  Z" c5 ^$ I1 D
endmodule
' P- |+ j- {. M7 a5 }. t- W
& ~, `7 @" L& \; j1 e. B
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-4 11:19 , Processed in 0.109375 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表