Вы можете использовать проект, который я создал, чтобы преобразовать лямбду в javascript: lambda2js
При использовании только свойств и индексаторов результат должен быть именно тем, что вам нужно.
Пример 1: путь с одним свойством
Expression> expr = x => x.Phone;
var js = expr.CompileToJavascript();
// returns: Phone
Пример 2: путь, содержащий индексатор строкового словаря
Expression> expr = x => x.PhonesByName["Miguel"];
var js = expr.CompileToJavascript();
// returns: PhonesByName["Miguel"]
Пример 3: сложный путь, содержащий индексаторы и несколько уровней
Expression> expr = x => x.SomeProp["Miguel"].Subprop[0].A.B;
var js = expr.CompileToJavascript();
// returns: SomeProp["Miguel"].Subprop[0].A.B
Кажется, я нашел проблему. Когда я вычисляю правильный CRC для CMD55 и отправляю его вместо фиктивного CRC, команда принимается (результат 0x01). Если вы посмотрите спецификацию физического уровня в разделе 7.2.2, там явно сказано, что:
Интерфейс SPI инициализируется в режиме CRC OFF по умолчанию. (кроме команд CMD0 и CMD8).
Похоже, это не относится к этой серии карт Transcend, что нарушает спецификацию. Также в случае ошибки CRC ответ должен быть 0x09 вместо 0x05. Я пытался явно отключить проверку CRC с помощью CMD59, но это не так. Кажется, это помогает.
=> Вычисление правильного CRC для (всех?) команд заставляет карту работать.
Я обращаюсь в службу поддержки Transcend по этому поводу. Если я узнаю что-нибудь полезное, то вы узнаете здесь.
Обратите внимание, что раньше я использовал другие карты Transcend на 2 ГБ, но они были сделаны на Тайване, а новая - в Корее (и, похоже, это карта Samsung ( MMAGR02GUDCA)).
Это нормально, вероятно, внутренний зарядный насос, используемый для создания напряжения стирания, требует больше времени, чем обычно, чтобы быть готовым ... вы должны настаивать на комбинации CMD55 + ACMD41, пока не завершится инициализация.
CMD58 также может помочь вам проверить, правильно ли вы подаете напряжение (иногда в розетках возникают проблемы с контактами).