<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def sync_firmware(self):
 """Syncs the emulator's firmware version and the DLL's firmware. This method is useful for ensuring that the firmware running on the J-Link matches the firmware supported by the DLL. Args: self (JLink):
 the ``JLink`` instance Returns: ``None`` """

        serial_no = self.serial_number

        if self.firmware_newer():
            # The J-Link's firmware is newer than the one compatible with the
            # DLL (though there are promises of backwards compatibility), so
            # perform a downgrade.
            try:
                # This may throw an exception on older versions of the J-Link
                # software due to the software timing out after a firmware
                # upgrade.
                self.invalidate_firmware()
                self.update_firmware()
            except errors.JLinkException as e:
                pass

            res = self.open(serial_no=serial_no)

            if self.firmware_newer():
                raise errors.JLinkException('Failed to sync firmware version.')

            return res

        elif self.firmware_outdated():
            # The J-Link's firmware is older than the one compatible with the
            # DLL, so perform a firmware upgrade.
            try:
                # This may throw an exception on older versions of the J-Link
                # software due to the software timing out after a firmware
                # upgrade.
                self.update_firmware()
            except errors.JLinkException as e:
                pass

            if self.firmware_outdated():
                raise errors.JLinkException('Failed to sync firmware version.')

            return self.open(serial_no=serial_no)

        return None