Может в либе дело... А просто из консоли в девайс покидать данные или почитать их?
судя по ответам данные к нему доходят корректно, т.к. он на команду отвечает правильно, но вот то что возвращает read() уже получается покореженным в нескольких местах, может 1-2 байта на ответ. и контрольная сумма не совпадает.