i2c통신할 때 칩에있는 레지스터에서 받아 온 값이 msb바이트와 lsb바이트가 바뀌어서 받을 수도 있나요?
글쓴이: dct_lim / 작성시간: 금, 2016/02/05 - 5:12오후
i2c통신할 때 칩에있는 레지스터에서 read한 값이 한바이트를 넘을 때
MSB먼저오고 그 다음 LSB신호가 오잔아요
그걸 CPU가 MSB를 받은 뒤 한바이트씩 쉬프트하면서 받나요?
아니면 MSB를 LSB자리에 받고 그 뒤에 오는 바이트를 MSB쪽에다 계속 붙여넣는 방식으로 받기도 하나요?
한마디로 0X2345가 올 때
0X2345로 받나요 0x4523으로 받나요?
제 타겟은 MSB LSB를 바꿔서 받는 것 같아서요..
커널마다 다를 것 같긴 한데
만약 커널마다 다르다면 커널 어디쪽을 살펴보면 그 방식을 알 수 있을까요?
제 타겟은 TEGRA K1입니다.
답변부탁드립니다..
감사합니다.
Forums:
해봐야 알겠네요. ㅇ_ㅇ;;
ARM MSB LSB
https://search.naver.com/search.naver?ie=utf8&sm=stp_hty&where=se&query=ARM+MSB+LSB
i2c통신
https://search.naver.com/search.naver?ie=utf8&sm=stp_hty&where=se&query=i2c%ED%86%B5%EC%8B%A0
몇가지 예제와 테스트한 내용이 있는거 같습니다. 참고해보세요.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
gilgil.net
질문의 요지는 nbo(network byte order)와 hbo(host byte order)를 mapping시키는 문제입니다. network상으로 데이터를 주고 받을 때에는 nbo로 주고 받는게 기본이며 이 데이터를 받아서 처리하기 위해서는 hbo로 바꿔 줘야 합니다. intel 계열 cpu는 little endian으로써 nbo와 hbo가 정 반대이며 arm 계열 cpu는 big endian으로써 nbo와 hbo가 일치합니다.
nbo를 hbo로 바꿔 주기 위해서 ntohs, ntohl, ntohll 등의 함수가 사용되는데, 소스 코드 레벨에서 ntohs, ntohl, ntohll 함수를 사용하면 컴파일러가 알아서 변환해 줍니다(컴파일러는 자신의 시스템이 little endian인지 big endian인지 알고 있어야 함).
www.gilgil.net
리모트(remote)에서 보낸 순서대로 옵니다.
리모트(remote)에서 보낸 순서대로 옵니다. gilgil 님이 이야기한 것 처럼 network byte order 로 오는데 기본적으로 big endian 옵니다. 만약 양쪽의 endian이 모두 big endian-big endian, 또는 little endian-little endian 이면 아무 중간 조작없이 처리하시면 되며, 만약 다르면 byte swap 이 필요할 수 있습니다.
i2c 칩에 있는 버퍼가 한바이트 받으면서 수신하는데 수신 데이터 처리 S/W에서 프린트해보면 알 수 있습니다.
감사합니다
리틀엔디안 빅엔디안에 대한 내용을 봐도 무슨 말인지 몰랐었는데
그와 관련된 문제였군요.. 이제 뭔지 감이 잡힙니다
리틀엔디안과 빅엔디안에 대해서 더 공부해보아야겠어요..ㅠ
반갑습니다 ^^
댓글 달기