nfc shield authenticateBlock failed

use pn532 nfc shield, can read card id, but failed to authenticate block.

  uint8_t keys[]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};  // default key of a fresh card

        for(uint8_t blockn=0;blockn<64;blockn++) {
            if(nfc.authenticateBlock(1, id ,blockn,KEY_A,keys)) //authenticate block blockn
            {                                                                                                                          
                printf("auth pass\n");
                //if authentication successful
                uint8_t block[16];
                //read memory block blockn
                if(nfc.readMemoryBlock(1,blockn,block))

at first, it can authenticate, it broken when i want write multi blocks one time.
i use the code blew to write multi blocks.

 uint8_t keys[]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
        //uint8_t writeBuffer[16];
        uint8_t cardType[16]=  {8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
        uint8_t cardStatus[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};;
        uint8_t cardMenoy[16]= {1,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0};;
        if(nfc.authenticateBlock(1, id ,0x01, KEY_A,keys)) //authenticate block 0x08                                                   
        {
            printf("check1 \n");
            //if(written == 0) //Not written
            {   
                written = nfc.writeMemoryBlock(1,0x01,cardType); // Write writeBuffer[] to block 0x08
                if(written)
                    printf("Write Successful\n");   
            }   
        }   
        if(nfc.authenticateBlock(1, id ,0x02,KEY_A,keys)) //authenticate block 0x08
        {   
            printf("check2 \n");
            //if(written == 0) //Not written
            {   
                written = nfc.writeMemoryBlock(1,0x02,cardStatus); // Write writeBuffer[] to block 0x08
                if(written)
                    printf("Write Successful2");   
            }
        }

anybody knows how to repair that card?