1

データ フラッシュを 89lp 4052 コントローラと接続しようとしています。Crysal は 11.0592 MHz を使用しました。このコントローラには spi バスが組み込まれています。CPHA と CPOL のすべての組み合わせを試しました。モード 0 とモード 3 を試しました。ステータス レジスタを読み取ることができません。レジスタを読み取る場合もありますが、フラッシュからコードを ff するだけの場合もあります。

私のコードは次のとおりです。

                        CLR     SCLK
        CLR     CS
        LCALL       DELAY2      

;;============================================== ==============================

WRITE_FLASH: MOV 20H,#0D7H ;コマンド LCALL SEND_CLOCK_ONE LCALL READ_FLASH CLR SCON.1 MOV A,21H MOV SBUF,A JNB SCON.1,$ CLR SCON.1 ;;============= ================================================== ======== SETB CS CLR SCLK LCALL DELAY2 CLR CS ;再度選択 MOV 20H,#84H LCALL SEND_CLOCK MOV 20H,#00H LCALL SEND_CLOCK
MOV 20H,#00H LCALL SEND_CLOCK
MOV 20H,#00H LCALL SEND_CLOCK
MOV 20H,#33H LCALL SEND_CLOCK LCALL DELAY2 SETB CS LCALL DELAY2 CLR SCLK CLR CS ;再度選択 MOV 20H,#0D4H LCALL SEND_CLOCK
MOV 20H,#00H LCALL SEND_CLOCK
MOV 20H,#00H LCALL SEND_CLOCK
MOV 20H,#00H LCALL
SEND_CLOCK ,#00H LCALL SEND_CLOCK_ONE

        LCALL       READ_FLASH
        CLR     SCON.1
        MOV     A,21H
        MOV     SBUF,A
        JNB     SCON.1,$
        CLR     SCON.1
        SETB        CS
        SETB        SCLK
        LCALL       DELAY2

        LJMP        REP

;;============================================== ====================== SEND_CLOCK_ONE: MOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C, 05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SEND
MOV C,00H MOV DOUT,C LCALL PULSE_SEND_LAST RET ;;=================================== ===================================== READ_FLASH: LCALL PULSE_SEND MOV C,DIN MOV 0FH,C LCALL PULSE_SEND MOV C、DIN MOV 0EH、C LCALL PULSE_SEND MOV C、DIN MOV 0DH、C LCALL PULSE_SEND MOV C、DIN MOV 0CH、C LCALL PULSE_SEND MOV C、DIN MOV 0BH、C LCALL PULSE_SEND MOV C、DIN MOV 0AH、C LCALL PULSE_SEND MOV C,DIN MOV 09H,C LCALL PULSE_SEND MOV C,DIN MOV 08H,C LCALL PULSE_SEND RET ;;================================= ==================================== SEND_CLOCK: MOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SENDDIN MOV 08H,C LCALL PULSE_SEND RET ;;======================================= ============================= SEND_CLOCK: MOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT、C LCALL PULSE_SENDDIN MOV 08H,C LCALL PULSE_SEND RET ;;======================================= ============================= SEND_CLOCK: MOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT、C LCALL PULSE_SENDC LCALL PULSE_SEND RET ;;========================================== ========================== SEND_CLOCK: MOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SENDC LCALL PULSE_SEND RET ;;========================================== ========================== SEND_CLOCK: MOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SENDMOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SENDMOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SENDC LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SENDC LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SEND
MOV C,00H MOV DOUT,C LCALL PULSE_SEND RET

;;============================================== ========================== DELAY2: mov 56H,#0FFH DJNZ 56H,$ mov 56H,#0FFH DJNZ 56H,$ RET ;; ================================================= ================= PULSE_SEND: SETB SCLK LCALL DELAY2 CLR SCLK LCALL DELAY2 RET ;;=================== ============================== PULSE_SEND_LAST: SETB SCLK LCALL DELAY2 RET ;;========== ========================================== PULSE_READ_FIRST: CLR SCLK LCALL DELAY2 SETB SCLK LCALL DELAY2 RET ;;========================================== ===============

終わり

4

2 に答える 2

2

スコープを取り出して、SPI バス (コントローラーからの clk 信号と DO) を見てください。フラッシュのデータシートには、データがどのようにクロック インおよびクロック アウトされるか (エッジまたは各クロック サイクルの中間点)、どのエッジで、バスがアイドル状態になるかを示すタイミング図があります。

次に、コントローラーから見えるものがフラッシュ データシートに表示されるものと一致するまで、コントローラーの設定を微調整します。

最後に、フラッシュ データシートを注意深く読んでください。おそらく、CS (チップ セレクト) ピンが引き上げられてデータがラッチされる前に、8 ビット チャンクまたは 24 ビット チャンクのデータを期待するようなものがあります。フラッシュがそれを期待している場合にのみ、必ずそれを行ってください。

その後、それは動作します。:-) 幸運を。

于 2009-12-10T14:27:33.167 に答える
1

同様のフラッシュ チップをコーディングしていたときに、同様の症状が発生しました。

私の問題は、初期化していない他のチップ (RTC、UART など) への他のチップ セレクト ラインがあったため、デフォルトで Low に設定されていたことです。チップセレクトが低いと、これらのチップはMISO(マスターイン、スレーブアウト)データラインを駆動できるため、マイクロコントローラーは何も読み取れません。

于 2009-12-10T18:16:26.050 に答える