wizwiki-w7500p I2C 사용 문의


#1

wizwiki-w7500p(이하 w7500p)로 시험 중
컴파일러 : mbed

i2c로 IC(wm8731)의 설정을 변경하여 ic를 동작하고자 합니다.
mbed의 라이브러리 중 "i2c.write(slave address, register, data)"를 사용하여 시험하였으나 ic가 동작하지 않네요.
(i2c 핀 sda:D14, scl:D15 사용)

그래서 ic에 넣을 설정을 동일하게 하여 아두이노로 ic에 업로딩한 결과 정상동작합니다.
검색해보니 i2c 포트(d14, d15)가 있기는 하나, 동작이 제대로 되지 않는다는 글이 있어서 문의합니다.

  1. w7500p에서 i2c가 정상동작하지 않나요?
  2. mbed의 라이브러리를 이용해서 i2c의 사용이 불가한가요?
  3. mbed로 i2c가 동작하지 않는다면 차선으로 제공하는 코드와 사용 방법을 문의합니다.
    slave 주소 안의 레지스터데이터를 넣는 코드가 필요합니다.
  4. 가장 확실한 건 다른 ic와 통신하거나 설정을 업로딩하는 예제를 제공해주셨으면 합니다.

검토 후 답변 바랍니다.
감사합니다.


#2

안녕하세요

W7500p에서는 i2c가 정상동작하지 않아 Hardware상에서 지원하지 않습니다.
따라서 mbed에서 i2c를 이용하고 싶은 경우,
mbed library를 이용하여 software로 i2c를 동작시킬 수 있습니다.

https://os.mbed.com/teams/WIZnet/code/I2C_SSD1306_Helloworld_WIZwiki-W7500/
위에 링크에서 보시면,

I2C i2c(PA_10,PA_9);
말씀하신 D14, D15핀을 mbed library로 i2C로 사용하도록 선언하였으며,
Adafruit library에서 i2c 통신예제를 보실 수 있습니다.


mbed library의 i2c class문서입니다.


#3

답변 감사합니다.

mbed 라이브러리로 i2c를 동작시킬 수 있다는 말은 제가 위에서 말한 mbed용 i2c의 사용이 가능하다는 말 아닌가요?
추천한 사이트에서는 mi2c.write를 사용했는데 i2c.write와 동일한 라이브러리로 판단됩니다.

하드웨어 상에서 지원하지 않고 소프트웨어에서는 동작시킬 수 있다는 말은 sclk을 소프트웨어로 발생시킨다는 말인가요?
만약 sclk를 소프트웨어로 동작시킨다면 w7500p의 sclk 클럭은 몇 khz까지 발생시킬 수 있나요?(sclk 최대 클럭속도)
그리고 소프트웨어 i2c만으로도 신뢰성 있는 데이터 통신이 가능한지 궁금하네요.
이에 대한 시험을 귀사에서 진행하신 이력이 있나요?
i2c를 이용한 데이터 통신을 사용해야 하기에 확실한 답변이 필요합니다.

최종으로는 mbed가 아닌 c코드(gcc 컴파일)로 작성할 예정입니다.
mbed와 같이 위즈넷에서 제공하는 c코드용 i2c 라이브러리가 있나요?
라이브러리가 있다면 i2c를 이용한 데이터 통신 예제도 함께 제공이 가능한가요?

그리고 mbed는 코드 길이에 대한 제한 사항이 어느정도 인지 아신다면 함께 알려주셨으면 합니다.
c코드용 라이브러리가 없거나 사용에 제한이 있다면 mbed 컴파일을 사용해야 하는지 검토차 문의합니다.

검토 후 답변 바랍니다.
수고하세요.


#4

안녕하세요

말씀하신대로 SCLK를 SW로 발생시킵니다.
GPIO로 SCL핀과 SDA핀을 연결하여 정해진 I2C규약에 따라 HIGH, LOW를 발생시켜 작동시킵니다.
GPIO로 toggle 시켜 만들어낼 수 있는 최대 CLK은 2MHz 내외이며, 신뢰성 테스트를 진행하진 않았습니다.

WIZwiki-w7500p보드용 예제는 구현하셔야하며
W7500P가 들어있는 serial to Ethernet 보드인 WIZ750SR 용 코드를 참고하시면 좋을 것 같습니다.


#5

답변 감사합니다.

이해되지 않거나 모르는 부분에 대해서 다시 문의 드립니다.

  1. 첨부한 사이트의 코드로 i2c를 이용하라는 말 같은데, 위 코드를 이용한 i2c 통신방법이나 예제를 제공하실 수는 없나요?
    위즈넷에서 코드를 만든 후 i2c 통신 시험을 한 후에 배포했을 거라 생각됩니다.
    그러면 시험에 사용했던 코드나 위즈넷에서 레퍼런스로 가지고 있는 교육용 코드가 있다면 제공해 주셨으면 합니다.

저같은 경우 i2c의 slave 주소(0x1a)의 레지스터(0x01)에 데이터를 넣고자 하는데 알려주신 사이트 코드만으로는 어떻게 해야할 지 모르겠습니다.

  1. gpio를 토글시켜서 최대 2Mhz까지 가능하다고 했는데, 그에 대한 코드도 제공하실 수 있나요?
    저는 100khz와 400khz의 클럭을 꾸준히 생성시켜서 사용하고자 합니다.

  2. 답변 중에
    “WIZwiki-w7500p 보드용 예제는 구현하셔야하며, W7500P가 들어있는 serial to Ethernet 보드인 WIZ750SR 용 코드를 참고하시면 좋을 것 같습니다.”
    라고 하셨는데, 무슨 예제를 구현하라는 얘긴지를 모르겠네요.
    WIZ750SR용 코드를 보면 'i2c start/stop/i2ack’의 코드를 그대로 사용해도 될 듯 한데, WIZwiki-w7500p 용 예제를 구현해야 한다는 말이 무슨 뜻인지 모르겠네요.

검토 후 답변 바랍니다.
수고하세요.


#6

안녕하세요

  1. i2c 예제 코드의 경우 공개하고 있지 않습니다.
    이메일을 알려주시면 제가 개인적으로 갖고 있는 keil 프로젝트로 작성된 oled를 사용한 예제를 보내드리겠습니다.
    데이터를 write하는 부분은 W7500x_i2c.c 코드안에서 I2C_Init()함수를 통해 Init하신후 I2C_Write()함수를 통해 적어주시면 됩니다.

  2. GPIO의 경우 CLOCK을 일정하게 줄 수 있지않습니다. delay함수로 toggle되는 속도를 맞춰주셔야합니다.

  3. WIZ750SR 보드용 프로젝트이기 때문에 환경이달라서 I2C부분만 참고하시라는 말이였습니다. 이메일로 코드보내드리면 그대로 사용하시면 됩니다.


#7

이메일 주소는 개인 메세지로 전달하였습니다.
보시고 그 메일로 코드 전달 바랍니다.

수고하세요.


#8

안녕하세요
금요일 오전에
메일 드렸습니다


#11

안녕하세요

다시보냈는데 받지 못하셨다니 이상하네요
말씀하신 메일로 다시한번 보냈습니다.


#12

다음메일은 잘 도착했습니다.
사용 후 문의사항 있으면 다시 글 남기도록 하겠습니다.