| 128 | raise OSError("timeout waiting for v1 card") |
| 129 | |
| 130 | def init_card_v2(self): |
| 131 | for i in range(_CMD_TIMEOUT): |
| 132 | time.sleep_ms(50) |
| 133 | self.cmd(58, 0, 0, 4) |
| 134 | self.cmd(55, 0, 0) |
| 135 | if self.cmd(41, 0x40000000, 0) == 0: |
| 136 | self.cmd(58, 0, 0, -4) # 4-byte response, negative means keep the first byte |
| 137 | ocr = self.tokenbuf[0] # get first byte of response, which is OCR |
| 138 | if not ocr & 0x40: |
| 139 | # SDSC card, uses byte addressing in read/write/erase commands |
| 140 | self.cdv = 512 |
| 141 | else: |
| 142 | # SDHC/SDXC card, uses block addressing in read/write/erase commands |
| 143 | self.cdv = 1 |
| 144 | # print("[SDCard] v2 card") |
| 145 | return |
| 146 | raise OSError("timeout waiting for v2 card") |
| 147 | |
| 148 | def cmd(self, cmd, arg, crc, final=0, release=True, skip1=False): |
| 149 | self.cs(0) |