<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _update_info(self, target_id):
 """ Call the command getInfo and fill up the information received in the fields of the object """


        # Call getInfo ...
        pk = CRTPPacket()
        pk.set_header(0xFF, 0xFF)
        pk.data = (target_id, 0x10)
        self.link.send_packet(pk)

        # Wait for the answer
        pk = self.link.receive_packet(2)

        if (pk and pk.header == 0xFF and struct.unpack('<BB', pk.data[0:2]) ==
                (target_id, 0x10)):
            tab = struct.unpack('BBHHHH', pk.data[0:10])
            cpuid = struct.unpack('B' * 12, pk.data[10:22])
            if target_id not in self.targets:
                self.targets[target_id] = Target(target_id)
            self.targets[target_id].addr = target_id
            if len(pk.data) > 22:
                self.targets[target_id].protocol_version = pk.datat[22]
                self.protocol_version = pk.datat[22]
            self.targets[target_id].page_size = tab[2]
            self.targets[target_id].buffer_pages = tab[3]
            self.targets[target_id].flash_pages = tab[4]
            self.targets[target_id].start_page = tab[5]
            self.targets[target_id].cpuid = '%02X' % cpuid[0]
            for i in cpuid[1:]:
                self.targets[target_id].cpuid += ':%02X' % i

            if (self.protocol_version == 0x10 and
                    target_id == TargetTypes.STM32):
                self._update_mapping(target_id)

            return True

        return False