Прямой эфир

0
Так 19.201 вроде как для ПО, хотя сути не меняет
  • avatar
  • tituszx
  • 26 апреля 2019, 00:56
0
Очень полезная статья. Спасибо большое.
Но для того, чтобы заставить работать под Atollic True Studio, код пришлось поправить(возможно, из за отключенной оптимизации).
Если конкретно, то ф-ция reverse_32(uint32_t data) в том виде, как в статье, у меня скомпилилась так:

.........
08001920:   mov     r0, r3
08001922:   adds    r7, #32
08001924:   mov     sp, r7
08001926:   pop     {r7, pc}
155       {
          reverse_32:
08001928:   push    {r7}
0800192a:   sub     sp, #12
0800192c:   add     r7, sp, #0
0800192e:   str     r0, [r7, #4]
156       	asm volatile("rbit r0,r0""\n\t");
08001930:   rbit    r0, r0
157       	return data;
08001934:   ldr     r3, [r7, #4]
159       };
08001936:   mov     r0, r3
08001938:   adds    r7, #12
0800193a:   mov     sp, r7
0800193c:   pop     {r7}
0800193e:   bx      lr
...............

Содержимое перевернутого r0 никуда не сохранялось, а потом затиралось содержимым r3 и поэтому переменная data выходила нетронутой :)
Если использовать cmsis, то переписать ф-цию можно так:

uint32_t reverse_32(uint32_t data)
{
    return(__RBIT(data));
};

И скомпилированный код стал выглядеть так:

mov     r0, r3
08001922:   adds    r7, #32
08001924:   mov     sp, r7
08001926:   pop     {r7, pc}
155       {
          reverse_32:
08001928:   push    {r7}
0800192a:   sub     sp, #20
0800192c:   add     r7, sp, #0
0800192e:   str     r0, [r7, #4]
08001930:   ldr     r3, [r7, #4]
08001932:   str     r3, [r7, #12]
 531         __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
08001934:   ldr     r3, [r7, #12]
08001936:   rbit    r3, r3
0800193a:   str     r3, [r7, #8]
 544        return(result);
0800193c:   ldr     r3, [r7, #8]
158       	return(__RBIT(data));
0800193e:   nop     
159       };
08001940:   mov     r0, r3
08001942:   adds    r7, #20
08001944:   mov     sp, r7
08001946:   pop     {r7}
08001948:   bx      lr
0800194a:   movs    r0, r0
......

Оптимизация, повторюсь, отключена :), но даже так видно, что перевернутое содержимое регистра r3 сохраняется и в стек и в r0 и, конечно же, ф-ция расчета crc32_ether начинает работать правильно.
Вывод: прямое использование конструкций asm volatile(… чревато и требует контроля после каждой компиляции. Поэтому, по возможности, желательно использовать макросы обертки, вроде __RBIT(uint32_t).
Еще раз, статья золотая, спасибо.
  • avatar
  • vacvvn
  • 25 апреля 2019, 16:59
0
TXB в принципе не очень дружат с подтяжками, т.к. входы — одновременно и выходы (через резючок килоом на 15). Разве что ставить подтяжки ~1к, чтобы перетягивали.
0
Посмотрел коротенько даташит на TXS0104E, как я понимаю TXB0104E не
подходят в данном случае, на них встроенных подтяжек?
  • avatar
  • maxxir
  • 25 апреля 2019, 11:23
0
По поводу отсутствия pull-up'a на MISO один из свежих курьёзов
  • avatar
  • maxxir
  • 25 апреля 2019, 11:21
0
Нет, уж лучше NCP1117 чем непонятная китайская экзотика. ONS — уважаемая фирмочка, сот-223 — корпус с нормальным охлаждением (а карточка может жрать порядка сотни миллиампер). Дешёвая и распространённая. И в большинстве случаев вполне достаточно. А если есть особые требования — я предпочитаю среди тпс-ок глянуть…
+1
Не нравятся мне способы согласования, где на 5в вход подают 3.3в. Частенько SPI и не запускается на полной скорости, в зависимости от фазы луны и производителя микрухи. Такое решение применяется в ардуиновских «сд-ридерах» с али, что уже о чём-то говорит. Там и других косяков хватает — скажем, нет подтяжки на мисо и часть карточек из-за этого не инициализируется. Представить не могу чтобы что-то на ардуине не глючило…
Лучше уж поставить TXS0104E/TXS0108E. Чуть подороже, зато отлично работает. Позволяет корректно отключать питание слота, даже без иголок на CS при включении. Совместимо с мульти-слейвом по обеим сторонам. Подтяжки уже по сути встроены в микруху, что здорово экономит место…
0
Она самая 1:10. И не один не смог докопаться что не по тех заданию. :) ибо размеры по месту. У начальника теперь на столе стоит как напоминание о том что надо грамотно делать ТЗ и давать работу тому кто должен её делать а не тому кто на глаза попался :)
  • avatar
  • skelet
  • 25 апреля 2019, 00:26
0
Микросхемы 40-й серии не предназначены для работы с напряжением на входе выше питания, идет слив в шину питания через защитные диоды на входе. Естественно, это влияет и на динамические характеристики. В 40-й серии есть несколько чисто буферных микрух, но там нужно подавать два напряжения питания — входного и выходного уровня. Кроме того, в моих проектах было несколько ведомых на шине, именно поэтому я использовал шинные формирователи, чтобы иметь возможность отключаться от шины по сигналу #CS (тоже полезная опция).
0
Спс буду знать! BTW HEF4050BT китайский из местного магазина, довольно критичен к SPI speed,
сначала думал что-то в коде напорол (карта периодически терялась). Потом глянул на 2 экземпляре
тестовой системы — микросхемы 4050BT другие и именно на ней шли сбои. Понижение SPI CLK до 4 Mhz
помогло…
  • avatar
  • maxxir
  • 24 апреля 2019, 21:37
+1
Лучше всего использовать микрухи из серии 74LVC или 74LVT, я, в частности, применял для своих проектов 74LVC245. Построены по BiCMOS, что предполагает питание от 1.65В до 3.6В, входы, толерантные к 5.5В и задержку распространения порядка 4нс в зависимости от напряжения питания. К тому же корпус TSSOP-20, меньше не бывает. Я её прямо под слотом монтировал с обратной стороны. В магазинах 12руб стоит, красота!
0
AMS1117-3.3 в SOT-223 Aliexpress: 100 шт. за ~160р. — вот самое им тут место.
  • avatar
  • maxxir
  • 24 апреля 2019, 11:23
+1
Он же для подтяжечных I2C, разве с пуш-пуллом двунаправленным работает?
1117-3.3 сегодня не лучший выбор, сейчас есть много LDO стабилизаторов с кпд получше
«КПД получше»? У линейного-то стабилизатора? Дропаут у них получше, да, но когда у тебя гарантированный дроп в 1.7В в этом смысла нет.
  • avatar
  • Vga
  • 24 апреля 2019, 00:06
0
Вы правы, судя по апноуту от NXP оно годится только для частот ниже 1MHz даже если уменьшить резюки до 3.3k
Для двух линий I2C у меня оно отлично работает
  • avatar
  • UR5SIX
  • 23 апреля 2019, 19:18
0
Согласен — ставлю то что есть у меня(ширпотреб).
  • avatar
  • maxxir
  • 23 апреля 2019, 18:59
0
АФАИК такого рода конвертор как предлагаете Вы выше,
не будет работать надежно на частотах SPI 4-8Mhz.
+ HEF4050BT/CD74HC4050 значительно компактнее.
  • avatar
  • maxxir
  • 23 апреля 2019, 18:57
0
Ну и 1117-3.3 сегодня не лучший выбор, сейчас есть много LDO стабилизаторов с кпд получше и в корпусе SOT-23, например
XC6206P332MR, SPX3819, AP2112
  • avatar
  • UR5SIX
  • 23 апреля 2019, 18:53
0
Жаль что тут сообщения не редактируются, вставил бы картинку поменьше
  • avatar
  • UR5SIX
  • 23 апреля 2019, 18:44
0
Почему использован 74HC4050, а не классического конвертора на MOSFET?
  • avatar
  • UR5SIX
  • 23 апреля 2019, 18:43
0
Что это? Катушка для кабеля чтоль?
  • avatar
  • DIHALT
  • 23 апреля 2019, 13:25