This code sequence works for me:
First you need to change the addressing mode to physical addressing (6c) and dest address to the PCM (10), stick with the default source address (f1)
ATSH 6c 10 f1
Then send the request DTC by status (19) real and pending (D2) all groups (ff)
>19 D2 ff 00
>14 //yes you just put 14 in the command line and with that you reset all the DTC of the module and restore to the default settings (or that is supossed to do)
the modules numbers for GM are
10 ECM / PCM
60 Instument Panel Cluster
Communicating With Your Vehicle
1. To read DTCs, send the following commands:
ATSH 6C XX F1 (replace XX with 28 for ABS, 40 for the BCM, 10 for PCM 58 for air bag, or F1 for TCCM)
2. Send one of the following commands:
19 D2 FF 00 (for current and pending codes)
19 C2 FF 00 (for current codes)
19 FF FF 00 (for all codes)
The response should should be similar to: "6C F1 XX 59 ZZ ZZ YY", where XX is the same as the code for the module as above, ZZ ZZ represents the desired DTC, and YY can be ignored.
3. To interpret the DTC, take the first number and convert it as follows:
4. Then, add the next three numbers to complete the DTC. As an example, if the message received is “6C F1 10 59 01 72 17”, the numbers of note would be “01 72”. The 0 converts to a P0 followed by 172, which is combined to be code P0172.
5. To clear codes, send the following commands:
ATSH 6C XX F1 (replace XX with the code of the module responsible for the DTC; see codes above)
Response should be “6C F1 XX 54”.
Note: codes can only be cleared after they have been requested as described above. A clear command cannot be sent before requesting codes.