07-15-2009 10:08 AM
I'm a new user of a ML505 card and I2C busses. I have a I2C master core in the ML505's Virtex 5 FPGA with the SCL and SDA signals connected to the U27 & T29 pins per the ML505 User's Guide document (UG347 page 51).
When I go to the lab, I can communicate via the I2C bus to the VGA Input device (Analog Devices AD9980 - I2C device ID 0x4C) with no problem. However, when I try to talk to the DVI Output device (Chrontel CH7301C - I2C device ID 0x76), I don't get an acknowledge.
I decided to write code to test all 128 7-bit I2C addresses to see which ones gave me an ACK. In addition to 0x4C (the VGA Input device), I received acknowledges from addresses 0x37 and 0x50 through 0x57. I then tried to read register 0x4B (the address of the Chrontel CH7301C's Device ID register) using each of those 9 other I2C device IDs. None of them returned the 0x17 value that I'd expect per the Chrontel documentation.
Can anyone explain:
1) Why I'd get responses from apparently 10 devices, when the documentation only lists 3 devices on that I2C bus? What are those other devices?
2) One of the 3 devices is the DVI Output connector, which Table 1-35 lists as Address = N/A. Why does a device have a N/A address? How is it accessed?
3) what I might be doing wrong that keeps me from being able to communicate with the CH7301C part?
Thanks,
Steve
07-16-2009 12:05 PM
Ignore the previous notes. The Chrontel device was being held in reset, therefore it didn't respond to I2C commands. Once I tied the active-low reset to the proper polarity, the device communicates as expected.
Steve
07-16-2009 06:43 AM
I've looked some more into the DVI connector and saw that the I2C bus has 2 pins on the connector. If I disconnect the DVI cable, the 9 other device IDs (other than 0x4c) which previously acknowledged no longer do. So I can answer questions 1&2 (the extra devices are in the monitor that I connected via the DVI cable).
However, I am still puzzled as to why I get no response from the Chrontel device. I can run the demos that came with the ML505, so I know that the device is working (and somehow the demo designs must be able to talk to the device via an I2C). Is there something different that I need to do (other than changing the device ID obviously) to talk to the Chrontel device than the other devices (AD9980 and monitor devices) that I can get to respond with an acknowledge?
Any help would be greatly appreciated.
Thanks,
Steve
07-16-2009 12:05 PM
Ignore the previous notes. The Chrontel device was being held in reset, therefore it didn't respond to I2C commands. Once I tied the active-low reset to the proper polarity, the device communicates as expected.
Steve
07-17-2009 04:54 AM - edited 07-17-2009 04:54 AM
Hello,
could you please be so kind and tell us which I2C IP core have you been using?
I have a ML507 board but am facing serious problems achieving proper functioning of the bus (I don't get any ACKs at all). Probably the core I am using is a bit messed up.
Thank you and Best regards,
D.
07-17-2009 06:45 AM
dpavli,
I am using the I2C core from opencores.org.
Steve
P.S. I now can communicate with the Chrontel device, but I haven't yet figured out what register settings to use to display a test screen. If you figure that out, let me know.
07-17-2009 06:48 AM
I'll rather try with XAPP333. Have you tryed this core instead?
Regards,
D.
07-21-2009 10:32 AM
03-10-2010 04:06 PM - edited 03-10-2010 04:08 PM
Here's some info that may help you with the CH7301. The following should give you some nice color bars :)
/* ( RAB, DATA, DEV_ADDR ) */
write_iic_dvi(0x9C, 0x00, CH7301_addr); //0x00 1x pixel frequency and non-inverted XCLK
//0x01 2x pixel frequency
//0x04 Inverts XCLK
//0x05 2x inverted XCLK
write_iic_dvi(0x9D, 0x48, CH7301_addr); //0x48 is default
write_iic_dvi(0x9F, 0x9C, CH7301_addr); //0x9C IDF=4 with active high VSYNC and HSYNC
//0x84 IDF=4 with active low VSYNC and HSYNC
write_iic_dvi(0xA1, 0x0D, CH7301_addr); //0x0C Enables VSYNC and HSYNC output data for IDF=4
//0x0D Enables VSYNC, HSYNC, and RGB output for IDF=4
//0x04 Disables VSYNC, HSYNC, and RGB output for IDF=4
write_iic_dvi(0xB3, 0x08, CH7301_addr); //0x08 for frequencies <= 65MHz //0x06 for f > 65MHz
write_iic_dvi(0xB4, 0x16, CH7301_addr); //0x16 for frequencies <= 65MHz //0x26 for f > 65MHz
write_iic_dvi(0xB6, 0x60, CH7301_addr); //0x60 for frequencies <= 65MHz //0xA0 for f > 65MHz
write_iic_dvi(0xC8, 0x19, CH7301_addr); //0x18 No test pattern - input data is used
//0x19 Color Bars test pattern output
//0x1A Horizontal Luminance Ramp test pattern output
write_iic_dvi(0xC9, 0xC0, CH7301_addr); //0x01 All circuitry is powered down
//0xC0 DVI is in normal power function
write_iic_dvi(0xD6, 0x01, CH7301_addr); //0x00 Disable YCrCb to RGB conversion
//0x01 Enable YCrCb to RGB conversion
04-14-2010 08:11 AM
11-18-2010 09:15 AM
I’m also using a ML505 board and its I2C busses. I have a I2C master core which I’ve got from OpenCores and I also modified it a little.
I can communicate via I2C to the VGA Input device (Analog Devices AD9980 - I2C device ID 0x4C) and to the DVI Output device (Chrontel CH7301C - I2C device ID 0x76) with no problems.
However, I’d like to perform a Test Pattern in my monitor, to be sure I’m writing to the devices in the right way. In order to do that, I’ve sent the following byte to the DVI Output device address 0x48 (TSTP – as specified in the device’s DataSheet in page 21): “00011001”. However, I expected to see in my monitor the Color Bars Test Pattern, but the monitor still doesn’t get any signal, even after I’ve written to the register 0x48.
I’m almost sure I am writing to it rightly, since I perform a write followed by a read of this register, and its value is shown in the board’s LEDs.
I don’t have any idea of how to proceed. Anyone could help me with this issue?
11-18-2010 12:54 PM
I am a student . I am using ML507 Board . I can not communicate with AD9980 and CH7301C. Can you give your code to me.
If you made such a request to me, I would tell you flat out NO. Beyond that, I would consider your request to be completely rude and improper.
1. stevesantee (either on his own or on behalf of his employer) invested considerable time and money in their work, and you are asking them to hand it to you for free. If stevesantee is working on behalf of a firm, the code is not his property to share -- it belongs to his employer. Giving away company property is easily grounds for dismissal at every company for which I've been employed.
2. If you are a student, as you say, are you studying the art and science of design or are you studying how to copy the work of others? I would hope you are in school to learn how to design things on your own.
3. Once stevesantee has shared his work, he no longer has any control over who gains access to it and who uses it -- including competitors or potential competitors to him or his firm.
Regards,
Bob Elkind
12-01-2010 12:57 AM
06-16-2011 02:49 AM
Honestly I have tried yet communicating with CH7301C using ML505 but i have created a simulation environment for ML505 and CH7301C. However simulation is somewhat different from actual implementation and the thread in this forum conforms with it, may I know if what would be the appropriate hardware settings in order to communicate with CH7301C using ML505.
Thank you and have a good day
best regards
Ryan
03-11-2013 11:03 PM
I am trying the dvi display with ml605 board. Can I use chrontel in default mode without configuring with i2c