Finally, I've solved the problem.
1) Command ACMD51 amd CMD6 are commands with data. So wee need to set DATA_EXPECTED bit in CMD register. Otherwise DMA wouldn't try to receive any data and we haven't IRQ DU, as I wrote before. That's why.
2) After settings this bit, we can check RINTSTS register to NIS flag.
3) BYTSIZ and FIFOTH doesn't influence. So it could be the same as to READ SINGLE BLOCK command.
Here is my list of actions:
/* BLKSIZ */
LPC_SDMMC->BLKSIZ = sd_sector_size; // 512, no problem it's OK
/* setup descriptor for data reception */
sdmmc.descr[0].buf1 = data; // some pointer, 32 aligned
sdmmc.descr[0].buf2 = NULL; // one chain descriptor
/* set size */
sdmmc.descr[0].size = (size << SDMMC_DESC1_BS1_Pos) & SDMMC_DESC1_BS1_Msk; // size - 8 bytes for ACMD51 and 64 bytes for CMD6.
/* first descriptor and last, own by dma */
sdmmc.descr[0].ctl = SDMMC_DESC0_FS_Msk | SDMMC_DESC0_CH_Msk | SDMMC_DESC0_OWN_Msk | SDMMC_DESC0_LD_Msk;
/* setup size */
LPC_SDMMC->BYTCNT = size;
/* send cmd */
sdmmc_cmd(SDMMC_CMD_SWITCH_FUNC, (CF_MODE_CHECK << CF_MODE_OFFS) | 0xFFFFFF, &resp, SDMMC_NO_RESPONSE); // my implementation with cmd reg fill and send cmd to card, verify answer and so on ...
/* wait DMA flag */
while((LPC_SDMMC->IDSTS & SDMMC_IDSTS_NIS_Msk) == 0)); // possible improve with timeout, but OK
/* now we can extract or parse data from data buffer */
...
/* here is my example of switch function reply */
max current: 50 mA
group 6: 8001
group 5: 8001
group 4: 8001
group 3: 8001
group 2: 8001
group 1: 8003
group 6 mode: 0
group 5 mode: 0
group 4 mode: 0
group 3 mode: 0
group 2 mode: 0
group 1 mode: 1
ds version: 0
For more information I used Physical Layer SD Specification Version 3.00 from SD Group. CMD6 reply data is described "4.3.10.4 Switch Function Statuson", page 52.
Hope, someone find this topic helpfull or interesting at least.