Справедливости ради, в Испании вот теми описанными ниже "варварскими" методами вывели и вкусные помидоры, и сладкие арбузы без косточек, и много чего другого (на юге, где всё покрыто теплицами, сидит филиал голландских селекционеров-мутаторов Rijk Zwaan, по округе на биллбордах регулярно обновляющаяся реклама семян их очередных разработок — арбуз с такими-то свойствами, баклажан с такими-то). Но по сути да, от ситуации уже веет какой-то религиозностью — можем просчитать ответ, но будем упорно бросать кубики, лишь бы "оно само".
В начале 2000х был популярен аналогичный способ ремонта массово окирпичиваемых телефонов Panasonic GD93, так с питанием никто и не заморачивался, очумельцы аккуратно снимали/ставили NOR flash прямо под напряжением, и даже как-то всё работало (иногда не с первой попытки, что-то коротилось, паяли flash назад и повторяли процедуру).
Повезло с архитектурой прошивки, bootloader целиком копировался в RAM и исполнялся оттуда (чтобы спокойно перезаписывать flash, никаких Read While Write тогда не было).
Испанская барахолка это одни и те же продавцы с закреплёнными на годы местами (на тротуаре метки, приходит дедушка на своё место и стелит по ним свою клеёнку), стоять там наркоманам никто не даст. Если и будет краденое, то что-то дешевое, массовое и безличное, неразличимое сходу полицией (места — временные лотки на тротуаре, прятать там некуда, всё на виду). Да и по ассортименту прекрасно видно о чём это всё, никаких свежевынесенных 50" LCD, iPhone 12 и подобного там и близко нет (такое скорее старьёвщики в Марокко увезут, спрятав среди хлама в фургоне), ну и в целом уровень преступности низковат чтобы по умолчанию подозревать краденое.
Кликающие свитчи это не "третий тип", это разновидность тактильных переключателей.
У Kailh немало свитчей (навскидку, speed bronze, speed gold), кажущихся тактильными ровно до тех пор, пока их слышно. Их этот выделенный механизм звукоизвлечения (click bar) может выдавать громкие клики, создавая совсем незначительную нагрузку. Безусловно, какой-то порог у них есть, но на практике свитчи, кажущиеся такими чёткими пока слышны, в наушниках с громкой музыкой резко превращаются в "немного шершавые линейные".
Коллега недавно приносил огромный тестовый набор (130 типов свитчей! просто праздник!), устроили "слепую дегустацию" в тишине/в наушниках.
В закромах нашёлся ещё и разбор протокола самого прибора (залил туда же), там всё сильно проще, чем в файлах (поток данных формирует FPGA, никаких высокоуровневых структур), технически можно вообще прикинуться этим прибором (определённые дескрипторы в FX3, обработка команд start/stop в FX3, для остальных — заглушки, отвечающие "ОК", определённый формат потока от FPGA).
Залил описание формата и декодер на GitHub, софт оригинальный здесь, в нём есть несколько файлов-примеров, с которыми можно сопоставить моё описание (внимание: существуют "новый" и "старый" форматы файлов, я разбирал "новый", большинство примеров — "старый").
Если что — пишите в ЛС, наверняка какие-то тонкости не записал, но помню, прибор сам под рукой, могу насоздавать ещё образцов файлов.
Кое-какие наблюдения аналогичных коммерческих продуктов (Ellisys Explorer 200, Beagle 480):
скорость они оба как-то отслеживают на лету на стороне железа (в анализатор ни предварительно, ни в процессе никаких настроек скорости не передаётся)
видел «хитрый» сторонний анализатор USB HSIC от CATC, сохраняющий данные в формате Ellisys (а у тех - красивый софт, декодирующий протоколы разных классов, доступный бесплатно). Я как-то разбирал этот формат, но с целью чтения (так что некоторые детали остались неизвестны), если интересно, могу поделиться.
Вообще то компиляторы С (и вполне приличные, IAR к примеру) существуют и для куда более скромных машин, вплоть до какого-нибудь MCS-51 со 128 байтами RAM и единицами кБ ROM
У PPC просто непривычные мнемоники, но логика за ними — вполне типичная для RISC.
Раз уж пошла такая пьянка, пример ассемблера "повеселее" (QDSP, архитектура с явным параллелизмом):
все три if в строках 1,3,4 проверяют результат сравнения из строки 2
если результат ложный, то выполнится не только переход в строке 1, но и запись в память в строке 4
переход содержит подсказку предсказателю ветвлений о наиболее вероятном поведении (nt — not taken)
в строке 6 в память пишется результат предыдущей (5) строки (суффикс .new достаёт результат параллельной операции), а вот в строке 8 — нет (т.к. без .new), туда дойдёт старое значение из строки 3
У нас при виде 19кВт мощности передачи тоже было возник вопрос "а ничего что мы тут возле самого забора гуляем?", но потом увидели спокойно передвигающихся по территории работников и успокоились :)
Существуют крокодилы и подпружиненные крюки, надеваемые на стандартный 2мм щуп мультиметра (на Али находятся по alligator clip 2mm). Можно попробовать поставить в прибор pogo pin с 2мм внешним диаметром (на Али это тип P125-B) и надевать на него.
Дома нашлись немного другие (с утолщённой шарообразной головкой, не даёт надевать с рабочей стороны) 2мм pogo, попробовал надеть крокодил с обратной стороны — держится туго.
Страница состояния антенн DSN в реальном времени: https://eyes.nasa.gov/dsn/dsn.html
Если выбрать антенну и раскрыть more info, покажет скорость, мощность итд. Периодически виден приём от «Вояджеров», 160 бит/с, пинг 1.76 дня.
Несколько раз был возле мадридской наземной станции уже после посадки марсохода, впечатляет — здоровенная (70 м диаметр) главная антенна (номер 63 на сайте) урчит моторами, на странице статус “tracking”, громкоговорители на территории несколько раз повторяют предупреждение, проходит немного времени, и страница начинает показывать, что пошёл обмен с MRO.
«Сверим часы», я писал о векторном управлении (FOC) синхронным мотором с постоянными магнитами (PMSM), в статье мотор тот, способ управления, судя по характерным графикам и достаточной современности машины-донора, тоже тот. В чём расхождения?
И MTPA и field weakening реализуются точным быстрым управлением ориентацией поля основных обмоток. Контроллер много раз за оборот определяет ориентацию магнитов относительно обмоток (либо прямо по датчикам положения ротора, либо косвенно — измеряя наводимую магнитами противоЭДС в каждой обмотке) и корректирует напряжения на обмотках так, чтобы их общее поле было ориентировано перпендикулярно полю магнитов (для MTPA. Для field weakening добавляется продольная составляющая, "задавливающая" поле магнитов — вот она и расходует энергию без вклада в тягу). Если интересуют подробности — поищите статьи по FOC (Field Oriented Control). Здесь как-то встречал тоже, но вижу что автор @NordicEnergy удалился.
Вкратце суть такая: мотор является также и генератором напряжения, пропорционального оборотам. Проводим мысленный эксперимент: временно обесточиваем мотор и тянем машину на буксире с некоторой постоянной скоростью — мотор генерирует некоторое напряжение, соответствующее этой скорости. Далее на ходу пытаемся подать питание на мотор, и тут возникает интересный момент: если наше питающее напряжение выше генерируемого мотором — ток потечёт в мотор (вкачаем дополнительную энергию в движение и ускоримся), если напряжения равны — ток никуда не потечёт (и ничего нового не произойдёт!), ну и если питающее напряжение ниже генерируемого — ток потечёт наоборот в батарею (получим рекуперативное торможение).
Для каждого типа мотора и напряжения батареи есть скорость, при которой достигается равновесие питающего и генерируемого напряжений (в английских терминах “base speed”) и дальше мотор просто «не хочет» потреблять ток. Для обхода этого ограничения и используется ослабление поля (не «ослабевание», оно не само, это принудительное действо, организуемое контроллером) — часть энергии батареи тратится на подавление поля постоянных магнитов мотора, мотор становится «более слабым генератором» (но и тяга падает, как будто у нас мотор с более слабыми магнитами).
Если интересно нащупать этот момент в цифрах — попробуйте погонять мотор с полной батареей и с разряженной, с разряженной равновесие напряжений (и решение контроллера о включении field weakening) должно происходить на более низких оборотах.
Причина завала крутящего момента не в "не успевающем поле", а в нехватке напряжения батареи. Приведённые графики описывают не отдельно мотор, а конкретную связку батарея-контроллер-мотор, с более высоковольтной батареей изломы графиков были бы правее (если изоляция обмоток мотора выдержит). Левее излома контроллер работает в энергоэффективном режиме MTPA (Maximum Torque Per Ampere), правее в дело вступает режим field weakening, по сути "саботирующий" работу постоянных магнитов мотора, дальнейший рост оборотов покупается повышенным расходом заряда и падением крутящего момента.
Даже без глубоких знаний внутренностей Seagate можно сравнить дампы flash двух разных прошивок (из разных уровней задания) и попробовать нащупать логику открытия следующего раздела. Судя по фрагменту патча в нулевой части статьи, код там уже распакованный.
Disclaimer: это не в коем случае не «смотри как надо было», вы публикуете «детектив» по частям, а нам не терпится угадать «кто убил» :) Ждём продолжения!
Немного исторического контекста: это было во времена проникновения и закрепления ARM в мобильных телефонах, относительно дорогих flash с размерами меньше мегабайта и узкими (8/16 бит) шинами. Thumb (который по сути был небольшой надстройкой над ARM — второй декодер команд, управляющий тем же ALU) убил сразу двух зайцев — выше плотность кода (и экономия за счёт меньших flash в массовом продукте) и чтение очередной команды за одно обращение по 16-битной шине.
Была даже кое-какая конкуренция именно в направлении уплотнения и именно под телефоны: Motorola с нуля разработала свою ISA M*CORE (вообще без 32-битной кодировки, только 16, но с эффективным кодированием часто используемых 32-битных констант вроде битовых масок) и гордо публиковала сравнения с ARM/Thumb в свою пользу, но в итоге таки перешла на ARM.
А Thumb потом развили до нынешнего Thumb-2, позволяющего совмещать 16- и 32-бит кодировки без явного переключения режимов.
Справедливости ради, в Испании вот теми описанными ниже "варварскими" методами вывели и вкусные помидоры, и сладкие арбузы без косточек, и много чего другого (на юге, где всё покрыто теплицами, сидит филиал голландских селекционеров-мутаторов Rijk Zwaan, по округе на биллбордах регулярно обновляющаяся реклама семян их очередных разработок — арбуз с такими-то свойствами, баклажан с такими-то). Но по сути да, от ситуации уже веет какой-то религиозностью — можем просчитать ответ, но будем упорно бросать кубики, лишь бы "оно само".
В начале 2000х был популярен аналогичный способ ремонта массово окирпичиваемых телефонов Panasonic GD93, так с питанием никто и не заморачивался, очумельцы аккуратно снимали/ставили NOR flash прямо под напряжением, и даже как-то всё работало (иногда не с первой попытки, что-то коротилось, паяли flash назад и повторяли процедуру).
Повезло с архитектурой прошивки, bootloader целиком копировался в RAM и исполнялся оттуда (чтобы спокойно перезаписывать flash, никаких Read While Write тогда не было).
Испанская барахолка это одни и те же продавцы с закреплёнными на годы местами (на тротуаре метки, приходит дедушка на своё место и стелит по ним свою клеёнку), стоять там наркоманам никто не даст. Если и будет краденое, то что-то дешевое, массовое и безличное, неразличимое сходу полицией (места — временные лотки на тротуаре, прятать там некуда, всё на виду). Да и по ассортименту прекрасно видно о чём это всё, никаких свежевынесенных 50" LCD, iPhone 12 и подобного там и близко нет (такое скорее старьёвщики в Марокко увезут, спрятав среди хлама в фургоне), ну и в целом уровень преступности низковат чтобы по умолчанию подозревать краденое.
У Kailh немало свитчей (навскидку, speed bronze, speed gold), кажущихся тактильными ровно до тех пор, пока их слышно. Их этот выделенный механизм звукоизвлечения (click bar) может выдавать громкие клики, создавая совсем незначительную нагрузку. Безусловно, какой-то порог у них есть, но на практике свитчи, кажущиеся такими чёткими пока слышны, в наушниках с громкой музыкой резко превращаются в "немного шершавые линейные".
Коллега недавно приносил огромный тестовый набор (130 типов свитчей! просто праздник!), устроили "слепую дегустацию" в тишине/в наушниках.
В закромах нашёлся ещё и разбор протокола самого прибора (залил туда же), там всё сильно проще, чем в файлах (поток данных формирует FPGA, никаких высокоуровневых структур), технически можно вообще прикинуться этим прибором (определённые дескрипторы в FX3, обработка команд start/stop в FX3, для остальных — заглушки, отвечающие "ОК", определённый формат потока от FPGA).
Залил описание формата и декодер на GitHub, софт оригинальный здесь, в нём есть несколько файлов-примеров, с которыми можно сопоставить моё описание (внимание: существуют "новый" и "старый" форматы файлов, я разбирал "новый", большинство примеров — "старый").
Если что — пишите в ЛС, наверняка какие-то тонкости не записал, но помню, прибор сам под рукой, могу насоздавать ещё образцов файлов.
Спасибо! Как всегда глубоко и подробно.
Кое-какие наблюдения аналогичных коммерческих продуктов (Ellisys Explorer 200, Beagle 480):
скорость они оба как-то отслеживают на лету на стороне железа (в анализатор ни предварительно, ни в процессе никаких настроек скорости не передаётся)
видел «хитрый» сторонний анализатор USB HSIC от CATC, сохраняющий данные в формате Ellisys (а у тех - красивый софт, декодирующий протоколы разных классов, доступный бесплатно). Я как-то разбирал этот формат, но с целью чтения (так что некоторые детали остались неизвестны), если интересно, могу поделиться.
Вообще то компиляторы С (и вполне приличные, IAR к примеру) существуют и для куда более скромных машин, вплоть до какого-нибудь MCS-51 со 128 байтами RAM и единицами кБ ROM
У PPC просто непривычные мнемоники, но логика за ними — вполне типичная для RISC.
Раз уж пошла такая пьянка, пример ассемблера "повеселее" (QDSP, архитектура с явным параллелизмом):
Вот прямо сейчас идёт передача в сторону MRO с мощностью 5.11кВт. Подозреваю, в «ту» сторону большие скорости и не нужны.
И вот ещё отличный тех.документ по MRO: https://descanso.jpl.nasa.gov/DPSummary/MRO_092106.pdf — у самого MRO мощность передатчика в сторону Земли всего лишь 100Вт (при скорости в единицы Мбит/с).
У нас при виде 19кВт мощности передачи тоже было возник вопрос "а ничего что мы тут возле самого забора гуляем?", но потом увидели спокойно передвигающихся по территории работников и успокоились :)
Топорные — крокодилы? Пользуюсь вот этими (местный магазин, но они явно с Али, судя по цене): https://www.electronicaembajadores.com/en/Productos/Detalle/CTJ1PCR/connectors/alligator-clips/alligator-clip-for-2-mm-banana-plug-red-pc10r — довольно аккуратные, литьё и металл ровные, держат отлично.
Или в смысле 2мм pogo — слишком крупно?
Существуют крокодилы и подпружиненные крюки, надеваемые на стандартный 2мм щуп мультиметра (на Али находятся по alligator clip 2mm). Можно попробовать поставить в прибор pogo pin с 2мм внешним диаметром (на Али это тип P125-B) и надевать на него.
Дома нашлись немного другие (с утолщённой шарообразной головкой, не даёт надевать с рабочей стороны) 2мм pogo, попробовал надеть крокодил с обратной стороны — держится туго.
Страница состояния антенн DSN в реальном времени: https://eyes.nasa.gov/dsn/dsn.html
Если выбрать антенну и раскрыть more info, покажет скорость, мощность итд. Периодически виден приём от «Вояджеров», 160 бит/с, пинг 1.76 дня.
Несколько раз был возле мадридской наземной станции уже после посадки марсохода, впечатляет — здоровенная (70 м диаметр) главная антенна (номер 63 на сайте) урчит моторами, на странице статус “tracking”, громкоговорители на территории несколько раз повторяют предупреждение, проходит немного времени, и страница начинает показывать, что пошёл обмен с MRO.
«Сверим часы», я писал о векторном управлении (FOC) синхронным мотором с постоянными магнитами (PMSM), в статье мотор тот, способ управления, судя по характерным графикам и достаточной современности машины-донора, тоже тот. В чём расхождения?
И MTPA и field weakening реализуются точным быстрым управлением ориентацией поля основных обмоток. Контроллер много раз за оборот определяет ориентацию магнитов относительно обмоток (либо прямо по датчикам положения ротора, либо косвенно — измеряя наводимую магнитами противоЭДС в каждой обмотке) и корректирует напряжения на обмотках так, чтобы их общее поле было ориентировано перпендикулярно полю магнитов (для MTPA. Для field weakening добавляется продольная составляющая, "задавливающая" поле магнитов — вот она и расходует энергию без вклада в тягу). Если интересуют подробности — поищите статьи по FOC (Field Oriented Control). Здесь как-то встречал тоже, но вижу что автор @NordicEnergy удалился.
Вкратце суть такая: мотор является также и генератором напряжения, пропорционального оборотам. Проводим мысленный эксперимент: временно обесточиваем мотор и тянем машину на буксире с некоторой постоянной скоростью — мотор генерирует некоторое напряжение, соответствующее этой скорости. Далее на ходу пытаемся подать питание на мотор, и тут возникает интересный момент: если наше питающее напряжение выше генерируемого мотором — ток потечёт в мотор (вкачаем дополнительную энергию в движение и ускоримся), если напряжения равны — ток никуда не потечёт (и ничего нового не произойдёт!), ну и если питающее напряжение ниже генерируемого — ток потечёт наоборот в батарею (получим рекуперативное торможение).
Для каждого типа мотора и напряжения батареи есть скорость, при которой достигается равновесие питающего и генерируемого напряжений (в английских терминах “base speed”) и дальше мотор просто «не хочет» потреблять ток. Для обхода этого ограничения и используется ослабление поля (не «ослабевание», оно не само, это принудительное действо, организуемое контроллером) — часть энергии батареи тратится на подавление поля постоянных магнитов мотора, мотор становится «более слабым генератором» (но и тяга падает, как будто у нас мотор с более слабыми магнитами).
Если интересно нащупать этот момент в цифрах — попробуйте погонять мотор с полной батареей и с разряженной, с разряженной равновесие напряжений (и решение контроллера о включении field weakening) должно происходить на более низких оборотах.
Причина завала крутящего момента не в "не успевающем поле", а в нехватке напряжения батареи. Приведённые графики описывают не отдельно мотор, а конкретную связку батарея-контроллер-мотор, с более высоковольтной батареей изломы графиков были бы правее (если изоляция обмоток мотора выдержит). Левее излома контроллер работает в энергоэффективном режиме MTPA (Maximum Torque Per Ampere), правее в дело вступает режим field weakening, по сути "саботирующий" работу постоянных магнитов мотора, дальнейший рост оборотов покупается повышенным расходом заряда и падением крутящего момента.
Даже без глубоких знаний внутренностей Seagate можно сравнить дампы flash двух разных прошивок (из разных уровней задания) и попробовать нащупать логику открытия следующего раздела. Судя по фрагменту патча в нулевой части статьи, код там уже распакованный.
Disclaimer: это не в коем случае не «смотри как надо было», вы публикуете «детектив» по частям, а нам не терпится угадать «кто убил» :) Ждём продолжения!
Немного исторического контекста: это было во времена проникновения и закрепления ARM в мобильных телефонах, относительно дорогих flash с размерами меньше мегабайта и узкими (8/16 бит) шинами. Thumb (который по сути был небольшой надстройкой над ARM — второй декодер команд, управляющий тем же ALU) убил сразу двух зайцев — выше плотность кода (и экономия за счёт меньших flash в массовом продукте) и чтение очередной команды за одно обращение по 16-битной шине.
Была даже кое-какая конкуренция именно в направлении уплотнения и именно под телефоны: Motorola с нуля разработала свою ISA M*CORE (вообще без 32-битной кодировки, только 16, но с эффективным кодированием часто используемых 32-битных констант вроде битовых масок) и гордо публиковала сравнения с ARM/Thumb в свою пользу, но в итоге таки перешла на ARM.
А Thumb потом развили до нынешнего Thumb-2, позволяющего совмещать 16- и 32-бит кодировки без явного переключения режимов.