93 votos

¿Hay un valor de resistencia correcto para las resistencias de pull-up de I2C?

La hoja de datos de la EEPROM 24LC256 establece que:

El bus SDA requiere una resistencia pull-up a VCC (típica 10 kΩ para 100 kHz, 2 kΩ para 400 kHz y 1 MHz).

Pensé que cualquier resistencia con un valor de kΩ haría el trabajo (y parece que mi EEPROM funciona bien en diferentes frecuencias con una resistencia de 10 kΩ).

Mis preguntas son:

  • ¿hay un valor correcto para las resistencias de pull-up?
  • ¿hay una ley/regla para determinar este valor?
  • ¿cómo afectan los diferentes valores de resistencia al bus de datos de I²C?

0 votos

83voto

Friend Of George Puntos 359

Supongamos que en la fábrica ACME norte hay 999 trabajadores que ganan un salario de 112 cada uno, y 1 director general que gana 88112. El salario medio de la población es $\mu = 0.999 * 112 + 0.001 * 88112 = 200.$ La probabilidad de sacar al director general de una muestra de 49 personas en la fábrica es $49 / 1000 < 0.05$ (esto es de la distribución hipergeométrica), por lo que con un 95% de confianza, su población la media de la muestra será de 112. De hecho, ajustando la proporción de trabajadores/directores generales y el salario del director general, podemos hacer que sea arbitrariamente improbable que una muestra de 49 empleados saque un director general, fijando al mismo tiempo la media de la población en 200 y la media de la muestra en 112. Así, sin hacer algunos Si se hacen suposiciones sobre la distribución subyacente, no se puede hacer ninguna inferencia sobre la media de la población.

3 votos

Típicamente me imagino que el bus estará en reposo (de-asserted) la mayor parte del tiempo, así que para una aplicación de batería hay problemas más importantes que tratar de optimizar los pullups de I2C de manera justa :P

7 votos

Lo único que añadiría es un buffer por encima de la capacitancia sumada de los dispositivos en el bus. La propia traza, así como las juntas de soldadura de las almohadillas a los pines, también tendrán cierta impedancia. En los buses más largos la capacitancia de la traza/cable puede ser mayor que la capacitancia de las patillas de los dispositivos. Cuando diseño placas de producción no suelo determinar el valor final de pull up hasta que tengo un prototipo en la mano y puedo analizar el bus con varios valores.

26voto

lillq Puntos 4161

El método que utilicé en uno de mis complementos fue poner todas las características en un GeometryBag y utilizar ITopologicalOperator::ConstructUnion para fusionarlo en una sola geometría. Pasé esta geometría al fragmento de FlashGeometry.

Así es como lo hice (en VB.NET). En mi caso, estaba usando un IQueryFilter para hacer la selección de características (ya sea polígonos o polilíneas) para flashear

    Dim pFCursor As ESRI.ArcGIS.Geodatabase.IFeatureCursor
    Dim pFeature As ESRI.ArcGIS.Geodatabase.IFeature
    Dim pGeometry As ESRI.ArcGIS.Geometry.IGeometry
    Dim pGeometryBag As ESRI.ArcGIS.Geometry.IGeometryCollection = New ESRI.ArcGIS.Geometry.GeometryBag
    Dim pPolygon As ESRI.ArcGIS.Geometry.IPolygon
    Dim pPolyline As ESRI.ArcGIS.Geometry.IPolyline
    Dim pQFilter As New ESRI.ArcGIS.Geodatabase.QueryFilter
    Dim pRgbColor As New ESRI.ArcGIS.Display.RgbColor
    Dim pTopoOp As ESRI.ArcGIS.Geometry.ITopologicalOperator4

    Using releaser As New ESRI.ArcGIS.ADF.ComReleaser
       releaser.ManageLifetime(pFCursor)

       pQFilter.WhereClause = [String].Format("{0} in ({1})", pFClass.OIDFieldName, sender.Rows(e.RowIndex).Cells("colAdjacentOIDs").value)
       pFCursor = pFClass.Search(pQFilter, True)
       pFeature = pFCursor.NextFeature

       Do Until pFeature Is Nothing
           pGeometryBag.AddGeometry(pFeature.ShapeCopy)
           pFeature = pFCursor.NextFeature
       Loop

       Select Case pFClass.ShapeType
           Case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon
                pTopoOp = New ESRI.ArcGIS.Geometry.Polygon
                pTopoOp.ConstructUnion(pGeometryBag)
                pPolygon = pTopoOp
                pGeometry = pPolygon
           Case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline
                pTopoOp = New ESRI.ArcGIS.Geometry.Polyline
                pTopoOp.ConstructUnion(pGeometryBag)
                pPolyline = pTopoOp
                pGeometry = pPolyline
       End Select

       pRgbColor.Red = 255

       FlashGeometry(pGeometry, pRgbColor, My.ArcMap.Document.ActiveView.ScreenDisplay, 500)
   End Using

