인프런 커뮤니티 질문&답변

우연같이님의 프로필 이미지
우연같이

작성한 질문수

바닥부터 시작하는 STM32 드론 개발의 모든 것

ICM20602 초기화함수 질문을 하고싶은데요

작성

·

292

0

이쪽에서 who am i 가 0x12인지 검사하잖아요~

그래서 Readbyte 함수를 따라가봤는데

이렇게 되어있었고

0x75를 매개변수로 넣는데

질문사항은

1. 0x75에다가 왜 ox80을 or연산하는지 궁금하고

2. val값을 리턴하는데 0x00의 매개변수를 넣는지 궁금합니다.

데이터시트 아무리봐도 너무어렵네요 ㅜㅜ

답변 5

1

우연같이님의 프로필 이미지
우연같이
질문자

유튜브에서 부터 몇가지 질문을 했었는데 항상 친절한 답변 감사합니다!!

respect 합니다!!

1

ChrisP님의 프로필 이미지
ChrisP
지식공유자

네 구글에서 검색하신 내용도 일맥상통하는 내용입니다~

슬레이브 입장에서는 마스터에게 데이터를 보내주기 위한 클럭이 필요합니다.

SPI 통신 특성 상, 마스터만 클럭을 발생시킬 수 있고, 클럭이 발생되면 송신과 수신이 동시에 일어나기 때문에, 마스터는 데이터를 읽어오기 위한 클럭을 발생하기 위해 의미없는 더미데이터를 보내는 것이죠.

"Crisp 강사님 덕분에  많이 성장한거 같습니다." → 제가 정말 듣기 좋아하는 문구입니다~ 그리고 좋은 말씀들도 정말 감사합니다 ㅎㅎ 이런 칭찬을 들을때 마다 저도 더 열심히, 꼼꼼히, 완성도 있게 강의를 만들려고 노력합니다. 그리고 제 강의로 인해 수강생 분들이 훌륭한 임베디드 개발자로 성장하셔서 원하는 곳으로 취업도 잘 되고 돈도 많이 벌 수 있기를 바랍니다.

안타까운 것은, 임베디드 개발자가 많이 줄어들고 있는 추세이고 전자나 하드웨어 전공을 하신 분들도 요새는 웹개발이나 앱개발 같이 하드웨어보다 조금은 개발하기가 용이한(?) 분야로 진로를 변경하시는 분들이 많은것 같습니다. 아무래도 하드웨어 개발하려면 장비와 도구들도 필요하고, 돈도 많이 들고..... 무엇보다 다른 IT 분야에 비해 취업의 문이 넓지않은게 사실이죠.

저는 그래도 결국은 자동화가 이뤄지기 위한 맨 마지막 끝단은 하드웨어라고 생각하고 있기 때문에, 임베디드 분야는 절대 죽지않는(수요는 많지 않더라도) 분야라고 생각합니다.

수강생분들도 임베디드 하드웨어 분야에만 머물러계시지 말고 여러 분야를 같이 공부해보고 경험해보시기 바랍니다. 그것들이 향후에 반드시 큰 도움이 될 겁니다.

"성장을 하려면 데이터시트를 참고하여 소스코드를 직접 만들수 있는 능력이 생겼으면 좋겠다고 생각했습니다." → 이것은 매우 맞는 말씀입니다. 단순 prototyper가 될지, engineer가 될지는 개발 습관에 달렸다고 봐도 될 것 같습니다. 요새는 오픈소스가 잘 활성화 되어있기 때문에, 개발하고 구현하는 속도가 매우 빨라졌습니다. 물론 그 오픈소스를 가져다가 빨리 구현하는 것도 능력이지만, 기본기가 안 갖춰져 있으면 내가 원하는대로 수정하거나 잘 안될때 문제를 찾기가 매우 어렵죠. 그래서 공부하는 단계에서는 오픈소스를 갖다 쓰는것 보다 직접 데이터시트를 찾아가며 통신의 개념도 공부해가며 구현하는게 훨씬 가치 있습니다. 그게 어느정도 된다면, 오픈소스는 그 후에 가져다 쓰면 됩니다. 그렇게 몇번 하다보면 내 입맛에 맞게 변형해가며 구현하는 것도 정말 쉬워지게 됩니다. 그게 곧 자신의 능력을 키워주고 몸값을 높여주는 겁니다.

