@@ -154,6 +154,50 @@ pbio_error_t ev3_mmcsd_process_thread(pbio_os_state_t *state, void *context) {
154154 // pbdrv_uart_debug_printf("acmd51 %08x %08x\r\n", resp[0], resp[1]);
155155 pbdrv_uart_debug_printf ("acmd51 %08x %08x\r\n" , data [0 ], data [1 ]);
156156
157+ // acmd6
158+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCARGHL ) = rca ;
159+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCCMD ) = (55 << MMCSD_MMCCMD_CMD_SHIFT ) | (MMCSD_MMCCMD_RSPFMT_R1 << MMCSD_MMCCMD_RSPFMT_SHIFT ) | MMCSD_MMCCMD_PPLEN ;
160+ PBIO_OS_AWAIT_UNTIL (state , HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCST0 ) & MMCSD_MMCST0_RSPDNE );
161+ resp [0 ] = HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCRSP45 );
162+ resp [1 ] = HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCRSP67 );
163+ // pbdrv_uart_debug_printf("cmd55 %08x %08x\r\n", resp[0], resp[1]);
164+
165+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCARGHL ) = 2 ;
166+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCCMD ) = (6 << MMCSD_MMCCMD_CMD_SHIFT ) | (MMCSD_MMCCMD_RSPFMT_R1 << MMCSD_MMCCMD_RSPFMT_SHIFT ) | MMCSD_MMCCMD_PPLEN ;
167+ PBIO_OS_AWAIT_UNTIL (state , HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCST0 ) & MMCSD_MMCST0_RSPDNE );
168+ resp [0 ] = HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCRSP45 );
169+ resp [1 ] = HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCRSP67 );
170+ // pbdrv_uart_debug_printf("acmd6 %08x %08x\r\n", resp[0], resp[1]);
171+
172+ // switch host to 4-bit mode
173+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCCTL ) |= MMCSD_MMCCTL_WIDTH1_WIDTH0_4BIT ;
174+
175+ // acmd51 again for testing
176+
177+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCFIFOCTL ) = MMCSD_MMCFIFOCTL_FIFORST ;
178+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCFIFOCTL ) = MMCSD_MMCFIFOCTL_ACCWD_4BYTES | (0 << MMCSD_MMCFIFOCTL_FIFODIR_SHIFT );
179+
180+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCARGHL ) = rca ;
181+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCCMD ) = (55 << MMCSD_MMCCMD_CMD_SHIFT ) | (MMCSD_MMCCMD_RSPFMT_R1 << MMCSD_MMCCMD_RSPFMT_SHIFT ) | MMCSD_MMCCMD_PPLEN ;
182+ PBIO_OS_AWAIT_UNTIL (state , HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCST0 ) & MMCSD_MMCST0_RSPDNE );
183+ resp [0 ] = HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCRSP45 );
184+ resp [1 ] = HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCRSP67 );
185+ // pbdrv_uart_debug_printf("cmd55 %08x %08x\r\n", resp[0], resp[1]);
186+
187+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCBLEN ) = 8 ;
188+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCNBLK ) = 1 ;
189+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCARGHL ) = 0 ;
190+ HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCCMD ) = (51 << MMCSD_MMCCMD_CMD_SHIFT ) | (MMCSD_MMCCMD_RSPFMT_R1 << MMCSD_MMCCMD_RSPFMT_SHIFT ) | MMCSD_MMCCMD_PPLEN | MMCSD_MMCCMD_WDATX ;
191+ PBIO_OS_AWAIT_WHILE (state , HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCST1 ) & MMCSD_MMCST1_FIFOEMP );
192+ data [0 ] = HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCDRR );
193+ PBIO_OS_AWAIT_WHILE (state , HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCST1 ) & MMCSD_MMCST1_FIFOEMP );
194+ data [1 ] = HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCDRR );
195+ PBIO_OS_AWAIT_UNTIL (state , HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCST0 ) & MMCSD_MMCST0_DATDNE );
196+ resp [0 ] = HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCRSP45 );
197+ resp [1 ] = HWREG (SOC_MMCSD_0_REGS + MMCSD_MMCRSP67 );
198+ // pbdrv_uart_debug_printf("acmd51 %08x %08x\r\n", resp[0], resp[1]);
199+ pbdrv_uart_debug_printf ("acmd51 v2 %08x %08x\r\n" , data [0 ], data [1 ]);
200+
157201 pbdrv_uart_debug_printf ("mmcsd init defer end\r\n" );
158202
159203 PBIO_OS_ASYNC_END (PBIO_SUCCESS );
0 commit comments