LINUX.ORG.RU

Помогите найти последовательный порт

 , , ,


0

3

Железка [1] [2] на ARMv7 с онтопиком; доступ по SSH.

Вижу указание на сущестование последовательного порта:

$ cat /proc/cmdline 
console=ttyS0,115200 rootfstype=squashfs,ext2 root=/dev/ram0 debug
$ grep tty /etc/inittab
::once:/usr/local/bin/start_getty -L 115200 ttyS0 vt100
$ cat /proc/tty/driver/serial 
serinfo:1.0 driver revision:
0: uart:16550A mmio:0xFFC02000 irq:194 tx:2152 rx:0 RTS|DTR
1: uart:unknown port:00000000 irq:0

Помогите найти его контакты на плате. Из инструметов только мультиметр.

UPD: Возможно, порт не один:

$ ls -l /sys/class/tty/ | grep -v virtual
lrwxrwxrwx    1 root     root             0 Jan  1  1970 ttyS0 -> ../../devices/soc.0/ffc02000.serial0/tty/ttyS0
lrwxrwxrwx    1 root     root             0 Jan  1  1970 ttyS1 -> ../../devices/platform/serial8250/tty/ttyS1

P.S.: Если вы знаете хостинг картинок лучше — предлагайте.

★★

Последнее исправление: Evenik (всего исправлений: 6)

Ну для начала найти землю, она должна звониться на минус питания, поэтому это легко. Затем потыкать плюсовым щупом тест-поинты и замерить напряжение. Затем можно взять UART-адаптер который указанное напряжение тянет, зацепить GND за GND, а к Rx подцепить щуп мультиметра. На компе запустить программу для последовательного порта, например picocom -b 115200 /dev/ttyUSB0 и прижимая щуп к каждому тест-поинту, перезагружать устройство. Где пойдут буквы — там Tx. Затем можно поискать Rx где-то рядом с ним.

А если у тебя нет UART-адаптера, то нахождение поинтов будет малополезным. Но его можно купить, стоит недорого.

Вижу четыре тест-поинта в ряд, возможно это оно.

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 3)

Узнать какой процессор стоит. Почитать на него даташит. Определить, как настраивается uart, в каких адресах памяти лежат нужные флаги. Прочитать эти флаги и определить, на какие пины выходит UART. Подцепиться к этим пинам, если это не BGA и проверить логическим анализатором или осциллографом справедливость своих предположений. Далее попробовать отследить, куда ведет соответствующая дорожка на плате. Если BGA или дорожка уходит в середину платы, тогда без разрушения платы только пробовать всё подряд.

Ну для начала, конечно, всех очевидных кандидатов проверит.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от vbr

У BGA fanout-ы маску снять

А в теории, даже мультиметр, если слать FF и затем 00 и менять раз в секунду, то даже мультиметр увидит. уровень будет прыгать раз в секунду от высокого до низкого, там же усреднение обычно на таких приборах

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

Померять напряжение везде, аккуратно выписывая результаты на бумажку.
Потом запустить что-нибудь непрерывно ДИЧАЙШЕ НАВАЛИВАТЬ БАЙТЫ в порт и снова замерить напряжение везде, аккуратно сверяясь с бумажкой.

thesis ★★★★★
()
Ответ на: комментарий от Xenius

Вижу четыре тест-поинта в ряд, возможно это оно.

Это А может нераспаянные контакты на фото 1 сверху слева?

Не вижу 4 тест-поинта в ряд (фото 2). Можно ткнуть меня носом?

Evenik ★★
() автор топика
Последнее исправление: Evenik (всего исправлений: 1)
Ответ на: комментарий от Xenius

перезагружать устройство

Виндузятник детектед. Зачем перезагружать, если есть доступ по ssh? Можно же просто писать в /dev/ttyS0.

2 TC:

$ while true; do dd if=/dev/zero of=/dev/ttyS0 bs=57 count=1; sleep 0.005; done

Потом берёшь проводные научники-затычки, вставляешь в уши, одной рукой держишь примерно за землю миниджека (ближайший к проводу контакт), а другой - за любую металлическую детальку на плате и тычешь центральным контактом миниджека во все контрольные точки подряд. На нужном контакте услышишь треск ~100 герц. При нажатии ^C в консоли сигнал пропадёт.

Под твою ответственность, конечно. Плата может перезагрузиться или зависнуть, но ничего сгореть не должно, если крепко держаться руками за контакты)

anonymous
()
Ответ на: комментарий от anonymous

Момент с SSH я упустил, да, но я таким методом находил контакты UART на устройствах вроде роутера, где его не было, но были не подписанные контакты. Способ интересный, но 100 Гц в обычных наушниках плохо слышно, стоит сделать около 0.3-7 кГц, я думаю. Так как бодрейт 115200 и байт 10 бит, учитывая стоп бит, это 11520, то есть чередование нулей и ff как раз даст подходящую частоту около 5кГц.

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от Xenius

