inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.

다른 사람 소스 분석하는 방법 5

OneWire_WriteBit와 OneWire_ReadBit함수에 대해 궁금한 점이 있습니다.

해결된 질문

94

채우정

작성한 질문수 5

0

if (bit)

{

/* Set line low */

ONEWIRE_LOW(OneWireStruct);

ONEWIRE_OUTPUT(OneWireStruct);

ONEWIRE_DELAY(10);

 

/* Bit high */

ONEWIRE_INPUT(OneWireStruct);

 

/* Wait for 55 us and release the line */

ONEWIRE_DELAY(55);

ONEWIRE_INPUT(OneWireStruct);

}

 

위는 OneWire_WriteBit의 한 부분으로 이 부분에서 LOW로 만들어서 output모드로 만든 다음에 10us만큼 딜레이를 줘서 input 모드로 만들어서 버스를 high로 만드는 것이라고 이해했습니다. 그런데 이 이후에 딜레이를 55us 만큼 준 다음에 다시 input 모드로 만드는 이유는 무엇인가요?

inline uint8_t OneWire_ReadBit(OneWire_t* OneWireStruct)

{

uint8_t bit = 0;

 

/* Line low */

ONEWIRE_LOW(OneWireStruct);

ONEWIRE_OUTPUT(OneWireStruct);

ONEWIRE_DELAY(2);

 

/* Release line */

ONEWIRE_INPUT(OneWireStruct);

ONEWIRE_DELAY(10);

 

/* Read line value */

if (HAL_GPIO_ReadPin(OneWireStruct->GPIOx, OneWireStruct->GPIO_Pin)) {

/* Bit is HIGH */

bit = 1;

}

 

/* Wait 50us to complete 60us period */

ONEWIRE_DELAY(50);

 

/* Return bit value */

return bit;

}

그리고 OneWire_ReadBit에서 input모드로 바꾸는 것이 버스를 high로 만든다는 것을 주석으로 짐작한거라서 정확히 바꾼 이유를 잘 모르겠습니다. input모드가 디폴트 모드인건가요?

Raspberry-Pi arduino 임베디드

답변 1

1

ojtube5

위는 OneWire_WriteBit의 한 부분으로 이 부분에서 LOW로 만들어서 output모드로 만든 다음에 10us만큼 딜레이를 줘서 input 모드로 만들어서 버스를 high로 만드는 것이라고 이해했습니다. 그런데 이 이후에 딜레이를 55us 만큼 준 다음에 다시 input 모드로 만드는 이유는 무엇인가요?

일단, oneWire 프로토콜은 선 한가닥만 씁니다.
그래서, 내가 데이터를 전송한 후에는, 항상 input 모드로 내가 다른 데이터를 받을 수 있는 상태로 돌아가야 합니다. 그래서 input 모드로 돌아가는 거예요. 안 그러면 상대방이 데이터를 보내도 되는지 아닌지 알 수가 없어서요. 그리고, 딜레이 55us를 주는 이유는 약속입니다. 최소한 이시간의 쉬는 시간을 갖는것이 onewWire 통신의 약속입니다.


그리고 OneWire_ReadBit에서 input모드로 바꾸는 것이 버스를 high로 만든다는 것을 주석으로 짐작한거라서 정확히 바꾼 이유를 잘 모르겠습니다. input모드가 디폴트 모드인건가요?

이 질문도 위와 같이 대답할 수 있겠네요..

아무튼 궁금하신게, 왜 input 모드가 디폴트 인가 인데,
정말 간단한 이유 입니다.

말할 수 있는 방법이, 물리적으로 선 한 가닥이기 때문에, 말이 끝나면, 나 이제 말 끝났어.
하면서 input 모드로 돌아가서 듣는 준비를 하는 것 입니다.


답변이 너무 늦어서 죄송합니다.

0

채우정

알려주셔서 감사합니다!

13강 프로젝트생성해보기 관련 질문

0

22

3

난방실만들기.4 진행 중, m_state 값 초기화가 안됩니다..

0

35

2

IDE 설치 영상 관련 문의

0

51

2

[정보 공유] STM32CubeIDE 버전별 이슈 정리 (1.19 미만 / 2.0.0 이상)

0

137

2

스위치회로 value값 바뀌지 않음

0

46

2

FND 점등에 성공했는데, Controller.c 디버깅 중 문제가 생겼습니다.

0

61

2

FND 7세그먼트 처음 킬 때의 '7777'불이 안 들어옵니다.

0

74

2

포트에 안잡히면 x쉘에서 Port설정을 어떻게 하죠..?

0

59

2

빌드 및 디버깅 오류

0

114

2

보드에 불이 안들어옵니다.

0

74

2

씽크 오류

0

57

1

고추건조기 개발보드 전원연결 문제점..

0

74

2

회로도 핀 연결 질문

0

68

2

elf 파일을 찾을수 없다는 오류

0

72

2

Nucleo 보드로 대체

0

85

2

구매해야 하는 물품 문의

0

97

2

ST-Link 디버깅 에러

0

84

3

강의 사용하시는 pdf는 어디에 있나요?

0

111

2

이전 질문 재질문입니다.!

0

77

2

다른 개발 실습 보드 사용문의

0

96

2

smt32 Cube Ide 설치관련 에러입니다

0

229

2

제가 1년전에 구매해서 이제 뜯어봤는데 납땜이 겹쳐있는데 사용해도 괜찮을까요?

0

94

2

타이머 최대 주파수 질문

0

66

2

초기 신호에 대한 질문

0

90

2