프로그램 사용/busybox2024. 12. 4. 16:59

busybox에 포함된 minicom 보다 더 간략화된 통신 터미널인데

설명이 부실해서 종료하는 법을 알기 힘들다 -_-

 

ctrl-x

[링크 : https://www.armadeus.org/wiki/index.php?title=Microcom]

'프로그램 사용 > busybox' 카테고리의 다른 글

sh: line 1: kill: root: no such pid  (0) 2015.01.05
busybox su가 안될 경우  (0) 2014.12.05
busybox tftp  (0) 2013.06.18
busybox - setconsole  (0) 2011.10.21
busybox ash "cannot open /dev/ttyAS1: no such device"  (0) 2010.04.20
Posted by 구차니
Linux API/linux2024. 12. 4. 14:18

고통 받고 있는 ptn5110에 대해서 검색하는데

리눅스 소스상에 dtb로만 존재해서 문법을 찾아보는 중.

봐야할 부분은 source-pdos의 <PDO_FIXED()>; 인데

	ptn5110: tcpc@50 {
		compatible = "nxp,ptn5110", "tcpci";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_typec>;
		reg = <0x50>;
		interrupt-parent = <&lsio_gpio1>;
		interrupts = <3 IRQ_TYPE_LEVEL_LOW>;

		usb_con1: connector {
			compatible = "usb-c-connector";
			label = "USB-C";
			power-role = "source";
			data-role = "dual";
			source-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>;

			ports {
				#address-cells = <1>;
				#size-cells = <0>;

				port@0 {
					reg = <0>;

					typec_dr_sw: endpoint {
						remote-endpoint = <&usb3_drd_sw>;
					};
				};

				port@1 {
					reg = <1>;

					typec_con_ss: endpoint {
						remote-endpoint = <&usb3_data_ss>;
					};
				};
			};
		};
	};

 

<> 는 cell 이라고 부르고

[링크 : https://kernel.bz/boardPost/118684/3]

 

unsigned int로 된 배열인것 같은데

  • 텍스트 문자열 (널로 종료 됨)은 큰 따옴표로 표시됩니다.
    • string-property = "a string";
  • ‘셀’은 꺾쇠 괄호로 구분 된 32 비트 부호없는 정수입니다.
    • cell-property = <0xbeef 123 0xabcd1234>;
  • 이진 데이터는 대괄호로 구분됩니다.
    • binary-property = [0x01 0x23 0x45 0x67];
  • 다른 표현의 데이터는 쉼표를 사용하여 함께 연결할 수 있습니다.
    • mixed-property = "a string", [0x01 0x23 0x45 0x67], <0x12345678>;
  • 쉼표는 문자열 목록을 만드는 데에도 사용됩니다.
    • string-list = "red fish", "blue fish";

[링크 : https://jung-max.github.io/2019/10/22/Device_Tree_문법/]

 

도대체 저 매크로는 어떻게 dtb에서 인식을 하고 쓰는거지? 하고 찾아보니

아래의 경로에서 dt-bindings 라는 곳에서 정의가 되어있었다.

linux-master/scripts/dtc/include-prefixes/dt-bindings/usb

 

선언을 하도 여러군데서 하다보니 일반소스에서만 선언된 줄 알았는데..

#define PDO_FIXED(mv, ma, flags) \
    (PDO_TYPE(PDO_TYPE_FIXED) | (flags) | \
    PDO_FIXED_VOLT(mv) | PDO_FIXED_CURR(ma))

 

device tress binding 이라는 녀석이 또 추가 되었나 보다..

[링크 : https://docs.zephyrproject.org/latest/build/dts/bindings.html]

'Linux API > linux' 카테고리의 다른 글

linux 시리얼 포트 열기(termios)  (0) 2025.10.11
LD_DEBUG=libs  (0) 2025.06.02
usb hid, hidraw  (0) 2024.03.11
linux 멀티터치 프로토콜  (0) 2024.03.08
btrfs CoW  (0) 2024.02.15
Posted by 구차니
회사일/USB PD2024. 12. 4. 11:50

PDO 쪽으로 검색해서 발견했는데

[링크 : https://chromium.googlesource.com/chromiumos/platform/ec/+/firmware-twinkie-9628.B/include/usb_pd.h]

 

드라이버는 이쪽 인 것 같고

[링크 : https://github.com/torvalds/linux/tree/master/drivers/usb/typec]

 

헤더는 이쪽인 것 같다.

/* PDO: Power Data Object */
#define PDO_MAX_OBJECTS 7

enum pd_pdo_type {
PDO_TYPE_FIXED = 0,
PDO_TYPE_BATT = 1,
PDO_TYPE_VAR = 2,
PDO_TYPE_APDO = 3,
};

#define PDO_TYPE_SHIFT 30
#define PDO_TYPE_MASK 0x3

#define PDO_TYPE(t) ((t) << PDO_TYPE_SHIFT)

#define PDO_VOLT_MASK 0x3ff
#define PDO_CURR_MASK 0x3ff
#define PDO_PWR_MASK 0x3ff

#define PDO_FIXED_DUAL_ROLE BIT(29) /* Power role swap supported */
#define PDO_FIXED_SUSPEND BIT(28) /* USB Suspend supported (Source) */
#define PDO_FIXED_HIGHER_CAP BIT(28) /* Requires more than vSafe5V (Sink) */
#define PDO_FIXED_EXTPOWER BIT(27) /* Externally powered */
#define PDO_FIXED_USB_COMM BIT(26) /* USB communications capable */
#define PDO_FIXED_DATA_SWAP BIT(25) /* Data role swap supported */
#define PDO_FIXED_UNCHUNK_EXT BIT(24) /* Unchunked Extended Message supported (Source) */
#define PDO_FIXED_FRS_CURR_MASK (BIT(24) | BIT(23)) /* FR_Swap Current (Sink) */
#define PDO_FIXED_FRS_CURR_SHIFT 23
#define PDO_FIXED_PEAK_CURR_SHIFT 20
#define PDO_FIXED_VOLT_SHIFT 10 /* 50mV units */
#define PDO_FIXED_CURR_SHIFT 0 /* 10mA units */

#define PDO_FIXED_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_FIXED_VOLT_SHIFT)
#define PDO_FIXED_CURR(ma) ((((ma) / 10) & PDO_CURR_MASK) << PDO_FIXED_CURR_SHIFT)

#define PDO_FIXED(mv, ma, flags) \
(PDO_TYPE(PDO_TYPE_FIXED) | (flags) | \
 PDO_FIXED_VOLT(mv) | PDO_FIXED_CURR(ma))

#define VSAFE5V 5000 /* mv units */

#define PDO_BATT_MAX_VOLT_SHIFT 20 /* 50mV units */
#define PDO_BATT_MIN_VOLT_SHIFT 10 /* 50mV units */
#define PDO_BATT_MAX_PWR_SHIFT 0 /* 250mW units */

#define PDO_BATT_MIN_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_BATT_MIN_VOLT_SHIFT)
#define PDO_BATT_MAX_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_BATT_MAX_VOLT_SHIFT)
#define PDO_BATT_MAX_POWER(mw) ((((mw) / 250) & PDO_PWR_MASK) << PDO_BATT_MAX_PWR_SHIFT)

#define PDO_BATT(min_mv, max_mv, max_mw) \
(PDO_TYPE(PDO_TYPE_BATT) | PDO_BATT_MIN_VOLT(min_mv) | \
 PDO_BATT_MAX_VOLT(max_mv) | PDO_BATT_MAX_POWER(max_mw))

#define PDO_VAR_MAX_VOLT_SHIFT 20 /* 50mV units */
#define PDO_VAR_MIN_VOLT_SHIFT 10 /* 50mV units */
#define PDO_VAR_MAX_CURR_SHIFT 0 /* 10mA units */

#define PDO_VAR_MIN_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_VAR_MIN_VOLT_SHIFT)
#define PDO_VAR_MAX_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_VAR_MAX_VOLT_SHIFT)
#define PDO_VAR_MAX_CURR(ma) ((((ma) / 10) & PDO_CURR_MASK) << PDO_VAR_MAX_CURR_SHIFT)

#define PDO_VAR(min_mv, max_mv, max_ma) \
(PDO_TYPE(PDO_TYPE_VAR) | PDO_VAR_MIN_VOLT(min_mv) | \
 PDO_VAR_MAX_VOLT(max_mv) | PDO_VAR_MAX_CURR(max_ma))

enum pd_apdo_type {
APDO_TYPE_PPS = 0,
};

#define PDO_APDO_TYPE_SHIFT 28 /* Only valid value currently is 0x0 - PPS */
#define PDO_APDO_TYPE_MASK 0x3

#define PDO_APDO_TYPE(t) ((t) << PDO_APDO_TYPE_SHIFT)

#define PDO_PPS_APDO_MAX_VOLT_SHIFT 17 /* 100mV units */
#define PDO_PPS_APDO_MIN_VOLT_SHIFT 8 /* 100mV units */
#define PDO_PPS_APDO_MAX_CURR_SHIFT 0 /* 50mA units */

#define PDO_PPS_APDO_VOLT_MASK 0xff
#define PDO_PPS_APDO_CURR_MASK 0x7f

#define PDO_PPS_APDO_MIN_VOLT(mv) \
((((mv) / 100) & PDO_PPS_APDO_VOLT_MASK) << PDO_PPS_APDO_MIN_VOLT_SHIFT)
#define PDO_PPS_APDO_MAX_VOLT(mv) \
((((mv) / 100) & PDO_PPS_APDO_VOLT_MASK) << PDO_PPS_APDO_MAX_VOLT_SHIFT)
#define PDO_PPS_APDO_MAX_CURR(ma) \
((((ma) / 50) & PDO_PPS_APDO_CURR_MASK) << PDO_PPS_APDO_MAX_CURR_SHIFT)

#define PDO_PPS_APDO(min_mv, max_mv, max_ma) \
(PDO_TYPE(PDO_TYPE_APDO) | PDO_APDO_TYPE(APDO_TYPE_PPS) | \
PDO_PPS_APDO_MIN_VOLT(min_mv) | PDO_PPS_APDO_MAX_VOLT(max_mv) | \
PDO_PPS_APDO_MAX_CURR(max_ma))


/* RDO: Request Data Object */
#define RDO_OBJ_POS_SHIFT 28
#define RDO_OBJ_POS_MASK 0x7
#define RDO_GIVE_BACK BIT(27) /* Supports reduced operating current */
#define RDO_CAP_MISMATCH BIT(26) /* Not satisfied by source caps */
#define RDO_USB_COMM BIT(25) /* USB communications capable */
#define RDO_NO_SUSPEND BIT(24) /* USB Suspend not supported */

#define RDO_PWR_MASK 0x3ff
#define RDO_CURR_MASK 0x3ff

#define RDO_FIXED_OP_CURR_SHIFT 10
#define RDO_FIXED_MAX_CURR_SHIFT 0

#define RDO_OBJ(idx) (((idx) & RDO_OBJ_POS_MASK) << RDO_OBJ_POS_SHIFT)

#define PDO_FIXED_OP_CURR(ma) ((((ma) / 10) & RDO_CURR_MASK) << RDO_FIXED_OP_CURR_SHIFT)
#define PDO_FIXED_MAX_CURR(ma) ((((ma) / 10) & RDO_CURR_MASK) << RDO_FIXED_MAX_CURR_SHIFT)

#define RDO_FIXED(idx, op_ma, max_ma, flags) \
(RDO_OBJ(idx) | (flags) | \
 PDO_FIXED_OP_CURR(op_ma) | PDO_FIXED_MAX_CURR(max_ma))

#define RDO_BATT_OP_PWR_SHIFT 10 /* 250mW units */
#define RDO_BATT_MAX_PWR_SHIFT 0 /* 250mW units */

#define RDO_BATT_OP_PWR(mw) ((((mw) / 250) & RDO_PWR_MASK) << RDO_BATT_OP_PWR_SHIFT)
#define RDO_BATT_MAX_PWR(mw) ((((mw) / 250) & RDO_PWR_MASK) << RDO_BATT_MAX_PWR_SHIFT)

#define RDO_BATT(idx, op_mw, max_mw, flags) \
(RDO_OBJ(idx) | (flags) | \
 RDO_BATT_OP_PWR(op_mw) | RDO_BATT_MAX_PWR(max_mw))

#define RDO_PROG_VOLT_MASK 0x7ff
#define RDO_PROG_CURR_MASK 0x7f

#define RDO_PROG_VOLT_SHIFT 9
#define RDO_PROG_CURR_SHIFT 0

#define RDO_PROG_VOLT_MV_STEP 20
#define RDO_PROG_CURR_MA_STEP 50

#define PDO_PROG_OUT_VOLT(mv) \
((((mv) / RDO_PROG_VOLT_MV_STEP) & RDO_PROG_VOLT_MASK) << RDO_PROG_VOLT_SHIFT)
#define PDO_PROG_OP_CURR(ma) \
((((ma) / RDO_PROG_CURR_MA_STEP) & RDO_PROG_CURR_MASK) << RDO_PROG_CURR_SHIFT)

#define RDO_PROG(idx, out_mv, op_ma, flags) \
(RDO_OBJ(idx) | (flags) | \
 PDO_PROG_OUT_VOLT(out_mv) | PDO_PROG_OP_CURR(op_ma))

[링크 : https://github.com/torvalds/linux/blob/master/include/linux/usb/pd.h]

'회사일 > USB PD' 카테고리의 다른 글

usb pd 제거 혹은 통신 실패  (0) 2025.12.11
i.mx8 evk uboot usb pd 메시지  (0) 2024.12.05
USB PD 용어 정리중  (0) 2024.12.03
USB PD SOP*?  (0) 2024.12.03
USB-C PTN5110 케이블 방향에 따른 데이터 차이  (0) 2024.11.27
Posted by 구차니

계엄령 경고했던 김민석 “尹, 오더만 내리면 계엄 완성이라 생각했을 것”

[링크 : https://v.daum.net/v/20241204085934850]

'개소리 왈왈 > 정치관련 신세한탄' 카테고리의 다른 글

대통령 출국금지...?!  (1) 2024.12.09
집단의 사이코패스...?  (0) 2024.12.08
비상 계엄 선포?  (0) 2024.12.03
니들이 무급으로 가덩가  (2) 2024.09.25
태극기 뒤집기에 기미가요라..  (2) 2024.08.15
Posted by 구차니
Posted by 구차니
회사일/USB PD2024. 12. 3. 14:34

PDP Rating(Power Delivery Power Rating)
[링크 : https://usb.org/sites/default/files/D2T2-1%20-%20USB%20Power%20Delivery.pdf]


PDO(Power Data Object)
APDO(Augmented Power Data Object) = PPS(Programmable Power supply)
[링크 : https://smartchoice.kr/usb-고속충전의-종류와-usb-pd-충전에-대해-자세히-알아보자/]

 

AMS (Atomic message sequence)

[링크 : https://www.st.com/resource/en/user_manual/um2552-managing-usb-power-delivery-systems-with-stm32-microcontrollers-stmicroelectronics.pdf]

 

PDO는 또 머냐...

[링크 : https://velog.io/@zhemdrawer/USB-PD-이해]

 

PDOs - Power-Data Objects

RDO - Request-Data Object

[링크 : https://www.ti.com/lit/an/slva842/slva842.pdf]

 

+

2024.12.08

PPS(Programmable Power Supply) 

[링크 : https://www.belkin.com/kr/support-article/?articleNum=318878]

 

USB PD 1.0 - profile

USB PD 2.0 - PDO

USB PD 3.0 - APDO / PPS

[링크 : https://namu.wiki/w/USB%20PD]

 

 

+

2024.12.13

[링크 : https://velog.io/@zhemdrawer/USB-PD-이해]

'회사일 > USB PD' 카테고리의 다른 글

i.mx8 evk uboot usb pd 메시지  (0) 2024.12.05
linux kernel USB PD 관련 검색  (0) 2024.12.04
USB PD SOP*?  (0) 2024.12.03
USB-C PTN5110 케이블 방향에 따른 데이터 차이  (0) 2024.11.27
USB PD - DRP?  (0) 2024.11.25
Posted by 구차니
회사일/USB PD2024. 12. 3. 12:45

걍 패킷을 보낸다 라는걸 죄다 SOP라고 퉁치는것 같은데

SOP

SOP'

SOP''

SOP* 이런게 나와서 헷갈리는 중..

 

SOP*
• Start of packet (SOP/SOP’/SOP’’)

[링크 : https://usb.org/sites/default/files/D2T2-1%20-%20USB%20Power%20Delivery.pdf]

 

SOP* - The Start of Frame field in a USB Power Delivery packet indicates the intended recipient of the packet.

[링크 : https://ww1.microchip.com/downloads/en/AppNotes/00001974A.pdf]

 

50h 에 TRANSMIT 이라는 레지스터가 있는데 Read / Write 이고 [2:0] 3비트는 아래의 값을 지닌댄다.

도대체 cable reset은 왜 저기서 튀어나오는걸까?

[링크 : https://www.nxp.com/docs/en/data-sheet/PTN5110.pdf]

 

각 패킷별 전송이나 응답할 녀석이 달라지는건가?

[링크 : https://www.graniteriverlabs.com/en-us/technical-blog/usb-pd-power-delivery-spec-versions]

 

 

5
Sending a USB PD message
The general steps of transmitting a SOP* message are listed below. Please consult
sections 4.7.1, 4.7.2, and 4.7.3 of the TCPC specification[3] for more detailed
implementation and examples.
• Step 0: TCPM writes the content of the message to be transmitted into the
TRANSMIT_BUFFER
• Step 1: TCPM writes to TRANSMIT requesting SOP* transmission
• Step 2: The outcome reported by the TCPC may be one of three indications after
asserting the Alert# pin:
– If the TCPC PHY layer successfully transmits the message, the TCPC sets the
Transmission Successful bit in the ALERT register.
– If the TCPC PHY layer did not get any response after retries, the TCPC sets the
Transmission Failed bit in the ALERT register.
– If the transmission was discarded due to an incoming message, the TCPC sets the
Transmission Discarded bit in the ALERT register.
• Step 3: Before requesting another transmission, the TCPM shall clear the alert by
writing a 1 to the asserted bit in the ALERT register.
When transitioning through the steps of transmitting SOP* message, TCPC may assert
ALERT.ReceiveStatus or ALERT.ReceivedHardReset bit at any time to notify that a
message was received.

[링크 : https://www.nxp.com/docs/en/application-note/AN12137.pdf]

 

위에서 4.7.1~4.7.3을 보라는데 제목만 봐서는.. 흐음..

4.7 USB PD Communication Operational Model
4.7.1 Transmitting an SOP* USB PD Message with Less than or Equal to 128 Data Bytes
4.7.2 Transmitting an SOP* USB PD Message with Greater than 128 Data Bytes
4.7.3 Transmitting a Hard Reset Message

[링크 : https://www.usb.org/sites/default/files/documents/usb-port_controller_specification_rev2.0_v1.0_0.pdf]

 

RDO (Request Data Object)

[링크 : https://www.ti.com/lit/an/slva842/slva842.pdf]

 

 

 

'회사일 > USB PD' 카테고리의 다른 글

linux kernel USB PD 관련 검색  (0) 2024.12.04
USB PD 용어 정리중  (0) 2024.12.03
USB-C PTN5110 케이블 방향에 따른 데이터 차이  (0) 2024.11.27
USB PD - DRP?  (0) 2024.11.25
TCPC, TCPM  (0) 2024.11.22
Posted by 구차니
회사일/BQ25703A2024. 12. 2. 18:00

RESET_REG랑 RESET_VINDPM을 둘다 set 하고 하니 VINDPM의 값이 변경되지 않는 현상이 발생함.

그냥 RESET_VINDPM 만 설정해주면 된다.

해당 값은 0x0B/0x0A 의 InputVoltage Register 값에 있는데

 

VBUS-1.28V 로 초기화 되는 값이라는데

반대로 보면.. 1.28V를 더해줘야 하냐.. 그게 아니라면 DC offset이 3.2V 니까(0x00) 일때 3.2V를 더해주는게 맞냐 좀 헷갈린다.

'회사일 > BQ25703A' 카테고리의 다른 글

bq40z50 충전 중단 조건  (0) 2025.12.04
bq25703A ICO 설정 차이  (0) 2025.10.28
bq25703A NVDC  (0) 2024.11.29
배터리 충전  (0) 2024.11.28
bq25703A i2c 읽기, 쓰기  (0) 2024.11.22
Posted by 구차니

node.js 이동경로  3d로 그리기 등

[링크 : https://github.com/austinbaccus/forza-telemetry/]

 

c#, 텍스트

[링크 : https://github.com/geeooff/forza-data-web]

 

M5Stack-CoreS3 기반

Horizon은 324 byte?

 if (packet.length() > 310 && packet.length() < 332) // packet length now 331 for motorsport?
                         {                                                   // Check we have a correctly-sized Forza packet. Note Horizon packets are 324 bytes, Motorsport packets are 311 bytes
                             if (packet.length() == 324)
                             {
                                //  USBSerial.println("Got Horizon packet");
                             }
                            else
                             { // Motorsport packet
                             }
                         }

[링크 : https://github.com/richstokes/Forza-TCS/tree/master]

 

python

[링크 : https://github.com/nettrom/forza_motorsport]

 

golang, 웹기반

[링크 : https://github.com/richstokes/Forza-data-tools]

Posted by 구차니
프로그램 사용/ncurses2024. 12. 2. 10:22

screen - window 계층 구조인 것 같고

상자는 세로, 가로로 쓸 문자만 넣어주면 되는 듯. 터미널 사이즈에 따른 동적 변화는 따로 찾아봐야겠네.

#include <ncurses.h>

int main(void){
    initscr();
    start_color();
    init_color(1, 0, 1000, 0);      // 1번 색상(글자색): 초록색
    init_color(2, 0, 0, 1000);      // 2번 색상(배경색): 파랑색
    init_pair(1, 1, 2);             // 1번 Color pair를 초록 글자색과 파랑 배경색으로 지정
    
    WINDOW * win = newwin(20, 20, 10, 10);
    box(win, '|', '-');
    waddch(win, 'A' | COLOR_PAIR(1));   // 1번 Color pair를 적용해 문자 출력

    refresh();
    wrefresh(win);
    getch();
    endwin();
}

 

start_color() 로 색상을 사용할 수 있도록 설정하고

init_color(index, , , ,)로 팔레트를 초기화 하고

attron(attribute on), attroff(attribute off) 함수로 색상을 적용/해제 한다.

#include <ncurses.h>

int main(void){
    initscr();
    start_color();

    init_color(1, 0, 1000, 0);
    init_color(2, 0, 0, 1000);
    init_pair(1, 1, 2);

    attron(COLOR_PAIR(1));    // 출력 색상을 1번 Color pair로 변경
    printw("Hello");
    attroff(COLOR_PAIR(1));   // 속성 해제

    refresh();
    getch();
    endwin();
}

[링크 : https://magmatart.dev/development/2017/06/15/ncurses4.html]

'프로그램 사용 > ncurses' 카테고리의 다른 글

ncurse window 관리 함수  (0) 2026.01.28
ncurse screen size  (0) 2025.09.30
ncurses 예제  (0) 2024.11.30
ncurse example  (0) 2022.05.17
ncurse  (0) 2015.04.27
Posted by 구차니