Можно и так, да, чередуя 0xff и 0. Хорошая идея. Хотя и 100 герц прекрасно слышно, я проверял прям ту самую команду и тыкал штекером в TX) Там же не синусоида, а прямоугольные импульсы которые будет на любой аппаратуре слышно, так как спектр импульса бесконечен. Можно даже 1 герц поставить и эти щелчки тоже будет слышно.

anonymous
()
Ответ на: комментарий от Xenius
$ ffmpeg -i yamete.opus -ac 1 -ar 92160 -f u8 yamete.u -y
$ python conv1b.py
$ while true; do cat yamete.u > /dev/ttyS0; done
^C
$ cat conv1b.py
f=open('yamete.u', 'r+b'); r=f.read(); x=0; [x:=(x<<1)|(b>127) for b in r]
w=x.to_bytes(len(r)//8+1, 'big'); f.seek(0); f.write(w); f.truncate()

Или с готовым файлом:

$ base64 -d Hdoa.zst.b64 | unzstd > yamete.u
$ while true; do cat yamete.u > /dev/ttyS0; done

92160 - это 8/10 от 115200. По-хорошему надо конвертить в 115200 и при переводе в 1-битный формат пропускать каждый 9 и 10 биты. Но и так неплохо получилось.

:)

anonymous
()

Cудя по всему, это Altera, какой-то RDS. Явных ног для последовательного порта нет. Можно потыкаться в пятаки которые 4 или 5 в ряд. Еще можно поискать на нераспаянном разъеме рядом с eth.

А лучше всего поискать описание платы. Явно фабричная, можно найти даташит.

yax123 ★★★★★
()

Xenius, Anonymous[ы] и все-все-все, вы крутые, спасибо!

Доберусь до платы теперь в воскресенье, тогда и попробую. Вместо UART-адаптера могу использовать UART на Raspberry Pi.

Evenik ★★
() автор топика
Ответ на: комментарий от anonymous

Исправил баг с порядком бит в байте, сделал правильные пропуски и добавил дизеринг - получилось вообще хайфай аудио) особенно если бордейт поднять.

import os
dithering = True
x = i = d = a = v = 0
while buf:=os.read(0, 2**16):
    for u8 in buf:
        if i < 8:
            v = (u8 - 128) - (a - v) * dithering
            a = 127 - 255 * (v < 0)
            x |= (a > 0) << i
        elif i == 8:
            os.write(1, bytes([x]))
            x = 0
        i = (i + 1) % 10
$ stty -F /dev/ttyS0 1000000
$ link="$(yt-dlp -xg 'https://www.youtube.com/watch?v=sSYoz0JmnZo')"
$ ffmpeg -i "$link" -ac 1 -ar 1000000 -f u8 - | python conv1b.py > /dev/ttyS0

Без дизеринга погромче получается, но когда в аудио много низких частот звук сильно искажается.

anonymous
()
Ответ на: комментарий от sehellion

Как уже заметили, попробовать стоит, где 4 и 5 пятаков в ряд

А почему? Кроме Rx и Tx могут быть ещё контакты для управления потоком?

Evenik ★★
() автор топика
Последнее исправление: Evenik (всего исправлений: 1)
Ответ на: комментарий от anonymous

Не могу сказать, что услышал музыку, тем более, что смог бы узнать оригинальную мелодию, но нужный пятачок (Tx) я нашёл! Завтра буду подключаться UART’ом Raspberry Pi и искать Rx. Ещё раз большое спасибо!!!

Evenik ★★
() автор топика
Последнее исправление: Evenik (всего исправлений: 2)
Ответ на: комментарий от Evenik

но нужный пятачок (Tx) я нашёл!

Если отметишь на фотке и опишешь словами, возможно ктото в будущем не услышит мелодию… но сэкономит время.

anonymous
()
Ответ на: комментарий от Evenik

Rx можно тем же способом найти. Просто читать терминалом из порта и при касании нужного контакта в терминале будет появляться всякий мусор. Лучше даже включить в терминале отображение hex, если есть.

А музыка может быть тихой, если наушники низкоомные или если не держаться за металлическую детальку и джек. Либо как-то не так или не за то держаться) Ещё можно поставить dithering = False, тогда погромче должно быть. И от напряжения, конечно, тоже зависит.

Ещё раз большое спасибо!!!

Не за что. Поздравляю с находкой)

anonymous
()
Ответ на: комментарий от anonymous

Tx — второй пятачок снизу. Подключил к нему Raspberry Pi, вывод увидел, но не очень стабильно. С Rx пока не получается никаким способом. Возможно, он не выведен на тест-поинты (они же для контроля производства). Противоположно Tx-пятаку находится нераспаянный 26-контактный разъём, поищу там.

Evenik ★★
() автор топика
Ответ на: комментарий от Evenik

Бывает два дополнительных контакта для питания внешнего устройства.

Ещё бывает Rx+/Rx- и Tx+/Tx-, а к ним, соответственно, GND. Такой вариант также известен как RS-422. Вряд ли это твой случай.

Aceler ★★★★★
()

Есть ещё доля вероятности что ты сжег порт. По хорошему надо было еще сопротивление Ом на 50-100 добавить последовательно в схему «щупа»

superuser ★★★★☆
()