Ik heb een probleempje met een I2C core.
http://asicfpga.com/site_upgrade/asicfpga/pds/mcu_pds_files/xapp315.pd…
Ik heb de volgende core gebruikt. Alleen heb ik de microcontroller interface eruit gelaten en deze simuleer ik met een FSM.
Wat er gebeurd is het volgende:
Ik stuur data naar de core en deze komt er ook goed uit.
Het kloksignaal is vreemd. Hij hangt met een pull-up aan de 3.3V maar zodra de klok gestuurd wordt zakt de spanning naar 2Volt en blijft op 2volt doorpulsen, en wanneer hij dus uitgeklokt is blijft hij op 2Volt hoog hangen. Ik heb zo'n vermoeden dat ik het controlregister niet goed aanstuur, en dan met name MSTA bit. (bij reset is deze nul, in de statemachine verander ik hem naar 1 en een state later stuur ik data naar binnen). Heeft iemand enig idee wat dit zou kunnen zijn? Of heeft iemand een core die misschien makkelijker is te gebruiken? (op die van opencores.org na)
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
is je klok wel een open drain output ? of zit je daar met een push pull op .
SDA en SCL MOETEN open drain zijn ! niet alle FPGA's hebben die mogelijkheid
dat is toch gewoon een IO pin INOUT maken en Z maken? of begrijp ik dat weer helemaal verkeerd? ik gebruik een spartan3e tq144
Heb er even naar gekeken. De SCL is input en output en dus open drain. Ik zou het even niet meer weten wat er fout zou kunnen zijn! Zijn er nog andere suggesties?
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
NEEN !
Een poort Z toekennen maakt ze inderdaad tri-stated.
maar wat gebeurt er als je een 1 schrijft ? en wat gebrut er als je ene nul schrijft : je poort staat dan als driver. als driver MOET ze open drain zijn. dat kan je niet specifieren in je VHDL code. dat moet gebeuren in je pin definitie.
Geen idee hoe dat werkt in ISE. geen idee trouwens of die spartan dat wel kan ... maar tzou me verwonderen als het niet zou kunnen.