Public Sub FlashGeometry(ByVal geometry As ESRI.ArcGIS.Geometry.IGeometry, ByVal color As ESRI.ArcGIS.Display.IRgbColor, ByVal display As ESRI.ArcGIS.Display.IDisplay, ByVal delay As System.Int32)

    If geometry Is Nothing OrElse color Is Nothing OrElse display Is Nothing Then
        Return
    End If

    display.StartDrawing(display.hDC, CShort(ESRI.ArcGIS.Display.esriScreenCache.esriNoScreenCache))

    Select Case geometry.GeometryType
        Case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon

            'Set the flash geometry's symbol.
            Dim simpleFillSymbol As ESRI.ArcGIS.Display.ISimpleFillSymbol = New ESRI.ArcGIS.Display.SimpleFillSymbolClass
            simpleFillSymbol.Color = color
            Dim symbol As ESRI.ArcGIS.Display.ISymbol = TryCast(simpleFillSymbol, ESRI.ArcGIS.Display.ISymbol) ' Dynamic Cast
            symbol.ROP2 = ESRI.ArcGIS.Display.esriRasterOpCode.esriROPNotXOrPen

            'Flash the input polygon geometry.
            display.SetSymbol(symbol)
            display.DrawPolygon(geometry)
            System.Threading.Thread.Sleep(delay)
            display.DrawPolygon(geometry)
            Exit Select

        Case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline

            'Set the flash geometry's symbol.
            Dim simpleLineSymbol As ESRI.ArcGIS.Display.ISimpleLineSymbol = New ESRI.ArcGIS.Display.SimpleLineSymbolClass
            simpleLineSymbol.Width = 4
            simpleLineSymbol.Color = color
            Dim symbol As ESRI.ArcGIS.Display.ISymbol = TryCast(simpleLineSymbol, ESRI.ArcGIS.Display.ISymbol) ' Dynamic Cast
            symbol.ROP2 = ESRI.ArcGIS.Display.esriRasterOpCode.esriROPNotXOrPen

            'Flash the input polyline geometry.
            display.SetSymbol(symbol)
            display.DrawPolyline(geometry)
            System.Threading.Thread.Sleep(delay)
            display.DrawPolyline(geometry)
            Exit Select

        Case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint

            'Set the flash geometry's symbol.
            Dim simpleMarkerSymbol As ESRI.ArcGIS.Display.ISimpleMarkerSymbol = New ESRI.ArcGIS.Display.SimpleMarkerSymbolClass
            simpleMarkerSymbol.Style = ESRI.ArcGIS.Display.esriSimpleMarkerStyle.esriSMSCircle
            simpleMarkerSymbol.Size = 12
            simpleMarkerSymbol.Color = color
            Dim symbol As ESRI.ArcGIS.Display.ISymbol = TryCast(simpleMarkerSymbol, ESRI.ArcGIS.Display.ISymbol) ' Dynamic Cast
            symbol.ROP2 = ESRI.ArcGIS.Display.esriRasterOpCode.esriROPNotXOrPen

            'Flash the input point geometry.
            display.SetSymbol(symbol)
            display.DrawPoint(geometry)
            System.Threading.Thread.Sleep(delay)
            display.DrawPoint(geometry)
            Exit Select

        Case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultipoint

            'Set the flash geometry's symbol.
            Dim simpleMarkerSymbol As ESRI.ArcGIS.Display.ISimpleMarkerSymbol = New ESRI.ArcGIS.Display.SimpleMarkerSymbolClass
            simpleMarkerSymbol.Style = ESRI.ArcGIS.Display.esriSimpleMarkerStyle.esriSMSCircle
            simpleMarkerSymbol.Size = 12
            simpleMarkerSymbol.Color = color
            Dim symbol As ESRI.ArcGIS.Display.ISymbol = TryCast(simpleMarkerSymbol, ESRI.ArcGIS.Display.ISymbol) ' Dynamic Cast
            symbol.ROP2 = ESRI.ArcGIS.Display.esriRasterOpCode.esriROPNotXOrPen

            'Flash the input multipoint geometry.
            display.SetSymbol(symbol)
            display.DrawMultipoint(geometry)
            System.Threading.Thread.Sleep(delay)
            display.DrawMultipoint(geometry)
            Exit Select

    End Select

    display.FinishDrawing()

End Sub

4 votos

3 años después Texas Instruments escribió un nota de aplicación que se acerca bastante al significado de esta respuesta.

0 votos

Artículo de EDN: Cálculos de diseño para comunicaciones I2C robustas . [Sólo apilando material de referencia.]

18voto

Duncan Smart Puntos 9195

No conozco ninguna predefinida, pero deberías poder tomar cualquier proyección global buena (para algún valor de bien) y cambiar el meridiano central para que sea uno que pase por Estados Unidos en lugar de por Greenwich.

Tendrá que publicar más detalles del sistema que está utilizando antes de que podamos dar instrucciones detalladas sobre cómo crear una proyección personalizada.

13voto

jason saldo Puntos 5036

Los valores de pull-up bajos (menor resistencia) pueden mejorar los bordes de las transiciones de la señal, pero a veces pueden ser demasiado rígidos: si los dispositivos del bus no pueden absorber la corriente de pull-up, se obtiene una lógica "baja" que no es realmente tan baja, lo que puede causar errores de comunicación (y mucho dolor).

Yo optaría por la resistencia de pull-up más alta que le proporcione comunicaciones fiables.

7voto

Lehane Puntos 6776

Para bajas frecuencias el valor no importa realmente, pero para altas frecuencias puede tener un efecto de filtrado en la señal, en combinación con otras capacitancias en el circuito, por lo que recomiendan diferentes valores para diferentes velocidades.

1 votos

Sé que es una respuesta muy antigua pero quiero comentar que el valor de la resistencia hace materia a bajas frecuencias. Si el valor de la resistencia es demasiado bajo, las salidas de colector abierto no podrán bajar las líneas de señal a una lógica válida 0 nivel.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X