Modérateurs: Modération Forum DIY, Modération Forum Installations, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 invités

Carte evaluation DSP ADAU1452 ADAU1466 ADAU1467

Message » 10 Fév 2015 23:00

tcli a écrit:
sdf a écrit:Je pense, par contre, que même avec du "dithering", on ne pourra pas descendre à moins de la dynamique théorique (96dB en 16bits) au signal de fréquence max, 22kHz disons (à 44.1kHz), et que cette dynamique possible réelle augmentera inversement proportionnelle à la fréquence... Je me dit ça car plus on descendra dans la fraction de bits la moyenne du signal, logiquement plus le signal sera rare et par définition de fréquence faible!?

Tout ça n'est que pur spéculation mais si qqu'un peut comfirmer ou non!


Comme ca, sans réfléchir (ce qu'il ne faut jamais faire) , je dirais non il n'y a pas de raison.
Ce que montre maxidcx , est sans rapport car il s'agit de noise shaping.
C'est une autre histoire,


...mais ce noise shaping ne serait pas une un dithering avec un algo différent d'un bruit blanc, et autrement plus contrôlé?
sdf
 
Messages: 4491
Inscription Forum: 09 Jan 2003 16:22
Localisation: Toulouse
  • offline

Message » 11 Fév 2015 0:42

Non, le principe est la réinjection des erreurs/bruits de quantization dans la source, c'est une boucle de feedback.
Par exemple dans le calcul d'un biquad, on va réinjecter la négation des bits de poids faible tronqué à la sortie de l'échantillon N (l'erreur) dans le calcul de la valeur finale de l'échantillon N+1, la dernière étape consistant à décimer le résultat pour passer de la résolution de calcul à la résolution "finale" sur 16 ou 24 bits.
Le dithering va de pair, il va être introduit dans ce même feedback.
Tazz28
 
Messages: 2802
Inscription Forum: 03 Nov 2008 23:47
Localisation: Dreux
  • offline

Message » 09 Fév 2018 8:35

Salut
petit déterrage pour partager une information (pas toute fraiche d'ailleurs):

il existe une carte à base de 1452 made in china que l'on trouve aisément sur ali express (taper 1DAU1452 dans le champ de recherche), ainsi qu'une carte avec 8 sorties DAC
le topic sur diyaudio:
http://www.diyaudio.com/forums/digital- ... board.html
le schéma:
https://github.com/aventuri/sigma_tcp/b ... SP_SCH.pdf

il est prévu sur la carte un STM32 (base des schéma "bluepils"STM32duino) mais ca n'a pas l'air fonctionnel, de même la compatibilité USBi ou FreeUSBi n'est pas très clair. Mais bon, pour ceux qui veulent bricoler avec ce DSP pour pas chère, sans compter leur temps, ca peut être ludique
maxidcx
Membre HCFR Contributeur
Membre HCFR Contributeur
 
Messages: 3097
Inscription Forum: 25 Avr 2007 10:50
  • offline

Message » 06 Mar 2018 11:16

Salut

j'ai commencé à faire du reverse engineering des transactions sur le bus USB entre SigmaStudio et la carte USBi équipé du chip Cypress FX2LP.

pour cela il suffit de lancer USBPcap et de logger le flux USB, et ensuite de décoder les packets en utilisant Wiresharc et de comparer avec le flux Data qui apparaît dans la fen^tre inférieur de sigma studio.

Voici un DUMP décortiqué pour l'écriture d'un mot "0" codé sur 4 bytes en mode SPI à l'adresse 4FFF:
Code: Tout sélectionner
******** SEND B2 : WRITE SPI(ADDR, DATAn...)
URB_CONTROL "OUT" / 36byte
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes= 0 (success)
0E : URB FUNCTION : 2 byte : VENDOR h0017
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : 0(OUTPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 8
1B : CONTROL Transfert Stage : 1byte = 0 (SETUP)
1C : URB SETUP:
00 bmRequestType =h40 : host to device, Vendor
01 bRequest      = B2   ->  WRITE SPI
02 wValue      = 0
04 wIndex      =h101  -> CHIP SELECT ?
06 wLength      =6      -> ADRESSE (2bytes) + DATA(4bytes)

URB_CONTROL OUT / 34byte
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : CONTROL TRANSFER h0008
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : 0(OUTPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0006
1B : CONTROL Transfert Stage : 1byte = 1 (DATA)
1C : 4FFF 00 00 00 00

USB URB / 28byte
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : VENDOR DEVICE h0008
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : 0 (OUTPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0000
1B : CONTROL Transfert Stage : 1byte = 2 (STATUS)

****** SEND B5 : EXECUTE(FLAG) **********
USB URB CONTROL "IN" / 36 bytes
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : VENDOR  h0017
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : h80 (INPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0008
1B : CONTROL Transfert Stage : 1byte =0  (SETUP)
00 bmRequestType =hC0 : device to Host, Vendor
01 bRequest      = B5   -> 
02 wValue      = 0
04 wIndex      = 0
06 wLength      = 1

URB_CONTROL "IN" / 29 bytes
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : CONTROL TRANSFER h0008
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : h80(INPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0001
1B : CONTROL Transfert Stage : 1byte = 1 (DATA)
1C : 01

USB URB / 28byte
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : VENDOR DEVICE h0008
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : h80 (INPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0000
1B : CONTROL Transfert Stage : 1byte = 2 (STATUS)



on apprend plusieurs choses:
1) la carte USBi est configuré en USB Class "Vendor Specific" code 0xFF
2) la commande "Vendor" 0xB2 est utilisé pour écrire un flux SPI de taille variable
3) l'écriture semble se faire en 2 temps avec une commande supplémentaire 0xB5 pour soit valider l'écriture vers le DSP, ou demander le status de la transaction, ou finaliser la transaction.


Voici le flux pour faire un READBACK d'une variable, sachant que c'est un process spécific qui permet de lire la valeur de façon synchronisée avec les cycles du DSP:
Code: Tout sélectionner
******** SEND B3 : WRITE READBACK ADRESS SPI (REG ADRESS)
URB_CONTROL "OUT" / 36byte
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes= 0 (success)
0E : URB FUNCTION : 2 byte : VENDOR h0017
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : 0(OUTPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 8
1B : CONTROL Transfert Stage : 1byte = 0 (SETUP)
1C : URB SETUP:
00 bmRequestType =h40 : host to device, Vendor
01 bRequest      = B3   
02 wValue      = 0
04 wIndex      =h101  -> CHIP SELECT ?
06 wLength      =2

URB_CONTROL OUT / 30byte
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : CONTROL TRANSFER h0008
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : 0(OUTPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0002
1B : CONTROL Transfert Stage : 1byte = 1 (DATA)
1C : 0014 -> example readback

USB URB / 28byte
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : VENDOR DEVICE h0008
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : 0 (OUTPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0000
1B : CONTROL Transfert Stage : 1byte = 2 (STATUS)

****** SEND B5 : EXECUTE ?

****** SEND B4 : READ VALUE READBACK SPI(DATA LENGTH)
USB URB CONTROL "IN" / 36 bytes
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : VENDOR  h0017
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : h80 (INPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0008
1B : CONTROL Transfert Stage : 1byte =0  (SETUP)
00 bmRequestType =hC0 : device to Host, Vendor
01 bRequest      = B4   -> 
02 wValue      = 0
04 wIndex      = h101  -> CHIP SELECT ?
06 wLength      = 4

URB_CONTROL "IN" / 29 bytes
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : CONTROL TRANSFER h0008
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : h80(INPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0004
1B : CONTROL Transfert Stage : 1byte = 1 (DATA)
1C : 00 00 00 00

USB URB / 28byte
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : VENDOR DEVICE h0008
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : h80 (INPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0000
1B : CONTROL Transfert Stage : 1byte = 2 (STATUS)

****** SEND B6 : EXECUTE(FLAG) AND GET ACKNOLEDGEMENT ? **********
USB URB CONTROL "IN" / 36 bytes
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : VENDOR  h0017
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : h80 (INPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0008
1B : CONTROL Transfert Stage : 1byte =0  (SETUP)
00 bmRequestType =hC0 : device to Host, Vendor
01 bRequest      = B6   -> 
02 wValue      = 0
04 wIndex      = 0
06 wLength      = 1

URB_CONTROL "IN" / 29 bytes
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : CONTROL TRANSFER h0008
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : h80(INPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0001
1B : CONTROL Transfert Stage : 1byte = 1 (DATA)
1C : 01

USB URB / 28byte
00 : Length : h1C=28
02 : IRP ID : 8 bytes
0A : USBD STATUS : 4bytes = 0 (success)
0E : URB FUNCTION : 2 byte : VENDOR DEVICE h0008
10 : IRP INFORMATION : 5bytes
15 : ENDPOINT NUM & DIRECTION : 1 byte : h80 (INPUT)
16 : URB TRANSFER TYPE : 1 byte URB CONTROL à h02
17 : PACKET DATA LENGTH : 4 byte = 0000
1B : CONTROL Transfert Stage : 1byte = 2 (STATUS)


On voit que l'opération se fait en 4 étapes:
1) envoie de la commande 0xB3 avec pour seul paramètre les 2 bytes de l'adresse à lire (0014 dans cet exemple)
2) envoie de la commande 0xB5 (comme dans l'exemplaire précédent) pour valider cette écriture
3)envoie de la commande de lecture 0xB4 avec pour paramètre 1 byte indiquant le nombre de byte à lire (4 ici). La reception des 4 bytes se fait dans la foulée.
4) envoie de la commande 0xB6 avec 1 byte de paramètre à 1 qui semble terminer l'opération (comme pour B5 semble til)

la carte USBi à plusieurs Chips select et il semble que le paramètre "wIndex" associé aux commandes B3 et B4 soit utilisé pour le sectionner.

Au démarrage , SigmaStudio envoie les commandes standard de la class Vendor Specific pour "get descriptor" et "get string" afin d' identifier la carte Usbi.

avec ces infos il est possible de faire une interface dans un device type Atmega32u4, ou dans un XMOS ou dans un FPGA, ce qui ouvre la perspective de travailler avec un SigmaDSP et SigmaStudio sans avoir besoin d'une interface USBi.
on peux aussi , et plus simplement peut être, implémenter ces commandes dans le code source "Vendor_ax" fournit par Cypress, et le faire fonctionner dans une carte à base de CY7C68013A, que l'on trouve sur ebay ou ali express ...


il reste à faire quelques Log avec des fonctions d'écriture plus complex (filtres biquad ou Fir par exemple) pour identifier s'il ya d'autre commandes utiles, et faire aussi quelques tests de lecture écriture en I2C avec la carte d'évaluation ADAU1701, et l'affaire est bouclée :ane:
A suivre
maxidcx
Membre HCFR Contributeur
Membre HCFR Contributeur
 
Messages: 3097
Inscription Forum: 25 Avr 2007 10:50
  • offline

Message » 06 Mar 2018 11:31

Tout cela est 'il bien légal ?
ADI propose beaucoup d'infos gratuites, je présume que si leur USBi était du domaine libre, ils en donneraient toutes les infos.
thierryvalk
 
Messages: 5617
Inscription Forum: 08 Mai 2012 9:39
Localisation: Belgique
  • offline

Message » 06 Mar 2018 11:44

bah c'est toujours légal de communiquer sur une information qui transite sur un Bus USB :)
rappelons que FAT32 (ou NTFS?) à été reverse engineeré, comme Airplay and so on... souvent ca force les constructeur à passer leur code en open source
ce qui est "border line" au travers du EULA de SigmaStudio c'est la possibilité d'utiliser SigmaStudio comme logiciel de configuration par un End-User final... tant qu'on reste dans le devlopement de produit (et donc le diy) mon interprétation est que c'est conforme à l'EULA :ane:
maxidcx
Membre HCFR Contributeur
Membre HCFR Contributeur
 
Messages: 3097
Inscription Forum: 25 Avr 2007 10:50
  • offline

Message » 06 Mar 2018 12:40

la suite :
concernant l'I2C, c'est les même commandes, mais le champs vValue contient l'adresse I2C divisé par 2 et le champs wIndex passe à 0x100 au lieu de 0x101 en mode SPI.

par ailleurs sur des gros volumes d'échange de donnée, en SPI la taille maximale envoyée/lue est de 4094byte et en I2C 4092.
ce qui correspond à la memoire dispo pour les end point 2 4 6 8 entre F000 et FFFF.
doc cypress et firmware d'exemples à creuser...
maxidcx
Membre HCFR Contributeur
Membre HCFR Contributeur
 
Messages: 3097
Inscription Forum: 25 Avr 2007 10:50
  • offline

Message » 24 Jan 2019 17:09

Salut, petite mise à jour du topic avec un lien vers un module 60x40mm équipé d'un ADAU1452, d'un régulateur 3V3, d'un connecteur USBi et de 2 rangée de connecteurs 30 points pour les IO I2S.
https://www.aliexpress.com/item/SIGMADS ... 71524.html
à 45 balles c'est raisonnable et ca permet d'intégrer un DSP dans une soluce diy.
maxidcx
Membre HCFR Contributeur
Membre HCFR Contributeur
 
Messages: 3097
Inscription Forum: 25 Avr 2007 10:50
  • offline

Message » 24 Jan 2019 17:17

Intéressant, si j'ai bien compris il y a une carte mère avec l'usbi comprise ?
sdf
 
Messages: 4491
Inscription Forum: 09 Jan 2003 16:22
Localisation: Toulouse
  • offline

Message » 24 Jan 2019 17:18

Tu t'es gourré c'est une pièce de climatiseur :lol:
Fichiers joints
Climatiseur.JPG
androuski
 
Messages: 23165
Inscription Forum: 14 Mar 2007 14:43
Localisation: C'est un trou, mais rempli de pinard, donc ça me va.
  • offline

Message » 24 Jan 2019 17:46

exact!

non sérieux ca à l'air pas mal

l'usbi n'est pas incluse, il faut s'en trouver une (73euro HT chez digikey par exemple)

elle est aussi sur Ebay, avec le schéma. (mais out of stock)
https://www.ebay.com/itm/SIGMADSP-ADAU1 ... 2367496718
maxidcx
Membre HCFR Contributeur
Membre HCFR Contributeur
 
Messages: 3097
Inscription Forum: 25 Avr 2007 10:50
  • offline

Message » 24 Jan 2019 18:23

Merci pour les liens, c'est bon à savoir.

C'est le ADAU1466WBCPZ300 qui me fait de l'oeil! mais j'ai trois projets en cours que je dois finaliser avant d'en attaquer un nouveau!
sdf
 
Messages: 4491
Inscription Forum: 09 Jan 2003 16:22
Localisation: Toulouse
  • offline

Message » 12 Fév 2019 15:49

Salut,
pour ceux qui s'intéresse aux DSP de cette gamme, je suis en train de réaliser un prototype d'un module à base de ADAU1467. ca se documente dès aujourd'hui sur diyaudio, ici:
https://www.diyaudio.com/forums/digital ... ost5695169

2 proto devraient être commandés dans la semaine auprès d'une boite de république tchèque...

ps : le module est immédiatement compatible avec la motu 8A et 624 ainsi qu'avec la carte DAC8 de okto research avec qui je suis en contact :hehe:
maxidcx
Membre HCFR Contributeur
Membre HCFR Contributeur
 
Messages: 3097
Inscription Forum: 25 Avr 2007 10:50
  • offline

Message » 15 Fév 2019 8:57

La carte à base d'ADAU1452 dont tu as mis le lien existe aussi en 1466! :P

- Quelles différences entre le 1467 et 1466 ?
- Tu mets ta carte à la place du "riser" sur la photo ?

motu_624_1.jpg


- Pourquoi n'as-tu pas continuer sur un DAC ES9038pro ou ES9028PRO...tant qu'à faire un proto, et depuis le temps que tu lorgnes sur les dacs :lol: ?

Ca me chauffe ça, un DSPIY like, ADAU1466 et ES9028PRO!
sdf
 
Messages: 4491
Inscription Forum: 09 Jan 2003 16:22
Localisation: Toulouse
  • offline

Message » 15 Fév 2019 10:34

salut sdf
la différence entre le 1466 et le 1467 c'est 12 pinoches d'entrées sorties en plus dont 8 peuvent être affectées à n'importe lequel des 8 clock domaines I2S. donc ca permet de multiplier les I/O I2S sans se casser la tête avec des multiplexeurs par exemple. pour le reste il y a autant de mémoire programme et data et ca permet d'envisager du fir multicanal sans être à court de mémoire pour le rattrapage de delais entre les canaux

attention je me suis aperçu récemment que les 146x ne sont pas (encore) supportés en mode TCPIP dans sigma studio, ce qui impose l'utilisation d'une carte usbi.

oui le module est prévu pour remplacer ce petit pcb :) c'est cool :hehe:

concernant le 9028, jusqu'à récemment je ne pensais pas que je pourrais accéder aux info (NDA) et puis finalement j'ai fait une demande qui a été acceptée... alors j'ai les infos et c'est vrai que ca me démange de revisiter le projet 1452+AK4458+CS3318 par un 1467+9028... tout ca tourne un peu en rond depuis 5 ans :mdr:

mon idée avec ce module vite fait est de se faire la main sur plusieurs aspect, logiciel, flow sigmastudio et production de circuit cms multi couche avant de faire une carte plus grosse. Je viens de découvrir par exemple que la société tchèque demande 900 balles tout compris pour me faire les 2 proto (hors composants) c'est un gros investissement pour se faire la main...du coup je vais tester elecrow en chine qui doit me répondre mais j'ai l'impressions qu ils se remettent juste du nouvel an chinois...
maxidcx
Membre HCFR Contributeur
Membre HCFR Contributeur
 
Messages: 3097
Inscription Forum: 25 Avr 2007 10:50
  • offline


Retourner vers Filtrage actif, Equalisation et Processeurs

 
  • Articles en relation
    Dernier message