데이터시트를 보면서 드라이버 코드를 작성하는 강의는 저도 다루고싶었던 내용이기는 하나, 계획에는 없습니다. 그건 여러가지 이유가 있네요 ㅎㅎ 간단한 디지털센서같은걸 직접 데이터시트 보면서 드라이버 코드를 작성해보세요. 도움이 될 겁니다.

얘기가 많이 길어졌네요 ㅎㅎ 지금같은 마인드로 공부해나가시다 보면 몇 년 안에 저보다 더 능력있는 개발자로 성장하실 수 있을겁니다. 

감사합니다!

1

ChrisP님의 프로필 이미지
ChrisP
지식공유자

안녕하세요! 좋은 질문 주셨네요 ㅎㅎ

1. ICM20602의 데이터시트를 살펴보면 SPI Address 의 최상위비트가 1인지 0인지에 따라서 읽기 또는 쓰기모드로 동작한다고 되어있습니다. 데이터를 읽거나 쓰기 위해서는 레지스터 주소(하위7bit)에 R/W(상위1bit) 정보를 추가해야하는데, 질문주신 부분은 데이터를 읽어오는 동작이므로 reg_addr | 0x80을 해서 최상위비트를 1로해서 보내주는 것이죠. 

2. 그 후에 0x00을 send 하는데, SPI통신 특성 상 클럭에 맞춰서 데이터가 전송되고 동시에 수신도 이뤄지는데, 데이터를 읽어오기 위해서 마스터에서 클럭을 발생시켜줘야 하기 때문에 의미없는 임의데이터 0x00 (보통 이걸 dummy데이터라고 합니다.)을 보내서 수신을 해오는 겁니다. 이 내용은 SPI 통신 개념에 대해서 알고계시면 이해가 쉽습니다.

아래는 ICM20602의 데이터시트 일부를 발췌한 내용입니다. 이해가 좀 되셨으면 좋겠네요~

0

ChrisP님의 프로필 이미지
ChrisP
지식공유자

저도 감사합니다! :)

0

우연같이님의 프로필 이미지
우연같이
질문자

감사합니다. 통쾌하게 이해가 되었습니다. 역시 Crisp님이시네요 ㅎㅎ

2번은 reg_addr | 0x80 할때 수신데이터를 받지 ,   왜 0x00 더미데이터를 송신하나 했는데

구글 검색을 해보니 아래와 같은 내용이 있어서 이해가 됐습니다.

지금도 정말 많이 부족한 저지만  , 아무것도 몰랐던 때와 강의 들은 후를 비교하면 Crisp 강사님 덕분에  많이 성장한거 같습니다.

독립적이고 실력있는 임베디드 개발자가 되고 싶지만 ,제가 느끼기엔 한국에는 개발을 배우기에 정보들이 충분치는 않은거 같습니다.  항상 목마르던중 이 강의는 사막속에 오아시스 같은 존재였고 너무너무 잘들었습니다. 

그리고 또 성장을 하려면 데이터시트를 참고하여 소스코드를 직접 만들수 있는 능력이 생겼으면 좋겠다고 생각했습니다.

혹시 데이터시트를 보고 소스코드를 작성하는 강의를 하실 계획은 없으실까요?ㅎㅎ(예를들면 clcd나 vs1003 ,bno080 ,icm20602 등등 )

제 생각엔 강의가 드론강의처럼 길지않고 짧더라도 굉장히 가치있을거 같아서 한번 여쭤봅니다 ㅎㅎ

우연같이님의 프로필 이미지
우연같이

작성한 질문수

질문하기